46 for (
int game_state = 0; game_state < 3; game_state++) {
47 const auto& sprites = overworld_->sprites(game_state);
48 std::cout <<
"\n=== Game State " << game_state <<
" ===" << std::endl;
49 std::cout <<
"Total sprites: " << sprites.size() << std::endl;
52 for (
const auto& sprite : sprites) {
53 if (!sprite.deleted() && sprite_count < 10) {
54 std::cout <<
"Sprite " << std::hex << std::setw(2) << std::setfill(
'0')
55 <<
static_cast<int>(sprite.id()) <<
" (" <<
const_cast<Sprite&
>(sprite).
name() <<
")" << std::endl;
56 std::cout <<
" Map ID: 0x" << std::hex << std::setw(2) << std::setfill(
'0')
57 << sprite.map_id() << std::endl;
58 std::cout <<
" X: " << std::dec << sprite.x() <<
" (0x" << std::hex << sprite.x() <<
")" << std::endl;
59 std::cout <<
" Y: " << std::dec << sprite.y() <<
" (0x" << std::hex << sprite.y() <<
")" << std::endl;
60 std::cout <<
" map_x: " << std::dec << sprite.map_x() << std::endl;
61 std::cout <<
" map_y: " << std::dec << sprite.map_y() << std::endl;
64 int world_start = game_state * 0x40;
65 int world_end = world_start + 0x40;
66 std::cout <<
" World range: 0x" << std::hex << world_start <<
" - 0x" << world_end << std::endl;
77 for (
int current_world = 0; current_world < 3; current_world++) {
78 const auto& sprites = overworld_->sprites(current_world);
80 std::cout <<
"\n=== Testing World " << current_world <<
" Filtering ===" << std::endl;
82 int visible_sprites = 0;
83 int total_sprites = 0;
85 for (
const auto& sprite : sprites) {
86 if (!sprite.deleted()) {
90 bool should_show = (sprite.map_id() < 0x40 + (current_world * 0x40) &&
91 sprite.map_id() >= (current_world * 0x40));
95 std::cout <<
" Visible: Sprite 0x" << std::hex << static_cast<int>(sprite.id())
96 <<
" on map 0x" << sprite.map_id() <<
" at ("
97 << std::dec << sprite.x() <<
", " << sprite.y() <<
")" << std::endl;
102 std::cout <<
"World " << current_world <<
": " << visible_sprites <<
"/"
103 << total_sprites <<
" sprites visible" << std::endl;
110 for (
int current_world = 0; current_world < 3; current_world++) {
111 const auto& sprites = overworld_->sprites(current_world);
113 std::cout <<
"\n=== World " << current_world <<
" Coordinate Analysis ===" << std::endl;
115 for (
const auto& sprite : sprites) {
116 if (!sprite.deleted() &&
117 sprite.map_id() < 0x40 + (current_world * 0x40) &&
118 sprite.map_id() >= (current_world * 0x40)) {
121 int sprite_map_id = sprite.map_id();
122 int local_map_index = sprite_map_id - (current_world * 0x40);
123 int map_col = local_map_index % 8;
124 int map_row = local_map_index / 8;
126 int map_canvas_x = map_col * 512;
127 int map_canvas_y = map_row * 512;
129 std::cout <<
"Sprite 0x" << std::hex << static_cast<int>(sprite.id())
130 <<
" on map 0x" << sprite_map_id << std::endl;
131 std::cout <<
" Local map index: " << std::dec << local_map_index << std::endl;
132 std::cout <<
" Map position: (" << map_col <<
", " << map_row <<
")" << std::endl;
133 std::cout <<
" Map canvas pos: (" << map_canvas_x <<
", " << map_canvas_y <<
")" << std::endl;
134 std::cout <<
" Sprite global pos: (" << sprite.x() <<
", " << sprite.y() <<
")" << std::endl;
135 std::cout <<
" Sprite local pos: (" << sprite.map_x() <<
", " << sprite.map_y() <<
")" << std::endl;
138 int expected_global_x = map_canvas_x + sprite.map_x();
139 int expected_global_y = map_canvas_y + sprite.map_y();
141 std::cout <<
" Expected global: (" << expected_global_x <<
", " << expected_global_y <<
")" << std::endl;
142 std::cout <<
" Actual global: (" << sprite.x() <<
", " << sprite.y() <<
")" << std::endl;
144 if (expected_global_x == sprite.x() && expected_global_y == sprite.y()) {
145 std::cout <<
" ✓ Coordinates match!" << std::endl;
147 std::cout <<
" ✗ Coordinate mismatch!" << std::endl;