28 (
rom()->data()[(header_pointer + 1) + (
room_id_ * 2)] << 8) +
35 is_light_ = ((
rom()->data()[header_location]) & 0x01) == 1;
41 palette = ((
rom()->data()[header_location + 1] & 0x3F));
72 auto room_size_address = 0xF8000 + (
room_id_ * 3);
74 std::cout <<
"Room #" <<
room_id_ <<
" Address: " << std::hex
75 << room_size_address << std::endl;
78 uint8_t low =
rom()->data()[room_size_address];
79 uint8_t high =
rom()->data()[room_size_address + 1];
80 uint8_t bank =
rom()->data()[room_size_address + 2];
83 int long_address = (bank << 16) | (high << 8) | low;
84 std::cout << std::hex << std::setfill(
'0') << std::setw(6) << long_address
88 if (long_address == 0x0A8000) {
90 std::cout <<
"Size of Room #" <<
room_id_ <<
": 0 bytes" << std::endl;
97 int next_room_address = 0xF8000 + ((
room_id_ + 1) * 3);
99 std::cout <<
"Next Room Address: " << std::hex << next_room_address
103 uint8_t next_low =
rom()->data()[next_room_address];
104 uint8_t next_high =
rom()->data()[next_room_address + 1];
105 uint8_t next_bank =
rom()->data()[next_room_address + 2];
108 int next_long_address = (next_bank << 16) | (next_high << 8) | next_low;
110 std::cout << std::hex << std::setfill(
'0') << std::setw(6)
111 << next_long_address << std::endl;
114 int room_size = next_long_address - long_address;
117 <<
" bytes" << std::endl;
119 }
catch (
const std::exception& e) {
120 std::cout <<
"Error: " << e.what() << std::endl;
277 auto rom_data =
rom()->vector();
282 int room_address = objectPointer + (
room_id_ * 3);
284 int tile_address = (rom_data[room_address + 2] << 16) +
285 (rom_data[room_address + 1] << 8) + rom_data[room_address];
289 if (objects_location == 0x52CA2) {
290 std::cout <<
"Room ID : " <<
room_id_ << std::endl;
296 static_cast<uint8_t
>((rom_data[objects_location] >> 4) & 0x0F);
299 layout =
static_cast<uint8_t
>((rom_data[objects_location + 1] >> 2) & 0x07);
304 int nbr_of_staircase = 0;
306 int pos = objects_location + 2;
318 bool end_read =
false;
321 b2 = rom_data[pos + 1];
323 if (b1 == 0xFF && b2 == 0xFF) {
333 if (b1 == 0xF0 && b2 == 0xFF) {
339 b3 = rom_data[pos + 2];
348 oid =
static_cast<short>((b3 << 4) |
349 0x80 + (((b2 & 0x03) << 2) + ((b1 & 0x03))));
350 posX =
static_cast<uint8_t
>((b1 & 0xFC) >> 2);
351 posY =
static_cast<uint8_t
>((b2 & 0xFC) >> 2);
352 sizeXY =
static_cast<uint8_t
>((((b1 & 0x03) << 2) + (b2 & 0x03)));
355 posX =
static_cast<uint8_t
>((b1 & 0xFC) >> 2);
356 posY =
static_cast<uint8_t
>((b2 & 0xFC) >> 2);
357 sizeX =
static_cast<uint8_t
>((b1 & 0x03));
358 sizeY =
static_cast<uint8_t
>((b2 & 0x03));
359 sizeXY =
static_cast<uint8_t
>(((sizeX << 2) + sizeY));
363 oid =
static_cast<short>((b3 & 0x3F) + 0x100);
364 posX =
static_cast<uint8_t
>(((b2 & 0xF0) >> 4) + ((b1 & 0x3) << 4));
365 posY =
static_cast<uint8_t
>(((b2 & 0x0F) << 2) + ((b3 & 0xC0) >> 6));
369 RoomObject r(oid, posX, posY, sizeXY,
static_cast<uint8_t
>(layer));
374 if (nbr_of_staircase < 4) {
416 auto rom_data =
rom()->vector();
417 int sprite_pointer = (0x04 << 16) +
420 int sprite_address_snes =
421 (0x09 << 16) + (rom_data[sprite_pointer + (
room_id_ * 2) + 1] << 8) +
422 rom_data[sprite_pointer + (
room_id_ * 2)];
425 bool sortsprites = rom_data[sprite_address] == 1;
429 uint8_t b1 = rom_data[sprite_address];
430 uint8_t b2 = rom_data[sprite_address + 1];
431 uint8_t b3 = rom_data[sprite_address + 2];
450 if (spr.
id() == 0xE4 && spr.
x() == 0x00 && spr.
y() == 0x1E &&
456 if (spr.
id() == 0xE4 && spr.
x() == 0x00 && spr.
y() == 0x1D &&