From c38d0d04586a6f424b587a5b8eb33876ba414f22 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Sun, 29 May 2022 20:50:53 +0100 Subject: [PATCH] Debug: Show tile layout sprite group register flags/values --- src/newgrf_spritegroup.cpp | 52 +++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/newgrf_spritegroup.cpp b/src/newgrf_spritegroup.cpp index cd346ec53e..73b63e9659 100644 --- a/src/newgrf_spritegroup.cpp +++ b/src/newgrf_spritegroup.cpp @@ -698,10 +698,60 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, int padding, uint padding, "", ((const ResultSpriteGroup *) sg)->sprite, ((const ResultSpriteGroup *) sg)->num_sprites); this->print(); break; - case SGT_TILELAYOUT: + case SGT_TILELAYOUT: { + const TileLayoutSpriteGroup *tlsg = (const TileLayoutSpriteGroup*)sg; seprintf(this->buffer, lastof(this->buffer), "%*sTile Layout [%u]", padding, "", sg->nfo_line); this->print(); + padding += 2; + if (tlsg->dts.registers != nullptr) { + const TileLayoutRegisters *registers = tlsg->dts.registers; + size_t count = 1; // 1 for the ground sprite + const DrawTileSeqStruct *element; + foreach_draw_tile_seq(element, tlsg->dts.seq) count++; + for (size_t i = 0; i < count; i ++) { + const TileLayoutRegisters *reg = registers + i; + seprintf(this->buffer, lastof(this->buffer), "%*ssection: %X, register flags: %X", padding, "", (uint)i, reg->flags); + this->print(); + if (reg->flags & TLF_DODRAW) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_DODRAW reg: %X", padding + 2, "", reg->dodraw); + this->print(); + } + if (reg->flags & TLF_SPRITE) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_SPRITE reg: %X", padding + 2, "", reg->sprite); + this->print(); + } + if (reg->flags & TLF_PALETTE) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_PALETTE reg: %X", padding + 2, "", reg->palette); + this->print(); + } + if (reg->flags & TLF_BB_XY_OFFSET) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_BB_XY_OFFSET reg: %X, %X", padding + 2, "", reg->delta.parent[0], reg->delta.parent[1]); + this->print(); + } + if (reg->flags & TLF_BB_Z_OFFSET) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_BB_Z_OFFSET reg: %X", padding + 2, "", reg->delta.parent[2]); + this->print(); + } + if (reg->flags & TLF_CHILD_X_OFFSET) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_CHILD_X_OFFSET reg: %X", padding + 2, "", reg->delta.child[0]); + this->print(); + } + if (reg->flags & TLF_CHILD_Y_OFFSET) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_CHILD_Y_OFFSET reg: %X", padding + 2, "", reg->delta.child[1]); + this->print(); + } + if (reg->flags & TLF_SPRITE_VAR10) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_SPRITE_VAR10 value: %X", padding + 2, "", reg->sprite_var10); + this->print(); + } + if (reg->flags & TLF_PALETTE_VAR10) { + seprintf(this->buffer, lastof(this->buffer), "%*sTLF_PALETTE_VAR10 value: %X", padding + 2, "", reg->palette_var10); + this->print(); + } + } + } break; + } case SGT_INDUSTRY_PRODUCTION: seprintf(this->buffer, lastof(this->buffer), "%*sIndustry Production [%u]", padding, "", sg->nfo_line); this->print();