Debug: Dump full contents of tile layout sprite groups
Fix parent/child type of register dumping
This commit is contained in:
@@ -742,42 +742,68 @@ void SpriteGroupDumper::DumpSpriteGroup(const SpriteGroup *sg, const char *paddi
|
||||
seprintf(this->buffer, lastof(this->buffer), "%sTile Layout%s [%u]", padding, extra_info, sg->nfo_line);
|
||||
print();
|
||||
emit_start();
|
||||
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), "%s section: %X, register flags: %X", padding, (uint)i, reg->flags);
|
||||
|
||||
const TileLayoutRegisters *registers = tlsg->dts.registers;
|
||||
auto print_reg_info = [&](char *b, uint i, bool is_parent) {
|
||||
if (registers == nullptr) {
|
||||
print();
|
||||
auto log_reg = [&](TileLayoutFlags flag, const char *name, uint8 flag_reg) {
|
||||
if (reg->flags & flag) {
|
||||
highlight_tag = (1 << 16) | flag_reg;
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s %s reg: %X", padding, name, flag_reg);
|
||||
print();
|
||||
}
|
||||
};
|
||||
log_reg(TLF_DODRAW, "TLF_DODRAW", reg->dodraw);
|
||||
log_reg(TLF_SPRITE, "TLF_SPRITE", reg->sprite);
|
||||
log_reg(TLF_PALETTE, "TLF_PALETTE", reg->palette);
|
||||
if (element->IsParentSprite()) {
|
||||
log_reg(TLF_BB_XY_OFFSET, "TLF_BB_XY_OFFSET x", reg->delta.parent[0]);
|
||||
log_reg(TLF_BB_XY_OFFSET, "TLF_BB_XY_OFFSET y", reg->delta.parent[1]);
|
||||
log_reg(TLF_BB_Z_OFFSET, "TLF_BB_Z_OFFSET", reg->delta.parent[2]);
|
||||
} else {
|
||||
log_reg(TLF_CHILD_X_OFFSET, "TLF_CHILD_X_OFFSET", reg->delta.child[0]);
|
||||
log_reg(TLF_CHILD_Y_OFFSET, "TLF_CHILD_Y_OFFSET", reg->delta.child[1]);
|
||||
}
|
||||
if (reg->flags & TLF_SPRITE_VAR10) {
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s TLF_SPRITE_VAR10 value: %X", padding, reg->sprite_var10);
|
||||
print();
|
||||
}
|
||||
if (reg->flags & TLF_PALETTE_VAR10) {
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s TLF_PALETTE_VAR10 value: %X", padding, reg->palette_var10);
|
||||
print();
|
||||
}
|
||||
return;
|
||||
}
|
||||
const TileLayoutRegisters *reg = registers + i;
|
||||
if (reg->flags == 0) {
|
||||
print();
|
||||
return;
|
||||
}
|
||||
seprintf(b, lastof(this->buffer), ", register flags: %X", reg->flags);
|
||||
print();
|
||||
auto log_reg = [&](TileLayoutFlags flag, const char *name, uint8 flag_reg) {
|
||||
if (reg->flags & flag) {
|
||||
highlight_tag = (1 << 16) | flag_reg;
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s %s reg: %X", padding, name, flag_reg);
|
||||
print();
|
||||
}
|
||||
};
|
||||
log_reg(TLF_DODRAW, "TLF_DODRAW", reg->dodraw);
|
||||
log_reg(TLF_SPRITE, "TLF_SPRITE", reg->sprite);
|
||||
log_reg(TLF_PALETTE, "TLF_PALETTE", reg->palette);
|
||||
if (is_parent) {
|
||||
log_reg(TLF_BB_XY_OFFSET, "TLF_BB_XY_OFFSET x", reg->delta.parent[0]);
|
||||
log_reg(TLF_BB_XY_OFFSET, "TLF_BB_XY_OFFSET y", reg->delta.parent[1]);
|
||||
log_reg(TLF_BB_Z_OFFSET, "TLF_BB_Z_OFFSET", reg->delta.parent[2]);
|
||||
} else {
|
||||
log_reg(TLF_CHILD_X_OFFSET, "TLF_CHILD_X_OFFSET", reg->delta.child[0]);
|
||||
log_reg(TLF_CHILD_Y_OFFSET, "TLF_CHILD_Y_OFFSET", reg->delta.child[1]);
|
||||
}
|
||||
if (reg->flags & TLF_SPRITE_VAR10) {
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s TLF_SPRITE_VAR10 value: %X", padding, reg->sprite_var10);
|
||||
print();
|
||||
}
|
||||
if (reg->flags & TLF_PALETTE_VAR10) {
|
||||
seprintf(this->buffer, lastof(this->buffer), "%s TLF_PALETTE_VAR10 value: %X", padding, reg->palette_var10);
|
||||
print();
|
||||
}
|
||||
};
|
||||
|
||||
char *b = this->buffer + seprintf(this->buffer, lastof(this->buffer), "%s ground: (%X, %X)",
|
||||
padding, tlsg->dts.ground.sprite, tlsg->dts.ground.pal);
|
||||
print_reg_info(b, 0, false);
|
||||
|
||||
uint offset = 0; // offset 0 is the ground sprite
|
||||
const DrawTileSeqStruct *element;
|
||||
foreach_draw_tile_seq(element, tlsg->dts.seq) {
|
||||
offset++;
|
||||
char *b = this->buffer;
|
||||
if (element->IsParentSprite()) {
|
||||
b += seprintf(this->buffer, lastof(this->buffer), "%s section: %X, image: (%X, %X), d: (%d, %d, %d), s: (%d, %d, %d)",
|
||||
padding, offset, element->image.sprite, element->image.pal,
|
||||
element->delta_x, element->delta_y, element->delta_z,
|
||||
element->size_x, element->size_y, element->size_z);
|
||||
} else {
|
||||
b += seprintf(this->buffer, lastof(this->buffer), "%s section: %X, image: (%X, %X), d: (%d, %d)",
|
||||
padding, offset, element->image.sprite, element->image.pal,
|
||||
element->delta_x, element->delta_y);
|
||||
}
|
||||
print_reg_info(b, offset, element->IsParentSprite());
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
Reference in New Issue
Block a user