13 const int NumberOfOverworldExits = 0x4F;
14 std::vector<OverworldExit> exits;
15 for (
int i = 0; i < NumberOfOverworldExits; i++) {
16 auto rom_data = rom->
data();
18 uint16_t exit_room_id;
21 uint16_t exit_y_scroll;
22 uint16_t exit_x_scroll;
23 uint16_t exit_y_player;
24 uint16_t exit_x_player;
25 uint16_t exit_y_camera;
26 uint16_t exit_x_camera;
27 uint16_t exit_scroll_mod_y;
28 uint16_t exit_scroll_mod_x;
29 uint16_t exit_door_type_1;
30 uint16_t exit_door_type_2;
38 exit_scroll_mod_x,
OWExitUnk2 + i, exit_door_type_1,
42 uint16_t py = (uint16_t)((rom_data[
OWExitYPlayer + (i * 2) + 1] << 8) +
44 uint16_t px = (uint16_t)((rom_data[
OWExitXPlayer + (i * 2) + 1] << 8) +
47 exits.emplace_back(exit_room_id, exit_map_id, exit_vram, exit_y_scroll,
48 exit_x_scroll, py, px, exit_y_camera, exit_x_camera,
49 exit_scroll_mod_y, exit_scroll_mod_x, exit_door_type_1,
50 exit_door_type_2, (px & py) == 0xFFFF);
56absl::Status
SaveExits(
Rom* rom,
const std::vector<OverworldExit>& exits) {
63 if (asm_version == 0x00) {
94 exits[i].door_type_1_));
96 exits[i].door_type_2_));
98 if (exits[i].room_id_ == 0x0180) {
100 exits[i].map_id_ & 0xFF));
101 }
else if (exits[i].room_id_ == 0x0181) {
103 exits[i].map_id_ & 0xFF));
104 }
else if (exits[i].room_id_ == 0x0182) {
106 exits[i].map_id_ & 0xFF));
110 return absl::OkStatus();