Debug: Dump full contents of tile layout sprite groups

Fix parent/child type of register dumping
pull/444/head
Jonathan G Rennison 2 years ago
parent f41624d7b2
commit bf82ace0c5

@ -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);
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;
}

Loading…
Cancel
Save