diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index e87a3ff55..52a77c99f 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -2948,7 +2948,34 @@ typedef enum { // ``` // #### `args` // - `*int32_t (camId)` - VB_SHOULD_LOAD_BG_IMAGE + VB_SHOULD_LOAD_BG_IMAGE, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*DoorShutter` + // - `*Vec3f (relPlayerPos)` + VB_DOOR_SHUTTER_HANDLE_ROOM_TRANSITION, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*DoorShutter` + VB_DOOR_SHUTTER_WALK_THROUGH_CS, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*Player` + // - `*Actor (doorActor: DoorShutter, EnDoor)` + // - `s32 (doorDirection)` + VB_PLAYER_DOOR_SETUP } GIVanillaBehavior; #endif diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 799b9a344..ebce06918 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1251,7 +1251,7 @@ int Fill() { auto ctx = Rando::Context::GetInstance(); int retries = 0; SPDLOG_INFO("Starting seed generation..."); - while (retries < 5) { + while (retries < 10) { SPDLOG_INFO("Attempt {}...", retries + 1); placementFailure = false; // showItemProgress = false; @@ -1468,7 +1468,7 @@ int Fill() { return 1; } // Unsuccessful placement - if (retries < 4) { + if (retries < 9) { SPDLOG_DEBUG("Failed to generate a beatable seed. Retrying..."); Regions::ResetAllLocations(); logic->Reset(); diff --git a/soh/soh/Enhancements/randomizer/3drando/menu.cpp b/soh/soh/Enhancements/randomizer/3drando/menu.cpp index 35f21ce20..685562ee9 100644 --- a/soh/soh/Enhancements/randomizer/3drando/menu.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/menu.cpp @@ -48,8 +48,8 @@ bool GenerateRandomizer(std::set excludedLocations, std::setClearItemLocations(); int ret = Playthrough::Playthrough_Init(ctx->GetSeed(), excludedLocations, enabledTricks); if (ret < 0) { - if (ret == -1) { // Failed to generate after 5 tries - SPDLOG_ERROR("Failed to generate after 5 tries."); + if (ret == -1) { // Failed to generate after 10 tries + SPDLOG_ERROR("Failed to generate after 10 tries."); return false; } else { SPDLOG_ERROR("Error {} with fill.", ret); diff --git a/soh/soh/Enhancements/randomizer/SeedContext.cpp b/soh/soh/Enhancements/randomizer/SeedContext.cpp index 512984117..289bf3c29 100644 --- a/soh/soh/Enhancements/randomizer/SeedContext.cpp +++ b/soh/soh/Enhancements/randomizer/SeedContext.cpp @@ -24,7 +24,6 @@ namespace Rando { std::weak_ptr Context::mContext; Context::Context() { - for (int i = 0; i < RC_MAX; i++) { itemLocationTable[i] = ItemLocation(static_cast(i)); } @@ -98,6 +97,10 @@ std::shared_ptr Context::GetInstance() { return mContext.lock(); } +const Door* Context::MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ) { + return GetEntranceShuffler()->MapDoor(scene, srcRoom, dstRoom, linkX, linkY, linkZ); +} + Hint* Context::GetHint(const RandomizerHint hintKey) { return &hintTable[hintKey]; } diff --git a/soh/soh/Enhancements/randomizer/SeedContext.h b/soh/soh/Enhancements/randomizer/SeedContext.h index 9ca42751a..fe2e4dbb1 100644 --- a/soh/soh/Enhancements/randomizer/SeedContext.h +++ b/soh/soh/Enhancements/randomizer/SeedContext.h @@ -8,6 +8,7 @@ #include "hint.h" #include "fishsanity.h" #include "trial.h" +#include "ShuffleDoors.h" #include #include @@ -40,6 +41,8 @@ class Context { static std::shared_ptr CreateInstance(); static std::shared_ptr GetInstance(); void InitStaticData(); + const Door* MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ); + void ShuffleDoors(); Hint* GetHint(RandomizerHint hintKey); void AddHint(const RandomizerHint hintId, const Hint hint); ItemLocation* GetItemLocation(RandomizerCheck locKey); diff --git a/soh/soh/Enhancements/randomizer/ShuffleDoors.cpp b/soh/soh/Enhancements/randomizer/ShuffleDoors.cpp new file mode 100644 index 000000000..cd8828660 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleDoors.cpp @@ -0,0 +1,66 @@ +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/ShipInit.hpp" +#include "soh/Enhancements/randomizer/SeedContext.h" + +extern "C" { +#include +#include "functions.h" +#include "variables.h" +#include "src/overlays/actors/ovl_En_Door/z_en_door.h" +#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h" +extern PlayState* gPlayState; +} + +void RegisterShuffleDoors() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_DOORS); + + // Teleport through doors instead of playing animation. + // OTRfunc_8009728C's MapDoor redirect resolves actual destination. + COND_VB_SHOULD(VB_PLAYER_DOOR_SETUP, shouldRegister, { + Player* player = va_arg(args, Player*); + Actor* doorActor = va_arg(args, Actor*); + s32 doorDirection = va_arg(args, s32); + + uint8_t mapIndex = gSaveContext.mapIndex; + if (doorActor->id == ACTOR_EN_DOOR) { + EnDoor* enDoor = reinterpret_cast(doorActor); + if (enDoor->lockTimer != 0) { + gSaveContext.inventory.dungeonKeys[mapIndex]--; + Flags_SetSwitch(gPlayState, doorActor->params & 0x3F); + Audio_PlayActorSound2(doorActor, NA_SE_EV_CHAIN_KEY_UNLOCK); + GameInteractor_ExecuteOnDungeonKeyUsedHooks(mapIndex); + enDoor->lockTimer = 0; + doorActor->params = (doorActor->params & ~0x380) | (DOOR_SCENEEXIT << 7); + } + } else if (doorActor->id == ACTOR_DOOR_SHUTTER) { + DoorShutter* shutter = reinterpret_cast(doorActor); + if (shutter->doorType == SHUTTER_KEY_LOCKED && + shutter->unlockTimer != 0) { + if (shutter->doorType != SHUTTER_BOSS) { + gSaveContext.inventory.dungeonKeys[mapIndex]--; + } + Flags_SetSwitch(gPlayState, shutter->dyna.actor.params & 0x3F); + Audio_PlayActorSound2(doorActor, NA_SE_EV_CHAIN_KEY_UNLOCK); + GameInteractor_ExecuteOnDungeonKeyUsedHooks(mapIndex); + shutter->unlockTimer = 0; + shutter->unk_164 = 1; + } + } + + s32 frontRoom = + gPlayState->transiActorCtx.list[(u16)doorActor->params >> 10].sides[(doorDirection > 0) ? 0 : 1].room; + if (frontRoom != gPlayState->roomCtx.curRoom.num) { + func_8009728C(gPlayState, &gPlayState->roomCtx, frontRoom); + + // Clean up previous room's actors. Vanilla calls func_80097534 after the door animation/cutscene + // completes, which kills actors not in the current or previous room (func_80031B14) + func_80097534(gPlayState, &gPlayState->roomCtx); + } + + player->doorType = PLAYER_DOORTYPE_NONE; + player->doorActor = NULL; + *should = false; + }); +} + +static RegisterShipInitFunc initFunc(RegisterShuffleDoors, { "IS_RANDO" }); diff --git a/soh/soh/Enhancements/randomizer/ShuffleDoors.h b/soh/soh/Enhancements/randomizer/ShuffleDoors.h new file mode 100644 index 000000000..5aa09e111 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleDoors.h @@ -0,0 +1,11 @@ +#pragma once + +struct Door { + s16 scene; + s8 srcRoom; + s8 dstRoom; + s16 linkX; + s16 linkY; + s16 linkZ; + s16 rotY; +}; diff --git a/soh/soh/Enhancements/randomizer/entrance.cpp b/soh/soh/Enhancements/randomizer/entrance.cpp index 06a720256..80e1f3735 100644 --- a/soh/soh/Enhancements/randomizer/entrance.cpp +++ b/soh/soh/Enhancements/randomizer/entrance.cpp @@ -7,6 +7,8 @@ #include "soh/Enhancements/gameconsole.h" #include "z64camera.h" #include "z64scene.h" +#include "dungeon.h" +#include "ShuffleDoors.h" #include @@ -16,6 +18,608 @@ extern "C" { #include "functions.h" } +const std::vector DoorsList = { + // lobby to scrub hall + { SCENE_DEKU_TREE, 0, 1, -410, 400, 416, 24576 }, + { SCENE_DEKU_TREE, 1, 0, -490, 400, 496, -8192 }, + // scrub hall to falling block + { SCENE_DEKU_TREE, 1, 2, -897, 400, 895, 24576 }, + { SCENE_DEKU_TREE, 2, 1, -977, 400, 975, -8192 }, + // lobby to raising platforms + { SCENE_DEKU_TREE, 0, 10, -500, 800, 0, 16384 }, + { SCENE_DEKU_TREE, 10, 0, -620, 800, 0, -16384 }, + // basement to scrub + { SCENE_DEKU_TREE, 3, 4, -75, -880, 520, -32768 }, + { SCENE_DEKU_TREE, 4, 3, -75, -880, 640, 0 }, + // scrub to spiked log + { SCENE_DEKU_TREE, 4, 5, -275, -880, 960, 16384 }, + { SCENE_DEKU_TREE, 5, 4, -395, -880, 960, -16384 }, + // spiked log to two torches + { SCENE_DEKU_TREE, 5, 6, -1475, -760, 1072, 16384 }, + { SCENE_DEKU_TREE, 6, 5, -1595, -760, 1072, -16384 }, + // two torches to back room + { SCENE_DEKU_TREE, 6, 7, -1854, -760, 860, 0 }, + { SCENE_DEKU_TREE, 7, 6, -1854, -760, 680, -32768 }, + // back room to petrified room + { SCENE_DEKU_TREE, 7, 8, -2380, -760, -410, 8192 }, + { SCENE_DEKU_TREE, 8, 7, -2460, -760, -490, -24576 }, + // lobby to inside mouth + { SCENE_DODONGOS_CAVERN, 0, 7, 0, 76, -1910, 0 }, + { SCENE_DODONGOS_CAVERN, 7, 0, 0, 76, -2030, -32768 }, + // loop to back room + { SCENE_DODONGOS_CAVERN, 8, 14, 1472, 76, -4170, 0 }, + { SCENE_DODONGOS_CAVERN, 14, 8, 1472, 76, -4290, -32768 }, + // lobby to blue cave + { SCENE_DODONGOS_CAVERN, 0, 4, 1400, 80, -920, -16384 }, + { SCENE_DODONGOS_CAVERN, 4, 0, 1520, 80, -920, 16384 }, + // blue cave to scrub + { SCENE_DODONGOS_CAVERN, 4, 13, 2432, 100, -2835, 0 }, + { SCENE_DODONGOS_CAVERN, 13, 4, 2432, 100, -2955, -32768 }, + // lower lizalfos to blue cave + { SCENE_DODONGOS_CAVERN, 3, 4, 2830, 100, -2395, 10901 }, + { SCENE_DODONGOS_CAVERN, 4, 3, 2740, 100, -2470, -21867 }, + // lower lizalfos to keese hall + { SCENE_DODONGOS_CAVERN, 3, 1, 3560, 100, -1335, -32768 }, + { SCENE_DODONGOS_CAVERN, 1, 3, 3560, 100, -1215, 0 }, + // baby dodongos to skulltula room + { SCENE_DODONGOS_CAVERN, 1, 11, 2560, 0, 60, -32768 }, + { SCENE_DODONGOS_CAVERN, 11, 1, 2560, 0, 180, 0 }, + // lobby to stairs + { SCENE_DODONGOS_CAVERN, 0, 2, -780, 0, -1520, 16384 }, + { SCENE_DODONGOS_CAVERN, 2, 0, -900, 0, -1520, -16384 }, + // stairs to compass + { SCENE_DODONGOS_CAVERN, 2, 15, -1960, 0, -800, -32768 }, + { SCENE_DODONGOS_CAVERN, 15, 2, -1960, 0, -680, 0 }, + // stairs to armos + { SCENE_DODONGOS_CAVERN, 2, 5, -1957, 531, -790, -32768 }, + { SCENE_DODONGOS_CAVERN, 5, 2, -1957, 531, -670, 0 }, + // armos to bridge + { SCENE_DODONGOS_CAVERN, 5, 0, -1605, 531, -320, -16384 }, + { SCENE_DODONGOS_CAVERN, 0, 5, -1485, 531, -320, 16384 }, + // spikes to scrubs + { SCENE_DODONGOS_CAVERN, 9, 6, 1840, 411, -1420, 0 }, + { SCENE_DODONGOS_CAVERN, 6, 9, 1840, 411, -1540, -32768 }, + // spikes to upper lizalfos + { SCENE_DODONGOS_CAVERN, 3, 10, 4340, 531, -660, -32768 }, + { SCENE_DODONGOS_CAVERN, 10, 3, 4340, 531, -540, 0 }, + // upper lizalfos to two flames + { SCENE_DODONGOS_CAVERN, 3, 12, 3840, 531, -920, 16384 }, + { SCENE_DODONGOS_CAVERN, 12, 3, 3720, 531, -920, -16384 }, + // entrance to floating platform + { SCENE_JABU_JABU, 0, 1, 0, -320, -1103, 0 }, + { SCENE_JABU_JABU, 1, 0, 0, -320, -1151, -32768 }, + // floating platform to holes + { SCENE_JABU_JABU, 1, 2, 0, -340, -2419, 0 }, + { SCENE_JABU_JABU, 2, 1, 0, -340, -2467, -32768 }, + // basement to kiddy pool + { SCENE_JABU_JABU, 3, 13, -540, -1113, -2780, 23789 }, + { SCENE_JABU_JABU, 13, 3, -620, -1113, -2700, -8979 }, + // basement to water switch + { SCENE_JABU_JABU, 3, 14, 400, -1113, -3224, -16384 }, + { SCENE_JABU_JABU, 14, 3, 520, -1113, -3224, 16384 }, + // water switch to floating platform + { SCENE_JABU_JABU, 14, 1, 370, -1233, -1703, 16384 }, + { SCENE_JABU_JABU, 1, 14, 250, -1233, -1703, -16384 }, + // holes to fork + { SCENE_JABU_JABU, 2, 7, 0, -340, -3930, 0 }, + { SCENE_JABU_JABU, 7, 2, 0, -340, -4050, -32768 }, + // fork to red tentacle + { SCENE_JABU_JABU, 7, 10, -1000, -340, -4680, 16384 }, + { SCENE_JABU_JABU, 10, 7, -1120, -340, -4680, -16384 }, + // fork to bubbles + { SCENE_JABU_JABU, 7, 12, -660, -340, -5120, 0 }, + { SCENE_JABU_JABU, 12, 7, -660, -340, -5240, -32768 }, + // fork to stingers + { SCENE_JABU_JABU, 7, 9, 1000, -340, -4680, -16384 }, + { SCENE_JABU_JABU, 9, 7, 1120, -340, -4680, 16384 }, + // fork to purple tentacle + { SCENE_JABU_JABU, 7, 11, 661, -340, -5125, 0 }, + { SCENE_JABU_JABU, 11, 7, 661, -340, -5245, -32768 }, + // fork to green tentacle + { SCENE_JABU_JABU, 7, 8, 0, -340, -5240, 0 }, + { SCENE_JABU_JABU, 8, 7, 0, -340, -5360, -32768 }, + // basement to big octo + { SCENE_JABU_JABU, 3, 6, -940, -1015, -3344, 16384 }, + { SCENE_JABU_JABU, 6, 3, -1060, -1015, -3344, -16384 }, + // above octo to red tentacles + { SCENE_JABU_JABU, 6, 4, -1359, 80, -2345, -32768 }, + { SCENE_JABU_JABU, 4, 6, -1359, 80, -2225, 0 }, + // red tentacles to floating platform + { SCENE_JABU_JABU, 4, 1, -680, 80, -1700, -16384 }, + { SCENE_JABU_JABU, 1, 4, -560, 80, -1700, 16384 }, + // floating platform to boss door + { SCENE_JABU_JABU, 1, 5, 560, -320, -1703, -16384 }, + { SCENE_JABU_JABU, 5, 1, 680, -320, -1703, 16384 }, + // entrance to entrance hall + { SCENE_FOREST_TEMPLE, 0, 1, 119, 359, 82, 0 }, + { SCENE_FOREST_TEMPLE, 1, 0, 119, 359, 38, -32768 }, + // entrance hall to lobby + { SCENE_FOREST_TEMPLE, 1, 2, 119, 383, -558, 0 }, + { SCENE_FOREST_TEMPLE, 2, 1, 119, 383, -602, -32768 }, + // lobby to puzzle hall + { SCENE_FOREST_TEMPLE, 2, 5, -739, 383, -1440, 16384 }, + { SCENE_FOREST_TEMPLE, 5, 2, -783, 383, -1440, -16384 }, + // puzzle hall to puzzle + { SCENE_FOREST_TEMPLE, 5, 11, -1345, 383, -1440, 16384 }, + { SCENE_FOREST_TEMPLE, 11, 5, -1389, 383, -1440, -16384 }, + // puzzle to courtyard + { SCENE_FOREST_TEMPLE, 8, 11, -1502, 523, -1886, -32768 }, + { SCENE_FOREST_TEMPLE, 11, 8, -1502, 523, -1842, 0 }, + // courtyard to floormaster + { SCENE_FOREST_TEMPLE, 8, 18, -1717, 523, -2035, 16384 }, + { SCENE_FOREST_TEMPLE, 18, 8, -1773, 523, -2035, -16384 }, + // courtyard to below boss key chest + { SCENE_FOREST_TEMPLE, 8, 21, -1640, 523, -2766, 0 }, + { SCENE_FOREST_TEMPLE, 21, 8, -1640, 523, -2822, -32768 }, + // courtyard to map hall + { SCENE_FOREST_TEMPLE, 8, 10, -149, 800, -2800, -16384 }, + { SCENE_FOREST_TEMPLE, 10, 8, -93, 800, -2800, 16384 }, + // map hall to island + { SCENE_FOREST_TEMPLE, 10, 7, 331, 800, -2800, -16384 }, + { SCENE_FOREST_TEMPLE, 7, 10, 387, 800, -2800, 16384 }, + // courtyard to lobby + { SCENE_FOREST_TEMPLE, 8, 2, -684, 243, -2243, -24576 }, + { SCENE_FOREST_TEMPLE, 2, 8, -653, 243, -2212, 8192 }, + // island to falling floor + { SCENE_FOREST_TEMPLE, 7, 15, 1663, 523, -2854, 0 }, + { SCENE_FOREST_TEMPLE, 15, 7, 1663, 523, -2898, -32768 }, + // island to lobby + { SCENE_FOREST_TEMPLE, 7, 2, 929, 243, -2244, -8192 }, + { SCENE_FOREST_TEMPLE, 2, 7, 888, 243, -2207, 24576 }, + // falling floor to green poe + { SCENE_FOREST_TEMPLE, 15, 16, 1984, 403, -1848, -32768 }, + { SCENE_FOREST_TEMPLE, 16, 15, 1984, 403, -1792, 0 }, + // green poe to green hall + { SCENE_FOREST_TEMPLE, 16, 3, 1633, 463, -1440, 16384 }, + { SCENE_FOREST_TEMPLE, 3, 16, 1577, 463, -1440, -16384 }, + // green hall to lobby + { SCENE_FOREST_TEMPLE, 3, 2, 1021, 463, -1440, 16384 }, + { SCENE_FOREST_TEMPLE, 2, 3, 977, 463, -1440, -16384 }, + // lobby to northern hall + { SCENE_FOREST_TEMPLE, 2, 4, 119, 467, -2494, 0 }, + { SCENE_FOREST_TEMPLE, 4, 2, 119, 467, -2538, -32768 }, + // northern hall to northern room + { SCENE_FOREST_TEMPLE, 4, 6, 119, 467, -2982, 0 }, + { SCENE_FOREST_TEMPLE, 6, 4, 119, 467, -3038, -32768 }, + // puzzle to twisted hall + { SCENE_FOREST_TEMPLE, 11, 19, -1765, 1228, -1792, 0 }, + { SCENE_FOREST_TEMPLE, 19, 11, -1765, 1232, -1848, -32768 }, + // twisted hall to red poe + { SCENE_FOREST_TEMPLE, 19, 12, -1444, 1228, -3322, -16384 }, + { SCENE_FOREST_TEMPLE, 12, 19, -1388, 1228, -3322, 16384 }, + // red poe to bow chest + { SCENE_FOREST_TEMPLE, 12, 6, -409, 827, -3314, -16384 }, + { SCENE_FOREST_TEMPLE, 6, 12, -353, 827, -3314, 16384 }, + // bow chest to blue poe + { SCENE_FOREST_TEMPLE, 6, 13, 471, 827, -3320, -16384 }, + { SCENE_FOREST_TEMPLE, 13, 6, 527, 827, -3320, 16384 }, + // blue poe to twisted room + { SCENE_FOREST_TEMPLE, 13, 20, 1626, 1228, -3322, -16384 }, + { SCENE_FOREST_TEMPLE, 20, 13, 1682, 1228, -3322, 16384 }, + // twisted room to frozen eye + { SCENE_FOREST_TEMPLE, 20, 14, 2000, 1228, -1848, -32768 }, + { SCENE_FOREST_TEMPLE, 14, 20, 2000, 1228, -1792, 0 }, + // lobby to boss door + { SCENE_FIRE_TEMPLE, 0, 2, -398, 200, 0, 16384 }, + { SCENE_FIRE_TEMPLE, 2, 0, -442, 200, 0, -16384 }, + // lobby to boss key + { SCENE_FIRE_TEMPLE, 0, 17, -280, 0, 162, 0 }, + { SCENE_FIRE_TEMPLE, 17, 0, -280, 0, 118, -32768 }, + // hammer locked door + { SCENE_FIRE_TEMPLE, 0, 15, 280, 0, 222, 0 }, + { SCENE_FIRE_TEMPLE, 15, 0, 280, 0, 58, -32768 }, + // clear enemies to tile room + { SCENE_FIRE_TEMPLE, 15, 18, 241, 0, -850, 0 }, + { SCENE_FIRE_TEMPLE, 18, 15, 241, 0, -907, -32768 }, + // tile room to flare dancer + { SCENE_FIRE_TEMPLE, 18, 3, 21, 0, -1245, 16384 }, + { SCENE_FIRE_TEMPLE, 3, 18, -47, 0, -1245, -16384 }, + // flare dancer to boss key + { SCENE_FIRE_TEMPLE, 3, 17, -288, 0, -926, -32768 }, + { SCENE_FIRE_TEMPLE, 17, 3, -288, 0, -864, 0 }, + // lobby to bridge + { SCENE_FIRE_TEMPLE, 0, 1, 398, 200, 0, 16384 }, + { SCENE_FIRE_TEMPLE, 1, 0, 442, 200, 0, -16384 }, + // bridge to goron on left + { SCENE_FIRE_TEMPLE, 1, 20, 1560, 100, -1538, 0 }, + { SCENE_FIRE_TEMPLE, 20, 1, 1560, 100, -1582, -32768 }, + // bridge to tile room + { SCENE_FIRE_TEMPLE, 1, 19, 1560, 240, -1498, 0 }, + { SCENE_FIRE_TEMPLE, 19, 1, 1560, 240, -1542, -32768 }, + // bridge to goron on right + { SCENE_FIRE_TEMPLE, 1, 22, 1560, 200, 1558, -32768 }, + { SCENE_FIRE_TEMPLE, 22, 1, 1560, 200, 1602, 0 }, + // bridge to fire geyser + { SCENE_FIRE_TEMPLE, 1, 21, 2678, 200, 0, -16384 }, + { SCENE_FIRE_TEMPLE, 21, 1, 2722, 200, 0, 16384 }, + // fire geyser to block + { SCENE_FIRE_TEMPLE, 21, 4, 3092, 2060, 0, 16384 }, + { SCENE_FIRE_TEMPLE, 4, 21, 3048, 2060, 0, -16384 }, + // block to maze + { SCENE_FIRE_TEMPLE, 4, 5, 2558, 2800, 0, -16384 }, + { SCENE_FIRE_TEMPLE, 5, 4, 2602, 2800, 0, 16384 }, + // maze to passage above maze + { SCENE_FIRE_TEMPLE, 5, 7, 1580, 4000, -612, -32768 }, + { SCENE_FIRE_TEMPLE, 7, 5, 1580, 4000, -568, 0 }, + // passage above maze to above maze + { SCENE_FIRE_TEMPLE, 7, 8, 1580, 4400, -612, -32768 }, + { SCENE_FIRE_TEMPLE, 8, 7, 1580, 4400, -568, 0 }, + // maze to bridge above bridge + { SCENE_FIRE_TEMPLE, 5, 6, 1550, 2800, -352, -32768 }, + { SCENE_FIRE_TEMPLE, 6, 5, 1550, 2800, -308, 0 }, + // maze to goron + { SCENE_FIRE_TEMPLE, 5, 23, 1780, 2800, -1478, 0 }, + { SCENE_FIRE_TEMPLE, 23, 5, 1780, 2800, -1522, -32768 }, + // maze to fire chase + { SCENE_FIRE_TEMPLE, 5, 16, 1482, 2940, -630, 16384 }, + { SCENE_FIRE_TEMPLE, 16, 5, 1438, 2940, -630, -16384 }, + // fire chase cage to bridge above bridge + { SCENE_FIRE_TEMPLE, 16, 6, 1209, 2800, 60, -16384 }, + { SCENE_FIRE_TEMPLE, 6, 16, 1267, 2800, 60, 16384 }, + // fire chase to bridge above bridge + { SCENE_FIRE_TEMPLE, 16, 6, 1580, 2800, 352, 0 }, + { SCENE_FIRE_TEMPLE, 6, 16, 1580, 2800, 308, -32768 }, + // fire chase to passage + { SCENE_FIRE_TEMPLE, 16, 9, 362, 2940, 190, 16384 }, + { SCENE_FIRE_TEMPLE, 9, 16, 318, 2940, 190, -16384 }, + // passage to maze + { SCENE_FIRE_TEMPLE, 9, 10, -538, 2940, 190, 16384 }, + { SCENE_FIRE_TEMPLE, 10, 9, -582, 2940, 190, -16384 }, + // maze to above cage + { SCENE_FIRE_TEMPLE, 10, 11, -1404, 2980, 0, 16384 }, + { SCENE_FIRE_TEMPLE, 11, 10, -1484, 2980, 0, -16384 }, + // maze to compass + { SCENE_FIRE_TEMPLE, 10, 25, -1073, 2800, -890, 24576 }, + { SCENE_FIRE_TEMPLE, 25, 10, -1042, 2800, -921, -8192 }, + // maze to cage by dancer + { SCENE_FIRE_TEMPLE, 10, 11, -1780, 2800, -352, -32768 }, + { SCENE_FIRE_TEMPLE, 11, 10, -1780, 2800, -308, 0 }, + // maze to cage (locked) + { SCENE_FIRE_TEMPLE, 10, 11, -1780, 2800, 352, 0 }, + { SCENE_FIRE_TEMPLE, 11, 10, -1780, 2800, 308, -32678 }, + // maze to flare dancer + { SCENE_FIRE_TEMPLE, 10, 24, -2652, 2840, -163, 24576 }, + { SCENE_FIRE_TEMPLE, 24, 10, -2680, 2840, -127, -8192 }, + // flare dancer to passage to hammer + { SCENE_FIRE_TEMPLE, 24, 12, -2720, 4000, 159, -16384 }, + { SCENE_FIRE_TEMPLE, 12, 24, -2676, 4000, 159, 16384 }, + // passage to hammer to hammer + { SCENE_FIRE_TEMPLE, 12, 13, -2392, 4400, 20, -16384 }, + { SCENE_FIRE_TEMPLE, 13, 12, -2348, 4400, 20, 16384 }, + // hammer to hammer stairs + { SCENE_FIRE_TEMPLE, 13, 14, -2377, 4180, -709, -8192 }, + { SCENE_FIRE_TEMPLE, 14, 13, -2266, 4180, -820, 24576 }, + // hammer stairs to maze + { SCENE_FIRE_TEMPLE, 14, 10, -1192, 3680, -221, -24576 }, + { SCENE_FIRE_TEMPLE, 10, 14, -1161, 3680, -185, 8192 }, + // lobby to boss door + { SCENE_WATER_TEMPLE, 0, 11, -180, 820, -1218, 0 }, + { SCENE_WATER_TEMPLE, 11, 0, -180, 820, -1262, -32768 }, + // lobby to waterfall + { SCENE_WATER_TEMPLE, 0, 5, -818, 780, -180, 16384 }, + { SCENE_WATER_TEMPLE, 5, 0, -862, 780, -180, -16384 }, + // waterfall to red crystal + { SCENE_WATER_TEMPLE, 5, 6, -2778, 760, -180, 16384 }, + { SCENE_WATER_TEMPLE, 6, 5, -2822, 760, -180, -16384 }, + // red crystal to dark link + { SCENE_WATER_TEMPLE, 6, 13, -3125, 1060, -1632, 0 }, + { SCENE_WATER_TEMPLE, 13, 6, -3125, 1060, -1688, -32768 }, + // dark link to tunnel + { SCENE_WATER_TEMPLE, 13, 7, -3125, 1060, -3672, 0 }, + { SCENE_WATER_TEMPLE, 7, 13, -3125, 1060, -3728, -32768 }, + // whirlpool to lobby + { SCENE_WATER_TEMPLE, 8, 9, -1140, 60, -1752, -32768 }, + { SCENE_WATER_TEMPLE, 9, 8, -1140, 60, -1708, 0 }, + // lobby to back rooms + { SCENE_WATER_TEMPLE, 0, 12, -180, 0, -1768, 0 }, + { SCENE_WATER_TEMPLE, 12, 0, -180, 0, -1812, -32768 }, + // back rooms to boss key + { SCENE_WATER_TEMPLE, 12, 6, -1280, 108, -2668, 16384 }, + { SCENE_WATER_TEMPLE, 16, 12, -1280, 108, -2712, -16384 }, + // back rooms to back block + { SCENE_WATER_TEMPLE, 12, 14, -180, 0, -3148, 0 }, + { SCENE_WATER_TEMPLE, 14, 12, -180, 0, -3192, -32768 }, + // back block to geyser room + { SCENE_WATER_TEMPLE, 14, 15, -652, 120, -3668, 16384 }, + { SCENE_WATER_TEMPLE, 15, 14, -708, 120, -3668, -16384 }, + // geyser room to back rooms + { SCENE_WATER_TEMPLE, 15, 12, -880, 120, -2718, -32768 }, + { SCENE_WATER_TEMPLE, 12, 15, -880, 120, -2662, 0 }, + // top of drain to map + { SCENE_WATER_TEMPLE, 17, 19, 1142, 780, 178, -16384 }, + { SCENE_WATER_TEMPLE, 19, 17, 1198, 780, 178, 16384 }, + // bottom of drain to bottom room + { SCENE_WATER_TEMPLE, 17, 18, 1142, 0, 181, -16384 }, + { SCENE_WATER_TEMPLE, 18, 17, 1198, 0, 181, 16384 }, + // lobby to bottom of tower + { SCENE_WATER_TEMPLE, 0, 1, -180, 80, 42, 0 }, + { SCENE_WATER_TEMPLE, 1, 0, -180, 80, -2, -32768 }, + // lobby to top of tower + { SCENE_WATER_TEMPLE, 0, 1, -180, 460, -408, -32768 }, + { SCENE_WATER_TEMPLE, 1, 0, -180, 460, -352, 0 }, + // lobby to lift + { SCENE_WATER_TEMPLE, 0, 10, -818, 460, -180, 16384 }, + { SCENE_WATER_TEMPLE, 10, 0, -862, 460, -180, -16384 }, + // lift to top ledge + // TODO one way door, need to figure out coordinates for this + // DOOR 10 0 (-878,860,287) + // lobby to catacombs + { SCENE_SHADOW_TEMPLE, 2, 0, -72, -63, -185, 16384 }, + { SCENE_SHADOW_TEMPLE, 0, 2, -116, -63, -185, -16384 }, + // catacombs to map + { SCENE_SHADOW_TEMPLE, 0, 1, -794, -63, -657, 0 }, + { SCENE_SHADOW_TEMPLE, 1, 0, -794, -63, -713, -32768 }, + // catacombs to dead hand + { SCENE_SHADOW_TEMPLE, 0, 4, -2026, -63, -406, 16384 }, + { SCENE_SHADOW_TEMPLE, 4, 0, -2082, -63, -406, -16384 }, + // lobby to compass + { SCENE_SHADOW_TEMPLE, 5, 7, 3358, -543, 508, -32768 }, + { SCENE_SHADOW_TEMPLE, 7, 5, 3358, -543, 564, 0 }, + // lobby to spinning blades + { SCENE_SHADOW_TEMPLE, 5, 6, 3358, -543, -404, 0 }, + { SCENE_SHADOW_TEMPLE, 6, 5, 3358, -543, -448, -32768 }, + // lobby to depths + { SCENE_SHADOW_TEMPLE, 5, 8, 3817, -543, 55, -16384 }, + { SCENE_SHADOW_TEMPLE, 8, 5, 3861, -543, 55, 16384 }, + // depths to invisible blades + { SCENE_SHADOW_TEMPLE, 9, 16, 4678, -1143, 2577, 0 }, + { SCENE_SHADOW_TEMPLE, 16, 9, 4678, -1143, 2533, -32768 }, + // depths to silver room + { SCENE_SHADOW_TEMPLE, 9, 11, 2478, -1343, 1496, 0 }, + { SCENE_SHADOW_TEMPLE, 11, 9, 2478, -1343, 1452, -32768 }, + // silver room to blue skull + { SCENE_SHADOW_TEMPLE, 11, 14, 2006, -1343, 1082, 16384 }, + { SCENE_SHADOW_TEMPLE, 14, 11, 1950, -1343, 1082, -16384 }, + // silver room to wind tunnel + { SCENE_SHADOW_TEMPLE, 11, 18, 2478, -1203, 816, 0 }, + { SCENE_SHADOW_TEMPLE, 18, 11, 2478, -1203, 772, -32768 }, + // wind tunnel to hint + { SCENE_SHADOW_TEMPLE, 18, 19, 4700, -1363, -125, -16384 }, + { SCENE_SHADOW_TEMPLE, 19, 18, 4756, -1363, -125, 16384 }, + // wind tunnel to double gibdo + { SCENE_SHADOW_TEMPLE, 18, 20, 4388, -1363, -617, 0 }, + { SCENE_SHADOW_TEMPLE, 20, 18, 4388, -1363, -674, -32768 }, + // double gibdo to boat + { SCENE_SHADOW_TEMPLE, 20, 21, 4388, -1363, -1384, 0 }, + { SCENE_SHADOW_TEMPLE, 21, 20, 4388, -1363, -1428, -32768 }, + // boat to boss door + { SCENE_SHADOW_TEMPLE, 21, 3, -2742, -1363, -258, -32768 }, + { SCENE_SHADOW_TEMPLE, 3, 21, -2742, -1363, -214, 0 }, + // boat to maze + { SCENE_SHADOW_TEMPLE, 21, 15, -3560, -1363, -1586, 16384 }, + { SCENE_SHADOW_TEMPLE, 15, 21, -3604, -1363, -1586, -16384 }, + // maze to x-cross + { SCENE_SHADOW_TEMPLE, 15, 17, -4300, -1363, -890, -16384 }, + { SCENE_SHADOW_TEMPLE, 17, 15, -4300, -1363, -834, 16384 }, + // maze to spinning skulls + { SCENE_SHADOW_TEMPLE, 15, 12, -5009, -1363, -1586, 16384 }, + { SCENE_SHADOW_TEMPLE, 12, 15, -5053, -1363, -1586, -16384 }, + // maze to wooden spikes + { SCENE_SHADOW_TEMPLE, 15, 13, -4306, -1363, -2289, 0 }, + { SCENE_SHADOW_TEMPLE, 13, 15, -4306, -1363, -2333, -32768 }, + // lobby to compass + { SCENE_SPIRIT_TEMPLE, 0, 14, 776, 30, -552, 10924 }, + { SCENE_SPIRIT_TEMPLE, 14, 0, 719, 30, -564, -21844 }, + // lobby to boulders + { SCENE_SPIRIT_TEMPLE, 0, 13, 1340, 30, -555, -10924 }, + { SCENE_SPIRIT_TEMPLE, 13, 0, 1395, 30, -573, 21844 }, + // boulders to chest + { SCENE_SPIRIT_TEMPLE, 13, 12, 1570, -130, -1575, 0 }, + { SCENE_SPIRIT_TEMPLE, 12, 13, 1570, -130, -1631, -32768 }, + // lobby to climb + { SCENE_SPIRIT_TEMPLE, 0, 15, 1058, 0, -558, 0 }, + { SCENE_SPIRIT_TEMPLE, 15, 0, 1058, 0, -614, -32768 }, + // climb to statue + { SCENE_SPIRIT_TEMPLE, 15, 5, 808, 480, -850, 16384 }, + { SCENE_SPIRIT_TEMPLE, 5, 15, 752, 480, -850, -16384 }, + // statue to beamos passage + { SCENE_SPIRIT_TEMPLE, 5, 16, 700, 813, -598, -32768 }, + { SCENE_SPIRIT_TEMPLE, 16, 5, 700, 813, -542, 0 }, + // beamos statue to triple anubis + { SCENE_SPIRIT_TEMPLE, 16, 17, 1032, 843, -210, -16384 }, + { SCENE_SPIRIT_TEMPLE, 17, 16, 1088, 843, -210, 16384 }, + // triple anubis to sliding walls + { SCENE_SPIRIT_TEMPLE, 17, 23, 1088, 843, 150, 16384 }, + { SCENE_SPIRIT_TEMPLE, 23, 17, 1032, 843, 150, -16384 }, + // triple anubis to armos puzzle + { SCENE_SPIRIT_TEMPLE, 17, 18, 1672, 843, 150, -16384 }, + { SCENE_SPIRIT_TEMPLE, 18, 17, 1728, 843, 150, 16384 }, + // armos puzzle to mirror chest + { SCENE_SPIRIT_TEMPLE, 18, 21, 1890, 843, -382, 0 }, + { SCENE_SPIRIT_TEMPLE, 21, 18, 1890, 843, -438, -32768 }, + // armos puzzle to stairs + { SCENE_SPIRIT_TEMPLE, 18, 19, 1960, 843, 442, -32768 }, + { SCENE_SPIRIT_TEMPLE, 19, 18, 1960, 843, 498, 0 }, + // stairs to iron knuckle + { SCENE_SPIRIT_TEMPLE, 20, 19, 1960, 1003, 1202, 0 }, + { SCENE_SPIRIT_TEMPLE, 19, 20, 1960, 1003, 1146, -32768 }, + // iron knuckle to mirror shield + { SCENE_SPIRIT_TEMPLE, 20, 11, 1348, 1003, 1470, 16384 }, + { SCENE_SPIRIT_TEMPLE, 11, 20, 1292, 1003, 1470, -16384 }, + // sliding walls to lullaby door + { SCENE_SPIRIT_TEMPLE, 23, 24, 680, 1543, -419, 0 }, + { SCENE_SPIRIT_TEMPLE, 24, 23, 680, 1543, -475, -32768 }, + // lullaby door to boss key + { SCENE_SPIRIT_TEMPLE, 24, 22, 680, 1633, -882, 0 }, + { SCENE_SPIRIT_TEMPLE, 22, 24, 680, 1633, -938, -32768 }, + // lullaby door to light puzzle + { SCENE_SPIRIT_TEMPLE, 24, 25, 348, 1733, -830, 16384 }, + { SCENE_SPIRIT_TEMPLE, 25, 24, 292, 1733, -830, -16384 }, + // light puzzle to light puzzle + { SCENE_SPIRIT_TEMPLE, 25, 26, -172, 1733, -830, 16384 }, + { SCENE_SPIRIT_TEMPLE, 26, 25, -228, 1733, -830, -16384 }, + // child to child left + { SCENE_SPIRIT_TEMPLE, 1, 3, -1345, 30, -540, 10924 }, + { SCENE_SPIRIT_TEMPLE, 3, 1, -1400, 30, -570, -21844 }, + // child to child anubis + { SCENE_SPIRIT_TEMPLE, 3, 27, -1450, 30, -1309, -8192 }, + { SCENE_SPIRIT_TEMPLE, 27, 3, -1421, 30, -1347, 24576 }, + // child anubis to child right + { SCENE_SPIRIT_TEMPLE, 27, 2, -839, 30, -1475, -24576 }, + { SCENE_SPIRIT_TEMPLE, 2, 27, -801, 30, -1446, 8192 }, + // child right to child + { SCENE_SPIRIT_TEMPLE, 2, 1, -720, 30, -570, 21844 }, + { SCENE_SPIRIT_TEMPLE, 1, 2, -775, 30, -540, -10924 }, + // child to child climb + { SCENE_SPIRIT_TEMPLE, 1, 4, -1058, 40, -1083, 0 }, + { SCENE_SPIRIT_TEMPLE, 4, 1, -1058, 40, -1134, -32768 }, + // child climb to statue + { SCENE_SPIRIT_TEMPLE, 4, 5, -684, 480, -850, -16384 }, + { SCENE_SPIRIT_TEMPLE, 5, 4, -636, 480, -850, 16384 }, + // statue to child stairs + { SCENE_SPIRIT_TEMPLE, 5, 7, -580, 813, -598, -32768 }, + { SCENE_SPIRIT_TEMPLE, 7, 5, -580, 813, -542, 0 }, + // child round stairs to child silver + { SCENE_SPIRIT_TEMPLE, 7, 8, -912, 843, -210, 16384 }, + { SCENE_SPIRIT_TEMPLE, 8, 7, -968, 843, -210, -16384 }, + // child silver to child straight stairs + { SCENE_SPIRIT_TEMPLE, 8, 9, -1700, 843, 442, -16384 }, + { SCENE_SPIRIT_TEMPLE, 9, 8, -1700, 843, 498, 16384 }, + // child straight stairs to iron knuckle + { SCENE_SPIRIT_TEMPLE, 9, 10, -1700, 1003, 1146, -16384 }, + { SCENE_SPIRIT_TEMPLE, 10, 9, -1700, 1003, 1202, 16384 }, + // iron knuckle to silver gauntlets + { SCENE_SPIRIT_TEMPLE, 10, 11, -1088, 1003, 1472, -16384 }, + { SCENE_SPIRIT_TEMPLE, 11, 10, -1032, 1003, 1472, 16384 }, + // statue to shortcut + { SCENE_SPIRIT_TEMPLE, 5, 6, 60, 413, -678, -32768 }, + { SCENE_SPIRIT_TEMPLE, 6, 5, 60, 413, -622, 0 }, + // x-cross to eastern room + { SCENE_BOTTOM_OF_THE_WELL, 0, 5, 450, 0, -878, 0 }, + { SCENE_BOTTOM_OF_THE_WELL, 5, 0, 450, 0, -922, -32768 }, + // x-cross to western room + { SCENE_BOTTOM_OF_THE_WELL, 0, 6, -410, 0, -878, 0 }, + { SCENE_BOTTOM_OF_THE_WELL, 6, 0, -410, 0, -922, -32768 }, + // perimeter to coffins + { SCENE_BOTTOM_OF_THE_WELL, 0, 2, -1548, 0, -740, 0 }, + { SCENE_BOTTOM_OF_THE_WELL, 2, 0, -1592, 0, -740, -32768 }, + // bottom to perimeter TODO one way door + // DOOR 1 0 (-890,0,-124) + // lower crawlspace to deadhand + { SCENE_BOTTOM_OF_THE_WELL, 0, 4, 876, -20, 209, -16384 }, + { SCENE_BOTTOM_OF_THE_WELL, 4, 0, 924, -20, 209, 16384 }, + // crawlspace to four pits + { SCENE_BOTTOM_OF_THE_WELL, 0, 3, 1140, 0, -1442, -32768 }, + { SCENE_BOTTOM_OF_THE_WELL, 3, 0, 1140, 0, -1398, 0 }, + // four pits to like like cage + { SCENE_BOTTOM_OF_THE_WELL, 3, 0, 870, 0, -882, -32768 }, + { SCENE_BOTTOM_OF_THE_WELL, 0, 3, 870, 0, -838, 0 }, + { SCENE_ICE_CAVERN, 6, 7, -1360, 280, 709, -24576 }, + { SCENE_ICE_CAVERN, 7, 6, -1317, 279, 746, 8192 }, + { SCENE_ICE_CAVERN, 7, 10, -884, 80, 1194, -24576 }, + { SCENE_ICE_CAVERN, 10, 7, -846, 80, 1235, 8192 }, + // lobby to door maze + { SCENE_GERUDO_TRAINING_GROUND, 0, 8, -70, -80, -1072, 0 }, + { SCENE_GERUDO_TRAINING_GROUND, 8, 0, -70, -80, -1128, -32768 }, + // lobby to sand + { SCENE_GERUDO_TRAINING_GROUND, 0, 1, -952, -80, -178, 16384 }, + { SCENE_GERUDO_TRAINING_GROUND, 1, 0, -1008, -80, -178, -16384 }, + // sand to fire maze + { SCENE_GERUDO_TRAINING_GROUND, 1, 2, -1580, -80, -592, 0 }, + { SCENE_GERUDO_TRAINING_GROUND, 2, 1, -1580, -80, -648, -32768 }, + // fire maze to big block + { SCENE_GERUDO_TRAINING_GROUND, 2, 3, -1580, 160, -2139, 0 }, + { SCENE_GERUDO_TRAINING_GROUND, 3, 2, -1580, 160, -2195, -32768 }, + // big block to pits + { SCENE_GERUDO_TRAINING_GROUND, 3, 10, -1580, 159, -3469, 0 }, + { SCENE_GERUDO_TRAINING_GROUND, 10, 3, -1580, 159, -3525, -32768 }, + // big block to eyes + { SCENE_GERUDO_TRAINING_GROUND, 3, 4, -805, 239, -2745, -16384 }, + { SCENE_GERUDO_TRAINING_GROUND, 4, 3, -749, 239, -2745, 16384 }, + // eyes to above maze + { SCENE_GERUDO_TRAINING_GROUND, 4, 8, -77, 239, -2088, -32768 }, + { SCENE_GERUDO_TRAINING_GROUND, 8, 4, -77, 239, -2031, 0 }, + // eyes to hammer room + { SCENE_GERUDO_TRAINING_GROUND, 4, 5, 795, -81, -2748, -16384 }, + { SCENE_GERUDO_TRAINING_GROUND, 5, 4, 851, -81, -2748, 16384 }, + // hammer room to lava + { SCENE_GERUDO_TRAINING_GROUND, 5, 6, 1443, -81, -2436, -32768 }, + { SCENE_GERUDO_TRAINING_GROUND, 6, 5, 1443, -81, -2380, 0 }, + // lava to water + { SCENE_GERUDO_TRAINING_GROUND, 6, 9, 1894, -240, -1463, -16384 }, + { SCENE_GERUDO_TRAINING_GROUND, 9, 6, 1950, -240, -1463, 16384 }, + // lava to ring of fire + { SCENE_GERUDO_TRAINING_GROUND, 6, 7, 1480, -79, -628, -32768 }, + { SCENE_GERUDO_TRAINING_GROUND, 7, 6, 1480, -80, -572, 0 }, + // ring of fire to lobby + { SCENE_GERUDO_TRAINING_GROUND, 7, 0, 888, -80, -178, 16384 }, + { SCENE_GERUDO_TRAINING_GROUND, 0, 7, 832, -80, -178, -16384 }, + // entrance to lobby + { SCENE_INSIDE_GANONS_CASTLE, 0, 1, 0, 150, 621, 0 }, + { SCENE_INSIDE_GANONS_CASTLE, 1, 0, 0, 150, 565, -32768 }, + // lobby to spirit + { SCENE_INSIDE_GANONS_CASTLE, 1, 17, -600, 150, 204, 27308 }, + { SCENE_INSIDE_GANONS_CASTLE, 17, 1, -628, 150, 252, -5460 }, + // spirit to spirit slug + { SCENE_INSIDE_GANONS_CASTLE, 17, 18, -1221, 150, 712, 10924 }, + { SCENE_INSIDE_GANONS_CASTLE, 18, 17, -1276, 150, 675, -21844 }, + // spirit slug to spirit core + { SCENE_INSIDE_GANONS_CASTLE, 18, 19, -1282, 150, 1379, 27308 }, + { SCENE_INSIDE_GANONS_CASTLE, 19, 18, -1312, 150, 1428, -5460 }, + // lobby to light + { SCENE_INSIDE_GANONS_CASTLE, 1, 9, -1291, -240, -840, 16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 9, 1, -1347, -240, -840, -16384 }, + // light to light boulders + { SCENE_INSIDE_GANONS_CASTLE, 9, 8, -2229, -240, -840, 16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 8, 9, -2285, -240, -840, -16384 }, + // light boulders to light core + { SCENE_INSIDE_GANONS_CASTLE, 8, 10, -2891, -246, -840, 16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 10, 8, -2947, -240, -840, -16384 }, + // lobby to fire + { SCENE_INSIDE_GANONS_CASTLE, 1, 14, -604, 150, -1881, 5460 }, + { SCENE_INSIDE_GANONS_CASTLE, 14, 1, -628, 150, -1932, -27308 }, + // fire to fire core + { SCENE_INSIDE_GANONS_CASTLE, 14, 15, -1939, 153, -3836, 5460 }, + { SCENE_INSIDE_GANONS_CASTLE, 15, 14, -1966, 153, -3884, -27308 }, + // lobby to shadow + { SCENE_INSIDE_GANONS_CASTLE, 12, 1, 631, 150, -1930, -5460 }, + { SCENE_INSIDE_GANONS_CASTLE, 1, 12, 602, 150, -1883, 27308 }, + // shadow to shadow core + { SCENE_INSIDE_GANONS_CASTLE, 12, 13, 2100, 210, -4482, -5460 }, + { SCENE_INSIDE_GANONS_CASTLE, 13, 12, 2131, 210, -4528, 27308 }, + // lobby to water + { SCENE_INSIDE_GANONS_CASTLE, 1, 2, 1204, -240, -840, -16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 2, 1, 1260, -240, -840, 16384 }, + // water to water puzzle + { SCENE_INSIDE_GANONS_CASTLE, 2, 3, 2324, -248, -840, -16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 3, 2, 2380, -250, -840, 16384 }, + // water puzzle to water core + { SCENE_INSIDE_GANONS_CASTLE, 3, 4, 3464, -240, -840, -16384 }, + { SCENE_INSIDE_GANONS_CASTLE, 4, 3, 3520, -240, -830, 16384 }, + // lobby to forest + { SCENE_INSIDE_GANONS_CASTLE, 1, 5, 603, 150, 202, -27308 }, + { SCENE_INSIDE_GANONS_CASTLE, 5, 1, 629, 150, 252, 5460 }, + // forest to forest wind + { SCENE_INSIDE_GANONS_CASTLE, 5, 6, 1150, 110, 1139, -27308 }, + { SCENE_INSIDE_GANONS_CASTLE, 6, 5, 1176, 110, 1187, 5460 }, + // forest wind to forest core + { SCENE_INSIDE_GANONS_CASTLE, 6, 7, 1766, 110, 2216, -27308 }, + { SCENE_INSIDE_GANONS_CASTLE, 7, 6, 1790, 110, 2266, 5460 }, + // first floor to second floor + { SCENE_GANONS_TOWER, 7, 0, -428, 0, 0, -16384 }, + { SCENE_GANONS_TOWER, 0, 7, -372, 0, 0, 16384 }, + // second floor to second floor stairs + { SCENE_GANONS_TOWER, 0, 1, 477, 40, 0, -16384 }, + { SCENE_GANONS_TOWER, 1, 0, 534, 40, 0, 16384 }, + // second floor stairs to third floor + { SCENE_GANONS_TOWER, 1, 2, 0, 260, -428, -32768 }, + { SCENE_GANONS_TOWER, 2, 1, 0, 260, -372, 0 }, + // third floor to third floor stairs + { SCENE_GANONS_TOWER, 2, 3, 0, 300, 478, -32768 }, + { SCENE_GANONS_TOWER, 3, 2, 0, 300, 534, 0 }, + // third floor stairs to fourth floor + { SCENE_GANONS_TOWER, 3, 4, 428, 520, 0, 16384 }, + { SCENE_GANONS_TOWER, 4, 3, 372, 520, 0, -16384 }, + // fourth floor to fourth floor stairs + { SCENE_GANONS_TOWER, 4, 5, -478, 560, 0, 16384 }, + { SCENE_GANONS_TOWER, 5, 4, -534, 560, 0, -16384 }, + // fourth floor stairs to pots + // TODO can't go back in vanilla, get other coords in rando + // DOOR 5 8 (-1,800,528) + // pots to fifth floor stairs + // DOOR 8 6 (472,800,0) +}; + namespace Rando { EntranceLinkInfo NO_RETURN_ENTRANCE = { EntranceType::None, RR_NONE, RR_NONE, -1 }; @@ -604,6 +1208,1645 @@ void SetAllEntrancesData() { }; auto ctx = Rando::Context::GetInstance(); + + if (ctx->GetDungeon(Rando::DEKU_TREE)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_LOBBY_2F, RR_DEKU_TREE_2F_MIDDLE_ROOM, ENTRANCE_DOOR(0) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_LOBBY_2F, + ENTRANCE_DOOR(1) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_2F_MIDDLE_ROOM, RR_DEKU_TREE_SLINGSHOT_ROOM, + ENTRANCE_DOOR(2) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_SLINGSHOT_ROOM, RR_DEKU_TREE_2F_MIDDLE_ROOM, + ENTRANCE_DOOR(3) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_LOBBY_3F, RR_DEKU_TREE_COMPASS_ROOM, ENTRANCE_DOOR(4) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_COMPASS_ROOM, RR_DEKU_TREE_LOBBY_3F, ENTRANCE_DOOR(5) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_LOWER, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, + ENTRANCE_DOOR(6) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, RR_DEKU_TREE_BASEMENT_LOWER, + ENTRANCE_DOOR(7) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, + RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(8) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, + RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, ENTRANCE_DOOR(9) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, + ENTRANCE_DOOR(10) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, + ENTRANCE_DOOR(11) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, + ENTRANCE_DOOR(12) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_TORCH_ROOM, + ENTRANCE_DOOR(13) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, RR_DEKU_TREE_BASEMENT_BACK_ROOM, + ENTRANCE_DOOR(14) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_BASEMENT_BACK_ROOM, RR_DEKU_TREE_BASEMENT_BACK_LOBBY, + ENTRANCE_DOOR(15) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_2F, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, ENTRANCE_DOOR(0) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_2F, + ENTRANCE_DOOR(1) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, RR_DEKU_TREE_MQ_COMPASS_ROOM, + ENTRANCE_DOOR(2) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_COMPASS_ROOM, RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, + ENTRANCE_DOOR(3) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_3F, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, ENTRANCE_DOOR(4) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, RR_DEKU_TREE_MQ_3F, + ENTRANCE_DOOR(5) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, + ENTRANCE_DOOR(6) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, RR_DEKU_TREE_MQ_BASEMENT, + ENTRANCE_DOOR(7) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, + RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, ENTRANCE_DOOR(8) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, + RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, ENTRANCE_DOOR(9) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, + RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(10) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, + RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, ENTRANCE_DOOR(11) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, + RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, ENTRANCE_DOOR(12) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, + RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, ENTRANCE_DOOR(13) } }, + { { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, + ENTRANCE_DOOR(14) }, + { EntranceType::DoorDekuTree, RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, + ENTRANCE_DOOR(15) } }, + }); + } + + if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsVanilla()) { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_LOBBY, + RR_DODONGOS_CAVERN_BOSS_AREA, ENTRANCE_DOOR(16) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_BOSS_AREA, + RR_DODONGOS_CAVERN_LOBBY, ENTRANCE_DOOR(17) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_BOSS_AREA, + RR_DODONGOS_CAVERN_BACK_ROOM, ENTRANCE_DOOR(18) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_BACK_ROOM, + RR_DODONGOS_CAVERN_BOSS_AREA, ENTRANCE_DOOR(19) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_LOBBY_SWITCH, + RR_DODONGOS_CAVERN_DODONGO_ROOM, ENTRANCE_DOOR(20) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_DODONGO_ROOM, + RR_DODONGOS_CAVERN_LOBBY_SWITCH, ENTRANCE_DOOR(21) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_DODONGO_ROOM, + RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, ENTRANCE_DOOR(22) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, + RR_DODONGOS_CAVERN_DODONGO_ROOM, ENTRANCE_DOOR(23) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_DODONGO_ROOM, + RR_DODONGOS_CAVERN_LOWER_LIZALFOS, ENTRANCE_DOOR(24) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_LOWER_LIZALFOS, + RR_DODONGOS_CAVERN_DODONGO_ROOM, ENTRANCE_DOOR(25) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_LOWER_LIZALFOS, + RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, ENTRANCE_DOOR(26) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, + RR_DODONGOS_CAVERN_LOWER_LIZALFOS, ENTRANCE_DOOR(27) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_SE_CORRIDOR, + RR_DODONGOS_CAVERN_SE_ROOM, ENTRANCE_DOOR(28) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_SE_ROOM, + RR_DODONGOS_CAVERN_SE_CORRIDOR, ENTRANCE_DOOR(29) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_LOBBY, + RR_DODONGOS_CAVERN_STAIRS_LOWER, ENTRANCE_DOOR(30) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_STAIRS_LOWER, + RR_DODONGOS_CAVERN_LOBBY, ENTRANCE_DOOR(31) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_STAIRS_LOWER, + RR_DODONGOS_CAVERN_COMPASS_ROOM, ENTRANCE_DOOR(32) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_COMPASS_ROOM, + RR_DODONGOS_CAVERN_STAIRS_LOWER, ENTRANCE_DOOR(33) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_STAIRS_UPPER, + RR_DODONGOS_CAVERN_ARMOS_ROOM, ENTRANCE_DOOR(34) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_ARMOS_ROOM, + RR_DODONGOS_CAVERN_STAIRS_UPPER, ENTRANCE_DOOR(35) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_ARMOS_ROOM, + RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, ENTRANCE_DOOR(36) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, + RR_DODONGOS_CAVERN_ARMOS_ROOM, ENTRANCE_DOOR(37) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, + RR_DODONGOS_CAVERN_2F_SIDE_ROOM, ENTRANCE_DOOR(38) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_2F_SIDE_ROOM, + RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, ENTRANCE_DOOR(39) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, + RR_DODONGOS_CAVERN_UPPER_LIZALFOS, ENTRANCE_DOOR(40) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_UPPER_LIZALFOS, + RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, ENTRANCE_DOOR(41) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_UPPER_LIZALFOS, + RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, ENTRANCE_DOOR(42) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, + RR_DODONGOS_CAVERN_UPPER_LIZALFOS, ENTRANCE_DOOR(43) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, + ENTRANCE_DOOR(16) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, RR_DODONGOS_CAVERN_MQ_LOBBY, + ENTRANCE_DOOR(17) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, + RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, ENTRANCE_DOOR(18) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, + RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, ENTRANCE_DOOR(19) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_POES_ROOM, + ENTRANCE_DOOR(20) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, RR_DODONGOS_CAVERN_MQ_LOBBY, + ENTRANCE_DOOR(21) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, + RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, ENTRANCE_DOOR(22) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, + RR_DODONGOS_CAVERN_MQ_POES_ROOM, ENTRANCE_DOOR(23) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_POES_ROOM, + RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, ENTRANCE_DOOR(24) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, + RR_DODONGOS_CAVERN_MQ_POES_ROOM, ENTRANCE_DOOR(25) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, + RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, ENTRANCE_DOOR(27) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, + RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, ENTRANCE_DOOR(26) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, + RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB, ENTRANCE_DOOR(28) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB, + RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, ENTRANCE_DOOR(29) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LOBBY, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, + ENTRANCE_DOOR(30) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, RR_DODONGOS_CAVERN_MQ_LOBBY, + ENTRANCE_DOOR(31) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, + RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, ENTRANCE_DOOR(32) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, + RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, ENTRANCE_DOOR(33) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, + RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, ENTRANCE_DOOR(34) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, + RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, ENTRANCE_DOOR(35) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, + RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, ENTRANCE_DOOR(36) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, + RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, ENTRANCE_DOOR(37) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, + RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, ENTRANCE_DOOR(38) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, + RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, ENTRANCE_DOOR(39) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, + RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, ENTRANCE_DOOR(40) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, + RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, ENTRANCE_DOOR(41) } }, + { { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, + RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, ENTRANCE_DOOR(42) }, + { EntranceType::DoorDodongosCavern, RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, + RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, ENTRANCE_DOOR(43) } }, + }); + } + + if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla()) { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_BEGINNING, + RR_JABU_JABUS_BELLY_LIFT_ROOM, ENTRANCE_DOOR(44) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_LIFT_ROOM, + RR_JABU_JABUS_BELLY_BEGINNING, ENTRANCE_DOOR(45) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_LIFT_ROOM, + RR_JABU_JABUS_BELLY_HOLES_ROOM, ENTRANCE_DOOR(46) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_HOLES_ROOM, + RR_JABU_JABUS_BELLY_LIFT_ROOM, ENTRANCE_DOOR(47) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_HOLES_BASEMENT, + RR_JABU_JABUS_BELLY_B1_JIGGLY, ENTRANCE_DOOR(48) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_B1_JIGGLY, + RR_JABU_JABUS_BELLY_HOLES_BASEMENT, ENTRANCE_DOOR(49) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_HOLES_LOWER_DOOR_LEDGE, + RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH, ENTRANCE_DOOR(50) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH, + RR_JABU_JABUS_BELLY_HOLES_LOWER_DOOR_LEDGE, ENTRANCE_DOOR(51) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, + RR_JABU_JABUS_BELLY_LIFT_ROOM, ENTRANCE_DOOR(52) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_LIFT_ROOM, + RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, ENTRANCE_DOOR(53) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_HOLES_ROOM, + RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, ENTRANCE_DOOR(54) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_HOLES_ROOM, ENTRANCE_DOOR(55) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_FORK_WEST, ENTRANCE_DOOR(56) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORK_WEST, + RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, ENTRANCE_DOOR(57) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_TO_FORK_NORTH_WEST, + RR_JABU_JABUS_BELLY_FORK_NORTH_WEST, ENTRANCE_DOOR(58) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORK_NORTH_WEST, + RR_JABU_JABUS_BELLY_TO_FORK_NORTH_WEST, ENTRANCE_DOOR(59) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_FORK_EAST, ENTRANCE_DOOR(60) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORK_EAST, + RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, ENTRANCE_DOOR(61) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_TO_FORK_NORTH_EAST, + RR_JABU_JABUS_BELLY_FORK_NORTH_EAST, ENTRANCE_DOOR(62) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORK_NORTH_EAST, + RR_JABU_JABUS_BELLY_TO_FORK_NORTH_EAST, ENTRANCE_DOOR(63) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_TO_FORK_NORTH, + RR_JABU_JABUS_BELLY_FORK_NORTH, ENTRANCE_DOOR(64) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_FORK_NORTH, + RR_JABU_JABUS_BELLY_TO_FORK_NORTH, ENTRANCE_DOOR(65) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, + RR_JABU_JABUS_BELLY_BIGOCTO, ENTRANCE_DOOR(66) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_BIGOCTO, + RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, ENTRANCE_DOOR(67) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, + RR_JABU_JABUS_BELLY_JIGGLIES_ROOM, ENTRANCE_DOOR(68) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_JIGGLIES_ROOM, + RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, ENTRANCE_DOOR(69) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_JIGGLIES_ROOM, + RR_JABU_JABUS_BELLY_LIFT_UPPER, ENTRANCE_DOOR(70) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_LIFT_UPPER, + RR_JABU_JABUS_BELLY_JIGGLIES_ROOM, ENTRANCE_DOOR(71) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_LIFT_ROOM, + RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, ENTRANCE_DOOR(72) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, + RR_JABU_JABUS_BELLY_LIFT_ROOM, ENTRANCE_DOOR(73) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_BEGINNING, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, + ENTRANCE_DOOR(44) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, RR_JABU_JABUS_BELLY_MQ_BEGINNING, + ENTRANCE_DOOR(45) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, + ENTRANCE_DOOR(46) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, + ENTRANCE_DOOR(47) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, + RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, ENTRANCE_DOOR(48) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, + RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, ENTRANCE_DOOR(49) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, + RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, ENTRANCE_DOOR(50) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, + RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, ENTRANCE_DOOR(51) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER, + RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, ENTRANCE_DOOR(52) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, + RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER, ENTRANCE_DOOR(53) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(54) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, ENTRANCE_DOOR(55) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_FORK_WEST, ENTRANCE_DOOR(56) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORK_WEST, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(57) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST, ENTRANCE_DOOR(58) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(59) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_FORK_EAST, ENTRANCE_DOOR(60) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORK_EAST, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(61) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST, ENTRANCE_DOOR(62) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(63) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, + RR_JABU_JABUS_BELLY_MQ_FORK_NORTH, ENTRANCE_DOOR(64) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_FORK_NORTH, + RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, ENTRANCE_DOOR(65) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, RR_JABU_JABUS_BELLY_MQ_BIGOCTO, + ENTRANCE_DOOR(66) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_BIGOCTO, RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, + ENTRANCE_DOOR(67) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, + RR_JABU_JABUS_BELLY_MQ_JIGGLIES_ROOM, ENTRANCE_DOOR(68) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_JIGGLIES_ROOM, + RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, ENTRANCE_DOOR(69) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_JIGGLIES_ROOM, + RR_JABU_JABUS_BELLY_MQ_ABOVE_LIFT_ROOM, ENTRANCE_DOOR(70) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_ABOVE_LIFT_ROOM, + RR_JABU_JABUS_BELLY_MQ_JIGGLIES_ROOM, ENTRANCE_DOOR(71) } }, + { { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, + RR_JABU_JABUS_BELLY_MQ_NEAR_BOSS_ROOM, ENTRANCE_DOOR(72) }, + { EntranceType::DoorJabuJabu, RR_JABU_JABUS_BELLY_MQ_NEAR_BOSS_ROOM, + RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, ENTRANCE_DOOR(73) } }, + }); + } + + if (ctx->GetDungeon(Rando::FOREST_TEMPLE)->IsVanilla()) { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_TREES, + RR_FOREST_TEMPLE_OVERGROWN_HALLWAY_LOWER, ENTRANCE_DOOR(74) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_OVERGROWN_HALLWAY_LOWER, + RR_FOREST_TEMPLE_TREES, ENTRANCE_DOOR(75) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_OVERGROWN_HALLWAY_UPPER, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(76) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_OVERGROWN_HALLWAY_UPPER, ENTRANCE_DOOR(77) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_RED_DOORMAT_HALLWAY, ENTRANCE_DOOR(78) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_RED_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(79) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_RED_DOORMAT_HALLWAY_DOORMAT, + RR_FOREST_TEMPLE_BLOCK_PUSH_FLOOR, ENTRANCE_DOOR(80) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLOCK_PUSH_FLOOR, + RR_FOREST_TEMPLE_RED_DOORMAT_HALLWAY_DOORMAT, ENTRANCE_DOOR(81) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM_COURTYARD_ALCOVE, + RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, ENTRANCE_DOOR(82) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, + RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM_COURTYARD_ALCOVE, ENTRANCE_DOOR(83) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, + RR_FOREST_TEMPLE_FLOORMASTER_ROOM, ENTRANCE_DOOR(84) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_FLOORMASTER_ROOM, + RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, ENTRANCE_DOOR(85) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, + RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, ENTRANCE_DOOR(86) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, + RR_FOREST_TEMPLE_NW_COURTYARD_UPPER, ENTRANCE_DOOR(87) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_COURTYARD_UPPER_ALCOVE, + RR_FOREST_TEMPLE_MAP_ROOM, ENTRANCE_DOOR(88) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MAP_ROOM, + RR_FOREST_TEMPLE_NW_COURTYARD_UPPER_ALCOVE, ENTRANCE_DOOR(89) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MAP_ROOM, + RR_FOREST_TEMPLE_NE_COURTYARD_UPPER, ENTRANCE_DOOR(90) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_COURTYARD_UPPER, + RR_FOREST_TEMPLE_MAP_ROOM, ENTRANCE_DOOR(91) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_COURTYARD_LOWER, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(92) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_NW_COURTYARD_LOWER, ENTRANCE_DOOR(93) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_COURTYARD_SCARECROW_LEDGE, + RR_FOREST_TEMPLE_FALLING_ROOM, ENTRANCE_DOOR(94) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_FALLING_ROOM, + RR_FOREST_TEMPLE_NE_COURTYARD_SCARECROW_LEDGE, ENTRANCE_DOOR(95) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_COURTYARD_LOWER, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(96) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_NE_COURTYARD_LOWER, ENTRANCE_DOOR(97) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_FALLING_ROOM, + RR_FOREST_TEMPLE_GREEN_POE_ROOM, ENTRANCE_DOOR(98) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_GREEN_POE_ROOM, + RR_FOREST_TEMPLE_FALLING_ROOM, ENTRANCE_DOOR(99) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_GREEN_POE_ROOM, + RR_FOREST_TEMPLE_BLUE_DOORMAT_HALLWAY_DOORMAT, ENTRANCE_DOOR(100) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLUE_DOORMAT_HALLWAY_DOORMAT, + RR_FOREST_TEMPLE_GREEN_POE_ROOM, ENTRANCE_DOOR(101) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLUE_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(102) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_BLUE_DOORMAT_HALLWAY, ENTRANCE_DOOR(103) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOBBY, + RR_FOREST_TEMPLE_NORTH_HALLWAY, ENTRANCE_DOOR(104) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_NORTH_HALLWAY, + RR_FOREST_TEMPLE_LOBBY, ENTRANCE_DOOR(105) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NORTH_HALLWAY, + RR_FOREST_TEMPLE_LOWER_STALFOS, ENTRANCE_DOOR(106) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_LOWER_STALFOS, + RR_FOREST_TEMPLE_NORTH_HALLWAY, ENTRANCE_DOOR(107) } }, + // TODO change twisted/straight to one RR with logic + //{ { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, + // RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, ENTRANCE_DOOR(108) }, + // { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, + // RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, ENTRANCE_DOOR(109) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_HALLWAY_TWISTED, + RR_FOREST_TEMPLE_RED_POE_ROOM, ENTRANCE_DOOR(110) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_RED_POE_ROOM, + RR_FOREST_TEMPLE_NW_HALLWAY_TWISTED, ENTRANCE_DOOR(111) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_RED_POE_ROOM, + RR_FOREST_TEMPLE_UPPER_STALFOS, ENTRANCE_DOOR(112) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_UPPER_STALFOS, + RR_FOREST_TEMPLE_RED_POE_ROOM, ENTRANCE_DOOR(113) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_UPPER_STALFOS, + RR_FOREST_TEMPLE_BLUE_POE_ROOM, ENTRANCE_DOOR(114) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLUE_POE_ROOM, + RR_FOREST_TEMPLE_UPPER_STALFOS, ENTRANCE_DOOR(115) } }, + // TODO twisted/straight logic + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLUE_POE_ROOM, + RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, ENTRANCE_DOOR(116) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, + RR_FOREST_TEMPLE_BLUE_POE_ROOM, ENTRANCE_DOOR(117) } }, + //{ { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, + // RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, ENTRANCE_DOOR(118) }, + // { EntranceType::DoorForest, RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, + // RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, ENTRANCE_DOOR(119) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_TREES, + RR_FOREST_TEMPLE_MQ_OVERGROWN_HALLWAY_LOWER, ENTRANCE_DOOR(74) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_OVERGROWN_HALLWAY_LOWER, + RR_FOREST_TEMPLE_MQ_TREES, ENTRANCE_DOOR(75) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_OVERGROWN_HALLWAY_UPPER, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(76) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_OVERGROWN_HALLWAY_UPPER, ENTRANCE_DOOR(77) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_RED_DOORMAT_HALLWAY, ENTRANCE_DOOR(78) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_RED_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(79) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_RED_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, ENTRANCE_DOOR(80) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, + RR_FOREST_TEMPLE_MQ_RED_DOORMAT_HALLWAY, ENTRANCE_DOOR(81) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE, + RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, ENTRANCE_DOOR(82) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, + RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE, ENTRANCE_DOOR(83) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, + RR_FOREST_TEMPLE_MQ_REDEAD_ROOM, ENTRANCE_DOOR(84) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_REDEAD_ROOM, + RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, ENTRANCE_DOOR(85) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, + RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, ENTRANCE_DOOR(86) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, + RR_FOREST_TEMPLE_MQ_NW_COURTYARD_LEDGE, ENTRANCE_DOOR(87) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NW_COURTYARD, + RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, ENTRANCE_DOOR(88) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, + RR_FOREST_TEMPLE_MQ_NW_COURTYARD, ENTRANCE_DOOR(89) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, + RR_FOREST_TEMPLE_MQ_COURTYARD_TOP_LEDGES, ENTRANCE_DOOR(90) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_COURTYARD_TOP_LEDGES, + RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, ENTRANCE_DOOR(91) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NE_COURTYARD, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(92) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_NW_COURTYARD, ENTRANCE_DOOR(93) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_COURTYARD_TOP_LEDGES, + RR_FOREST_TEMPLE_MQ_FALLING_ROOM, ENTRANCE_DOOR(94) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_FALLING_ROOM, + RR_FOREST_TEMPLE_MQ_COURTYARD_TOP_LEDGES, ENTRANCE_DOOR(95) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NE_COURTYARD, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(96) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_NE_COURTYARD, ENTRANCE_DOOR(97) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_FALLING_ROOM, + RR_FOREST_TEMPLE_MQ_AMY_ROOM, ENTRANCE_DOOR(98) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_AMY_ROOM, + RR_FOREST_TEMPLE_MQ_FALLING_ROOM, ENTRANCE_DOOR(99) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_AMY_ROOM, + RR_FOREST_TEMPLE_MQ_BLUE_DOORMAT_HALLWAY, ENTRANCE_DOOR(100) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_BLUE_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_MQ_AMY_ROOM, ENTRANCE_DOOR(101) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_BLUE_DOORMAT_HALLWAY, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(102) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_BLUE_DOORMAT_HALLWAY, ENTRANCE_DOOR(103) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_LOBBY, + RR_FOREST_TEMPLE_MQ_NORTH_HALLWAY, ENTRANCE_DOOR(104) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NORTH_HALLWAY, + RR_FOREST_TEMPLE_MQ_LOBBY, ENTRANCE_DOOR(105) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_NORTH_HALLWAY, + RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, ENTRANCE_DOOR(106) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, + RR_FOREST_TEMPLE_MQ_NORTH_HALLWAY, ENTRANCE_DOOR(107) } }, + // TODO change twisted/straight to one RR with logic + //{ { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, + // RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, ENTRANCE_DOOR(108) }, + // { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, + // RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, ENTRANCE_DOOR(109) } }, + //{ { EntranceType::DoorForest, RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, + // RR_FOREST_TEMPLE_RED_POE_ROOM, ENTRANCE_DOOR(110) }, + // { EntranceType::DoorForest, RR_FOREST_TEMPLE_RED_POE_ROOM, + // RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, ENTRANCE_DOOR(111) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, + RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, ENTRANCE_DOOR(112) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, + RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, ENTRANCE_DOOR(113) } }, + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, + RR_FOREST_TEMPLE_MQ_BETH_ROOM, ENTRANCE_DOOR(114) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_MQ_BETH_ROOM, + RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, ENTRANCE_DOOR(115) } }, + // TODO twisted/straight logic + { { EntranceType::DoorForest, RR_FOREST_TEMPLE_BLUE_POE_ROOM, + RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, ENTRANCE_DOOR(116) }, + { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, + RR_FOREST_TEMPLE_BLUE_POE_ROOM, ENTRANCE_DOOR(117) } }, + //{ { EntranceType::DoorForest, RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, + // RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, ENTRANCE_DOOR(118) }, + // { EntranceType::DoorForest, RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, + // RR_FOREST_TEMPLE_NE_HALLWAY_STRAIGHTENED, ENTRANCE_DOOR(119) } }, + }); + } + + if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FOYER, RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, ENTRANCE_DOOR(120) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, RR_FIRE_TEMPLE_FOYER, ENTRANCE_DOOR(121) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FOYER, RR_FIRE_TEMPLE_LOOP_CAGE_FOYER_SIDE, + ENTRANCE_DOOR(122) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_CAGE_FOYER_SIDE, RR_FIRE_TEMPLE_FOYER, + ENTRANCE_DOOR(123) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FOYER, RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM, + ENTRANCE_DOOR(124) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM, RR_FIRE_TEMPLE_FOYER, + ENTRANCE_DOOR(125) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM, RR_FIRE_TEMPLE_LOOP_5_TILE_ROOM, + ENTRANCE_DOOR(126) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_5_TILE_ROOM, RR_FIRE_TEMPLE_LOOP_HEXAGON_ROOM, + ENTRANCE_DOOR(127) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_5_TILE_ROOM, RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, + ENTRANCE_DOOR(128) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, RR_FIRE_TEMPLE_LOOP_5_TILE_ROOM, + ENTRANCE_DOOR(129) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, RR_FIRE_TEMPLE_LOOP_CAGE_SWITCH, + ENTRANCE_DOOR(130) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LOOP_CAGE_SWITCH, RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, + ENTRANCE_DOOR(131) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FOYER, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, ENTRANCE_DOOR(132) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, RR_FIRE_TEMPLE_FOYER, ENTRANCE_DOOR(133) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, RR_FIRE_TEMPLE_1F_CURVED_CAGE, + ENTRANCE_DOOR(134) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_1F_CURVED_CAGE, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, + ENTRANCE_DOOR(135) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, RR_FIRE_TEMPLE_8_TILE_ROOM, + ENTRANCE_DOOR(136) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_8_TILE_ROOM, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, + ENTRANCE_DOOR(137) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, RR_FIRE_TEMPLE_STRAIGHTFORWARD_CAGE, + ENTRANCE_DOOR(138) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_STRAIGHTFORWARD_CAGE, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, + ENTRANCE_DOOR(139) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, RR_FIRE_TEMPLE_LAVA_GEYSER_1F, + ENTRANCE_DOOR(140) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_LAVA_GEYSER_1F, RR_FIRE_TEMPLE_BIG_LAVA_ROOM, + ENTRANCE_DOOR(141) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_LAVA_GEYSER_2F, RR_FIRE_TEMPLE_SHORTCUT_ROOM, + ENTRANCE_DOOR(142) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_SHORTCUT_ROOM, RR_FIRE_TEMPLE_LAVA_GEYSER_2F, + ENTRANCE_DOOR(143) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_SHORTCUT_ROOM, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, + ENTRANCE_DOOR(144) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, RR_FIRE_TEMPLE_SHORTCUT_ROOM, + ENTRANCE_DOOR(145) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_GS_CLIMB_4F, RR_FIRE_TEMPLE_GS_CLIMB_5F, + ENTRANCE_DOOR(146) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_GS_CLIMB_5F, RR_FIRE_TEMPLE_GS_CLIMB_4F, + ENTRANCE_DOOR(147) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_GS_CLIMB_5F, RR_FIRE_TEMPLE_5F_RUINS, ENTRANCE_DOOR(148) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_5F_RUINS, RR_FIRE_TEMPLE_GS_CLIMB_5F, ENTRANCE_DOOR(149) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, + ENTRANCE_DOOR(150) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, + ENTRANCE_DOOR(151) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, RR_FIRE_TEMPLE_3F_CURVED_CAGE, + ENTRANCE_DOOR(152) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_3F_CURVED_CAGE, RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, + ENTRANCE_DOOR(153) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, + ENTRANCE_DOOR(154) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, + ENTRANCE_DOOR(155) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_WALL_CAGE, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, + ENTRANCE_DOOR(156) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, RR_FIRE_TEMPLE_FIRE_WALL_CAGE, + ENTRANCE_DOOR(157) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, + ENTRANCE_DOOR(158) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_NARROW_PATH_ROOM, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, + ENTRANCE_DOOR(159) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, RR_FIRE_TEMPLE_CORRIDOR, + ENTRANCE_DOOR(160) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_CORRIDOR, RR_FIRE_TEMPLE_FIRE_WALL_CHASE, + ENTRANCE_DOOR(161) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_CORRIDOR, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, + ENTRANCE_DOOR(162) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, RR_FIRE_TEMPLE_CORRIDOR, + ENTRANCE_DOOR(163) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_PLATFORMS, RR_FIRE_TEMPLE_SOT_CAGE_UPPER_DOOR, + ENTRANCE_DOOR(164) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_SOT_CAGE_UPPER_DOOR, RR_FIRE_TEMPLE_FIRE_MAZE_PLATFORMS, + ENTRANCE_DOOR(165) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, RR_FIRE_TEMPLE_CAGELESS_CHEST_ROOM, + ENTRANCE_DOOR(166) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_CAGELESS_CHEST_ROOM, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, + ENTRANCE_DOOR(167) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_SWITCH, RR_FIRE_TEMPLE_SOT_CAGE_LOWER, + ENTRANCE_DOOR(168) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_SOT_CAGE_LOWER, RR_FIRE_TEMPLE_FIRE_MAZE_SWITCH, + ENTRANCE_DOOR(169) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, RR_FIRE_TEMPLE_SOT_CAGE_LOWER, + ENTRANCE_DOOR(170) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_SOT_CAGE_LOWER, RR_FIRE_TEMPLE_FIRE_MAZE_MAIN, + ENTRANCE_DOOR(171) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_FIRE_MAZE_PAST_WALL, RR_FIRE_TEMPLE_3F_FLARE_DANCER, + ENTRANCE_DOOR(172) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_3F_FLARE_DANCER, RR_FIRE_TEMPLE_FIRE_MAZE_PAST_WALL, + ENTRANCE_DOOR(173) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_ABOVE_3F_FLARE_DANCER, RR_FIRE_TEMPLE_SWITCH_CLIMB, + ENTRANCE_DOOR(174) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_SWITCH_CLIMB, RR_FIRE_TEMPLE_ABOVE_3F_FLARE_DANCER, + ENTRANCE_DOOR(175) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_SWITCH_CLIMB, RR_FIRE_TEMPLE_NARROW_STAIRS, + ENTRANCE_DOOR(176) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_NARROW_STAIRS, RR_FIRE_TEMPLE_SWITCH_CLIMB, + ENTRANCE_DOOR(177) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_NARROW_STAIRS_4F, RR_FIRE_TEMPLE_TOP_OF_COLLAPSING_STAIRS, + ENTRANCE_DOOR(178) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_TOP_OF_COLLAPSING_STAIRS, RR_FIRE_TEMPLE_NARROW_STAIRS_4F, + ENTRANCE_DOOR(179) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_BASE_OF_COLLAPSING_STAIRS, RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, + ENTRANCE_DOOR(180) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, RR_FIRE_TEMPLE_BASE_OF_COLLAPSING_STAIRS, + ENTRANCE_DOOR(181) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FOYER_UPPER, + RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, ENTRANCE_DOOR(120) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, + RR_FIRE_TEMPLE_MQ_FOYER_UPPER, ENTRANCE_DOOR(121) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FOYER_LOWER, + RR_FIRE_TEMPLE_MQ_LOOP_CAGE_FOYER_SIDE, ENTRANCE_DOOR(122) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_CAGE_FOYER_SIDE, + RR_FIRE_TEMPLE_MQ_FOYER_LOWER, ENTRANCE_DOOR(123) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FOYER_LOWER, + RR_FIRE_TEMPLE_MQ_LOOP_HEXAGON_ROOM, ENTRANCE_DOOR(124) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_HEXAGON_ROOM, + RR_FIRE_TEMPLE_MQ_FOYER_LOWER, ENTRANCE_DOOR(125) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_HEXAGON_ROOM, + RR_FIRE_TEMPLE_MQ_LOOP_5_TILE_ROOM, ENTRANCE_DOOR(126) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_5_TILE_ROOM, + RR_FIRE_TEMPLE_MQ_LOOP_HEXAGON_ROOM, ENTRANCE_DOOR(127) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_5_TILE_ROOM, + RR_FIRE_TEMPLE_MQ_LOOP_FLARE_DANCER, ENTRANCE_DOOR(128) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_FLARE_DANCER, + RR_FIRE_TEMPLE_MQ_LOOP_5_TILE_ROOM, ENTRANCE_DOOR(129) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_FLARE_DANCER, + RR_FIRE_TEMPLE_MQ_LOOP_CAGE_SWITCH, ENTRANCE_DOOR(130) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOOP_CAGE_SWITCH, + RR_FIRE_TEMPLE_MQ_LOOP_FLARE_DANCER, ENTRANCE_DOOR(131) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FOYER_UPPER, + RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, ENTRANCE_DOOR(132) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + RR_FIRE_TEMPLE_MQ_FOYER_UPPER, ENTRANCE_DOOR(133) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + RR_FIRE_TEMPLE_MQ_GS_GORON_CAGE, ENTRANCE_DOOR(134) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_GS_GORON_CAGE, + RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, ENTRANCE_DOOR(135) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, ENTRANCE_DOOR(136) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, + RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, ENTRANCE_DOOR(137) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + RR_FIRE_TEMPLE_MQ_TORCH_LOCKED_CAGE, ENTRANCE_DOOR(138) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_TORCH_LOCKED_CAGE, + RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, ENTRANCE_DOOR(139) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, + RR_FIRE_TEMPLE_MQ_LAVA_GEYSER_1F, ENTRANCE_DOOR(140) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LAVA_GEYSER_1F, + RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, ENTRANCE_DOOR(141) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LAVA_GEYSER_2F, + RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER, ENTRANCE_DOOR(142) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_LOWER, + RR_FIRE_TEMPLE_MQ_LAVA_GEYSER_2F, ENTRANCE_DOOR(143) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_3F, + RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE, ENTRANCE_DOOR(144) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE, + RR_FIRE_TEMPLE_MQ_SHORTCUT_ROOM_3F, ENTRANCE_DOOR(145) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_ABOVE_MAZE, + RR_FIRE_TEMPLE_MQ_TORCH_SLUG_CLIMB, ENTRANCE_DOOR(146) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_TORCH_SLUG_CLIMB, + RR_FIRE_TEMPLE_MQ_ABOVE_MAZE, ENTRANCE_DOOR(147) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_TORCH_SLUG_CLIMB, + RR_FIRE_TEMPLE_MQ_BURNING_BLOCK, ENTRANCE_DOOR(148) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BURNING_BLOCK, + RR_FIRE_TEMPLE_MQ_TORCH_SLUG_CLIMB, ENTRANCE_DOOR(149) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE, + RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, ENTRANCE_DOOR(150) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, + RR_FIRE_TEMPLE_MQ_LOWER_LIZALFOS_MAZE, ENTRANCE_DOOR(151) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_MAZE_SWITCH_DOOR, + RR_FIRE_TEMPLE_MQ_3F_CURVED_CAGE, ENTRANCE_DOOR(152) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_3F_CURVED_CAGE, + RR_FIRE_TEMPLE_MQ_MAZE_SWITCH_DOOR, ENTRANCE_DOOR(153) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_UPPER_LIZALFOS_MAZE, + RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, ENTRANCE_DOOR(154) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, + RR_FIRE_TEMPLE_MQ_UPPER_LIZALFOS_MAZE, ENTRANCE_DOOR(155) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE, + RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, ENTRANCE_DOOR(156) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, + RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE, ENTRANCE_DOOR(157) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, + RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, ENTRANCE_DOOR(158) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, + RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, ENTRANCE_DOOR(159) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, + RR_FIRE_TEMPLE_MQ_CORRIDOR, ENTRANCE_DOOR(160) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_CORRIDOR, + RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, ENTRANCE_DOOR(161) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_CORRIDOR, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MAIN, ENTRANCE_DOOR(162) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MAIN, + RR_FIRE_TEMPLE_MQ_CORRIDOR, ENTRANCE_DOOR(163) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_UPPER_DOOR, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, ENTRANCE_DOOR(164) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, + RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_UPPER_DOOR, ENTRANCE_DOOR(165) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MIDDLE, + RR_FIRE_TEMPLE_MQ_GS_LIZALFOS_ROOM, ENTRANCE_DOOR(166) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_GS_LIZALFOS_ROOM, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MIDDLE, ENTRANCE_DOOR(167) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_SWITCH, + RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_LOWER, ENTRANCE_DOOR(168) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_LOWER, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_SWITCH, ENTRANCE_DOOR(169) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MAIN, + RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_LOWER, ENTRANCE_DOOR(170) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_2_FIRE_WALLS_LOWER, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_MAIN, ENTRANCE_DOOR(171) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, + RR_FIRE_TEMPLE_MQ_3F_FLARE_DANCER, ENTRANCE_DOOR(172) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_3F_FLARE_DANCER, + RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, ENTRANCE_DOOR(173) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_ABOVE_3F_FLARE_DANCER, + RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB, ENTRANCE_DOOR(174) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB, + RR_FIRE_TEMPLE_MQ_ABOVE_3F_FLARE_DANCER, ENTRANCE_DOOR(175) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB, + RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_ROOM, ENTRANCE_DOOR(176) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_ROOM, + RR_FIRE_TEMPLE_MQ_LOCKED_CLIMB, ENTRANCE_DOOR(177) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_4F, + RR_FIRE_TEMPLE_MQ_TOP_OF_COLLAPSING_STAIRS, ENTRANCE_DOOR(178) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_TOP_OF_COLLAPSING_STAIRS, + RR_FIRE_TEMPLE_MQ_NARROW_STAIRS_4F, ENTRANCE_DOOR(179) } }, + { { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_BASE_OF_COLLAPSING_STAIRS, + RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE, ENTRANCE_DOOR(180) }, + { EntranceType::DoorFire, RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE, + RR_FIRE_TEMPLE_MQ_BASE_OF_COLLAPSING_STAIRS, ENTRANCE_DOOR(181) } }, + }); + } + + if (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorWater, RR_WATER_TEMPLE_RISING_TARGET_LEDGE, RR_WATER_TEMPLE_TRAPPED_SLOPE, + ENTRANCE_DOOR(182) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_TRAPPED_SLOPE, RR_WATER_TEMPLE_RISING_TARGET_LEDGE, + ENTRANCE_DOOR(183) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_OUTSIDE_WATERFALL, RR_WATER_TEMPLE_WATERFALL, + ENTRANCE_DOOR(184) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_WATERFALL, RR_WATER_TEMPLE_OUTSIDE_WATERFALL, + ENTRANCE_DOOR(185) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_WATERFALL_TOP, RR_WATER_TEMPLE_TOGGLE_SWITCH, + ENTRANCE_DOOR(186) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_TOGGLE_SWITCH, RR_WATER_TEMPLE_WATERFALL_TOP, + ENTRANCE_DOOR(187) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_LIKE_LIKE_SPIKES, RR_WATER_TEMPLE_DARK_LINK_ROOM, + ENTRANCE_DOOR(188) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_DARK_LINK_ROOM, RR_WATER_TEMPLE_LIKE_LIKE_SPIKES, + ENTRANCE_DOOR(189) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_DARK_LINK_ROOM, RR_WATER_TEMPLE_SOT_PIT_ROOM, + ENTRANCE_DOOR(190) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_SOT_PIT_ROOM, RR_WATER_TEMPLE_DARK_LINK_ROOM, + ENTRANCE_DOOR(191) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_DRAGON_ROOM, RR_WATER_TEMPLE_OUTSIDE_DRAGON_ROOM, + ENTRANCE_DOOR(192) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_OUTSIDE_DRAGON_ROOM, RR_WATER_TEMPLE_DRAGON_ROOM, + ENTRANCE_DOOR(193) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_BEHIND_SPIKE_MOAT, RR_WATER_TEMPLE_BOULDERS_SOUTH, + ENTRANCE_DOOR(194) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_BOULDERS_SOUTH, RR_WATER_TEMPLE_BEHIND_SPIKE_MOAT, + ENTRANCE_DOOR(195) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_BEHIND_CANAL, RR_WATER_TEMPLE_BOSS_KEY_ROOM, + ENTRANCE_DOOR(196) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_BOSS_KEY_ROOM, RR_WATER_TEMPLE_BEHIND_CANAL, + ENTRANCE_DOOR(197) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_BOULDERS_NORTH, RR_WATER_TEMPLE_BLOCK_ROOM_TARGET, + ENTRANCE_DOOR(198) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_BLOCK_ROOM_TARGET, RR_WATER_TEMPLE_BOULDERS_NORTH, + ENTRANCE_DOOR(199) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_BLOCK_ROOM_STAIRS, RR_WATER_TEMPLE_3_JETS_SWITCH, + ENTRANCE_DOOR(200) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_3_JETS_SWITCH, RR_WATER_TEMPLE_BLOCK_ROOM_STAIRS, + ENTRANCE_DOOR(201) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_3_JETS_NO_SWITCH, RR_WATER_TEMPLE_CANAL_ALCOVE, + ENTRANCE_DOOR(202) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_CANAL_ALCOVE, RR_WATER_TEMPLE_3_JETS_NO_SWITCH, + ENTRANCE_DOOR(203) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_LOW_EMBLEM, RR_WATER_TEMPLE_4_SPIKES_ROOM, + ENTRANCE_DOOR(204) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_4_SPIKES_ROOM, RR_WATER_TEMPLE_LOW_EMBLEM, + ENTRANCE_DOOR(205) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_SIDE_TOWER_1F, RR_WATER_TEMPLE_TORCH_ROOM, + ENTRANCE_DOOR(206) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_TORCH_ROOM, RR_WATER_TEMPLE_SIDE_TOWER_1F, + ENTRANCE_DOOR(207) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MAIN, RR_WATER_TEMPLE_PILLAR_1F, ENTRANCE_DOOR(208) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_PILLAR_1F, RR_WATER_TEMPLE_MAIN, ENTRANCE_DOOR(209) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_2F_CENTRAL_LM, RR_WATER_TEMPLE_PILLAR_2F, + ENTRANCE_DOOR(210) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_PILLAR_2F, RR_WATER_TEMPLE_2F_CENTRAL_LM, + ENTRANCE_DOOR(211) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_OUTSIDE_JET_LIFT_2F, RR_WATER_TEMPLE_JET_LIFT_2F, + ENTRANCE_DOOR(212) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_JET_LIFT_2F, RR_WATER_TEMPLE_OUTSIDE_JET_LIFT_2F, + ENTRANCE_DOOR(213) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_RISING_TARGET_LEDGE, + RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, ENTRANCE_DOOR(182) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, + RR_WATER_TEMPLE_MQ_RISING_TARGET_LEDGE, ENTRANCE_DOOR(183) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_OUTSIDE_WATERFALL, + RR_WATER_TEMPLE_MQ_WATERFALL, ENTRANCE_DOOR(184) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_WATERFALL, + RR_WATER_TEMPLE_MQ_OUTSIDE_WATERFALL, ENTRANCE_DOOR(185) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_WATERFALL_TOP, + RR_WATER_TEMPLE_MQ_STALFOS_PIT, ENTRANCE_DOOR(186) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_STALFOS_PIT, + RR_WATER_TEMPLE_MQ_WATERFALL, ENTRANCE_DOOR(187) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, + RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, ENTRANCE_DOOR(188) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, + RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, ENTRANCE_DOOR(189) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, + RR_WATER_TEMPLE_MQ_GATED_PIT, ENTRANCE_DOOR(190) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_GATED_PIT, + RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, ENTRANCE_DOOR(191) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, + RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, ENTRANCE_DOOR(192) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, + RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, ENTRANCE_DOOR(193) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_MAIN, + RR_WATER_TEMPLE_MQ_CRATE_VORTEX_ROOM, ENTRANCE_DOOR(194) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_CRATE_VORTEX_ROOM, + RR_WATER_TEMPLE_MQ_MAIN, ENTRANCE_DOOR(195) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_CRATE_VORTEX_ROOM, + RR_WATER_TEMPLE_MQ_BEHIND_SPIKE_MOAT, ENTRANCE_DOOR(196) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_BEHIND_SPIKE_MOAT, + RR_WATER_TEMPLE_MQ_CRATE_VORTEX_ROOM, ENTRANCE_DOOR(197) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE, + RR_WATER_TEMPLE_MQ_DODONGO_ROOM, ENTRANCE_DOOR(198) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_DODONGO_ROOM, + RR_WATER_TEMPLE_MQ_CRATE_VORTEX_CAGE, ENTRANCE_DOOR(199) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_DODONGO_ROOM, + RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE, ENTRANCE_DOOR(200) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_3_JETS_ROOM_NO_SWITCH_SIDE, + RR_WATER_TEMPLE_MQ_DODONGO_ROOM, ENTRANCE_DOOR(201) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE, + RR_WATER_TEMPLE_MQ_CANAL_ALCOVE, ENTRANCE_DOOR(202) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_CANAL_ALCOVE, + RR_WATER_TEMPLE_MQ_3_JETS_ROOM_SWITCH_SIDE, ENTRANCE_DOOR(203) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_LOW_EMBLEM, + RR_WATER_TEMPLE_MQ_3_STALFOS_ROOM, ENTRANCE_DOOR(204) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_3_STALFOS_ROOM, + RR_WATER_TEMPLE_MQ_LOW_EMBLEM, ENTRANCE_DOOR(205) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_SIDE_TOWER_1F, + RR_WATER_TEMPLE_MQ_TOWER_TARGET_ROOM, ENTRANCE_DOOR(206) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_TOWER_TARGET_ROOM, + RR_WATER_TEMPLE_MQ_SIDE_TOWER_1F, ENTRANCE_DOOR(207) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_MAIN, + RR_WATER_TEMPLE_MQ_PILLAR_1F, ENTRANCE_DOOR(208) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_PILLAR_1F, + RR_WATER_TEMPLE_MQ_MAIN, ENTRANCE_DOOR(209) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_2F_CENTRAL_LM, + RR_WATER_TEMPLE_MQ_PILLAR_2F, ENTRANCE_DOOR(210) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_PILLAR_2F, + RR_WATER_TEMPLE_MQ_2F_CENTRAL_LM, ENTRANCE_DOOR(211) } }, + { { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_3F_CENTRAL_A, + RR_WATER_TEMPLE_MQ_LIZALFOS_LOOP_A, ENTRANCE_DOOR(212) }, + { EntranceType::DoorWater, RR_WATER_TEMPLE_MQ_LIZALFOS_LOOP_A, + RR_WATER_TEMPLE_MQ_3F_CENTRAL_A, ENTRANCE_DOOR(213) } }, + }); + } + + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_BEGINNING, RR_SHADOW_TEMPLE_WHISPERING_WALLS_START, + ENTRANCE_DOOR(214) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WHISPERING_WALLS_START, RR_SHADOW_TEMPLE_BEGINNING, + ENTRANCE_DOOR(215) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WHISPERING_WALLS_SIDE, + RR_SHADOW_TEMPLE_WHISPERING_WALLS_SIDE_ROOM, ENTRANCE_DOOR(216) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WHISPERING_WALLS_SIDE_ROOM, + RR_SHADOW_TEMPLE_WHISPERING_WALLS_SIDE, ENTRANCE_DOOR(217) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WHISPERING_WALLS_END, RR_SHADOW_TEMPLE_DEAD_HAND, + ENTRANCE_DOOR(218) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_DEAD_HAND, RR_SHADOW_TEMPLE_WHISPERING_WALLS_END, + ENTRANCE_DOOR(219) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_FIRST_BEAMOS, RR_SHADOW_TEMPLE_COMPASS_ROOM, + ENTRANCE_DOOR(220) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_COMPASS_ROOM, RR_SHADOW_TEMPLE_FIRST_BEAMOS, + ENTRANCE_DOOR(221) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_FIRST_BEAMOS, RR_SHADOW_TEMPLE_SPINNING_BLADES, + ENTRANCE_DOOR(222) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_SPINNING_BLADES, RR_SHADOW_TEMPLE_FIRST_BEAMOS, + ENTRANCE_DOOR(223) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_FIRST_BEAMOS, RR_SHADOW_TEMPLE_B2_TO_B3_CORRIDOR_B2, + ENTRANCE_DOOR(224) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_B2_TO_B3_CORRIDOR_B2, RR_SHADOW_TEMPLE_FIRST_BEAMOS, + ENTRANCE_DOOR(225) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_UPPER_HUGE_PIT_DOOR_LEDGE, + RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES, ENTRANCE_DOOR(226) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES, + RR_SHADOW_TEMPLE_UPPER_HUGE_PIT_DOOR_LEDGE, ENTRANCE_DOOR(227) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_LOWER_HUGE_PIT_DOOR_LEDGE, + RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, ENTRANCE_DOOR(228) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, + RR_SHADOW_TEMPLE_LOWER_HUGE_PIT_DOOR_LEDGE, ENTRANCE_DOOR(229) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, RR_SHADOW_TEMPLE_SKULL_JAR, + ENTRANCE_DOOR(230) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_SKULL_JAR, RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, + ENTRANCE_DOOR(231) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM, + RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, ENTRANCE_DOOR(232) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_UPPER_WIND_TUNNEL, + RR_SHADOW_TEMPLE_INVISIBLE_SPIKES_PLATFORM, ENTRANCE_DOOR(233) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, + RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, ENTRANCE_DOOR(234) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, + RR_SHADOW_TEMPLE_LOWER_WIND_TUNNEL, ENTRANCE_DOOR(235) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WIND_TUNNEL_ALCOVE, RR_SHADOW_TEMPLE_ROOM_TO_BOAT, + ENTRANCE_DOOR(236) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_ROOM_TO_BOAT, RR_SHADOW_TEMPLE_WIND_TUNNEL_ALCOVE, + ENTRANCE_DOOR(237) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_ROOM_TO_BOAT, RR_SHADOW_TEMPLE_DOCK, + ENTRANCE_DOOR(238) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_DOCK, RR_SHADOW_TEMPLE_ROOM_TO_BOAT, + ENTRANCE_DOOR(239) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_ACROSS_CHASM, RR_SHADOW_TEMPLE_PRE_BOSS_ROOM, + ENTRANCE_DOOR(240) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_PRE_BOSS_ROOM, RR_SHADOW_TEMPLE_ACROSS_CHASM, + ENTRANCE_DOOR(241) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_BEYOND_BOAT, RR_SHADOW_TEMPLE_MAZE, ENTRANCE_DOOR(242) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MAZE, RR_SHADOW_TEMPLE_BEYOND_BOAT, + ENTRANCE_DOOR(243) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MAZE, RR_SHADOW_TEMPLE_X_CROSS, ENTRANCE_DOOR(244) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_X_CROSS, RR_SHADOW_TEMPLE_MAZE, ENTRANCE_DOOR(245) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MAZE, RR_SHADOW_TEMPLE_THREE_SKULL_JARS, + ENTRANCE_DOOR(246) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_THREE_SKULL_JARS, RR_SHADOW_TEMPLE_MAZE, + ENTRANCE_DOOR(247) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MAZE, RR_SHADOW_TEMPLE_WOODEN_SPIKES, + ENTRANCE_DOOR(248) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_WOODEN_SPIKES, RR_SHADOW_TEMPLE_MAZE, + ENTRANCE_DOOR(249) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, + RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_START, ENTRANCE_DOOR(214) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_START, + RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, ENTRANCE_DOOR(215) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_SIDE, + RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_SIDE_ROOM, ENTRANCE_DOOR(216) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_SIDE_ROOM, + RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_SIDE, ENTRANCE_DOOR(217) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_END, + RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_DEAD_HAND, ENTRANCE_DOOR(218) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_DEAD_HAND, + RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_END, ENTRANCE_DOOR(219) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, + RR_SHADOW_TEMPLE_MQ_B2_GIBDO_ROOM, ENTRANCE_DOOR(220) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_B2_GIBDO_ROOM, + RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, ENTRANCE_DOOR(221) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, + RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, ENTRANCE_DOOR(222) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, + RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, ENTRANCE_DOOR(223) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, + RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR_B2, ENTRANCE_DOOR(224) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR_B2, + RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, ENTRANCE_DOOR(225) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, + RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, ENTRANCE_DOOR(226) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, + RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, ENTRANCE_DOOR(227) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, + RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, ENTRANCE_DOOR(228) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, + RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, ENTRANCE_DOOR(229) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, + RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, ENTRANCE_DOOR(230) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, + RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, ENTRANCE_DOOR(231) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_PLATFORM, + RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL, ENTRANCE_DOOR(232) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_UPPER_WIND_TUNNEL, + RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_PLATFORM, ENTRANCE_DOOR(233) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, + RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, ENTRANCE_DOOR(234) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, + RR_SHADOW_TEMPLE_MQ_LOWER_WIND_TUNNEL, ENTRANCE_DOOR(235) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL_ALCOVE, + RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, ENTRANCE_DOOR(236) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, + RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL_ALCOVE, ENTRANCE_DOOR(237) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, + RR_SHADOW_TEMPLE_MQ_DOCK, ENTRANCE_DOOR(238) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_DOCK, + RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, ENTRANCE_DOOR(239) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, + RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, ENTRANCE_DOOR(240) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, + RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, ENTRANCE_DOOR(241) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, + RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, ENTRANCE_DOOR(242) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, + RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, ENTRANCE_DOOR(243) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, + RR_SHADOW_TEMPLE_MQ_X_CROSS, ENTRANCE_DOOR(244) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_X_CROSS, + RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, ENTRANCE_DOOR(245) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, + RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS, ENTRANCE_DOOR(246) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS, + RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, ENTRANCE_DOOR(247) } }, + { { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, + RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, ENTRANCE_DOOR(248) }, + { EntranceType::DoorShadow, RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, + RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, ENTRANCE_DOOR(249) } }, + }); + } + + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla()) { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, + RR_SPIRIT_TEMPLE_SAND_PIT, ENTRANCE_DOOR(250) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SAND_PIT, + RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, ENTRANCE_DOOR(251) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, + RR_SPIRIT_TEMPLE_ABOVE_BOULDERS, ENTRANCE_DOOR(252) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ABOVE_BOULDERS, + RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, ENTRANCE_DOOR(253) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BOULDERS, + RR_SPIRIT_TEMPLE_PAST_BOULDERS, ENTRANCE_DOOR(254) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_PAST_BOULDERS, + RR_SPIRIT_TEMPLE_BOULDERS, ENTRANCE_DOOR(255) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, + RR_SPIRIT_TEMPLE_1F_MIRROR_ROOM, ENTRANCE_DOOR(256) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_1F_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_ADULT_SIDE_HUB, ENTRANCE_DOOR(257) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_2F_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_STATUE_ROOM_ADULT, ENTRANCE_DOOR(258) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_STATUE_ROOM_ADULT, + RR_SPIRIT_TEMPLE_2F_MIRROR_ROOM, ENTRANCE_DOOR(259) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_STATUE_ROOM_ADULT, + RR_SPIRIT_TEMPLE_POT_STAIRS, ENTRANCE_DOOR(260) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_POT_STAIRS, + RR_SPIRIT_TEMPLE_STATUE_ROOM_ADULT, ENTRANCE_DOOR(261) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_POT_STAIRS, + RR_SPIRIT_TEMPLE_BEAMOS_PITS, ENTRANCE_DOOR(262) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_POT_STAIRS, ENTRANCE_DOOR(263) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_BIG_WALL_BASE, ENTRANCE_DOOR(264) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BIG_WALL_BASE, + RR_SPIRIT_TEMPLE_BEAMOS_PITS, ENTRANCE_DOOR(265) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_4_ARMOS, ENTRANCE_DOOR(266) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4_ARMOS, + RR_SPIRIT_TEMPLE_BEAMOS_PITS, ENTRANCE_DOOR(267) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4_ARMOS, + RR_SPIRIT_TEMPLE_4_ARMOS_SIDE_ROOM, ENTRANCE_DOOR(268) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4_ARMOS_SIDE_ROOM, + RR_SPIRIT_TEMPLE_4_ARMOS, ENTRANCE_DOOR(269) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4_ARMOS, + RR_SPIRIT_TEMPLE_CHEST_STAIRS, ENTRANCE_DOOR(270) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHEST_STAIRS, + RR_SPIRIT_TEMPLE_4_ARMOS, ENTRANCE_DOOR(271) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHEST_STAIRS, + RR_SPIRIT_TEMPLE_ADULT_THRONE, ENTRANCE_DOOR(272) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ADULT_THRONE, + RR_SPIRIT_TEMPLE_CHEST_STAIRS, ENTRANCE_DOOR(273) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_ADULT_THRONE, + RR_SPIRIT_TEMPLE_LEFT_HAND_EXIT, ENTRANCE_DOOR(274) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_LEFT_HAND_EXIT, + RR_SPIRIT_TEMPLE_ADULT_THRONE, ENTRANCE_DOOR(275) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BIG_WALL_UPPER, + RR_SPIRIT_TEMPLE_4F_CENTRAL, ENTRANCE_DOOR(276) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4F_CENTRAL, + RR_SPIRIT_TEMPLE_BIG_WALL_UPPER, ENTRANCE_DOOR(277) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4F_CENTRAL, + RR_SPIRIT_TEMPLE_FAKE_DOORS_ROOM, ENTRANCE_DOOR(278) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_FAKE_DOORS_ROOM, + RR_SPIRIT_TEMPLE_4F_CENTRAL, ENTRANCE_DOOR(279) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_4F_CENTRAL, + RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, ENTRANCE_DOOR(280) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_4F_CENTRAL, ENTRANCE_DOOR(281) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_BIG_MIRROR_CAVE, ENTRANCE_DOOR(282) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_BIG_MIRROR_CAVE, + RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, ENTRANCE_DOOR(283) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHILD_SIDE_HUB, + RR_SPIRIT_TEMPLE_SWITCH_BRIDGE_SOUTH, ENTRANCE_DOOR(284) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SWITCH_BRIDGE_SOUTH, + RR_SPIRIT_TEMPLE_CHILD_SIDE_HUB, ENTRANCE_DOOR(285) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SWITCH_BRIDGE_NORTH, + RR_SPIRIT_TEMPLE_1F_ANUBIS, ENTRANCE_DOOR(286) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_1F_ANUBIS, + RR_SPIRIT_TEMPLE_SWITCH_BRIDGE_NORTH, ENTRANCE_DOOR(287) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_1F_ANUBIS, + RR_SPIRIT_TEMPLE_RUPEE_BRIDGE_NORTH, ENTRANCE_DOOR(288) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_RUPEE_BRIDGE_NORTH, + RR_SPIRIT_TEMPLE_1F_ANUBIS, ENTRANCE_DOOR(289) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_RUPEE_BRIDGE_SOUTH, + RR_SPIRIT_TEMPLE_CHILD_SIDE_HUB, ENTRANCE_DOOR(290) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHILD_SIDE_HUB, + RR_SPIRIT_TEMPLE_RUPEE_BRIDGE_SOUTH, ENTRANCE_DOOR(291) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHILD_BOXES, + RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_1F, ENTRANCE_DOOR(292) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_1F, + RR_SPIRIT_TEMPLE_CHILD_BOXES, ENTRANCE_DOOR(293) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_2F, + RR_SPIRIT_TEMPLE_STATUE_ROOM_CHILD, ENTRANCE_DOOR(294) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_STATUE_ROOM_CHILD, + RR_SPIRIT_TEMPLE_SUN_ON_FLOOR_2F, ENTRANCE_DOOR(295) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_STATUE_ROOM_CHILD, + RR_SPIRIT_TEMPLE_EMPTY_STAIRS, ENTRANCE_DOOR(296) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_EMPTY_STAIRS, + RR_SPIRIT_TEMPLE_STATUE_ROOM_CHILD, ENTRANCE_DOOR(297) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_EMPTY_STAIRS, + RR_SPIRIT_TEMPLE_SUN_BLOCK_ROOM, ENTRANCE_DOOR(298) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SUN_BLOCK_ROOM, + RR_SPIRIT_TEMPLE_EMPTY_STAIRS, ENTRANCE_DOOR(299) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SUN_BLOCK_ROOM, + RR_SPIRIT_TEMPLE_SKULLTULA_STAIRS, ENTRANCE_DOOR(300) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SKULLTULA_STAIRS, + RR_SPIRIT_TEMPLE_SUN_BLOCK_ROOM, ENTRANCE_DOOR(301) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SKULLTULA_STAIRS, + RR_SPIRIT_TEMPLE_CHILD_THRONE, ENTRANCE_DOOR(302) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHILD_THRONE, + RR_SPIRIT_TEMPLE_SKULLTULA_STAIRS, ENTRANCE_DOOR(303) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_CHILD_THRONE, + RR_SPIRIT_TEMPLE_RIGHT_HAND_EXIT, ENTRANCE_DOOR(304) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_RIGHT_HAND_EXIT, + RR_SPIRIT_TEMPLE_CHILD_THRONE, ENTRANCE_DOOR(305) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_STATUE_ROOM, + RR_SPIRIT_TEMPLE_SHORTCUT, ENTRANCE_DOOR(306) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_SHORTCUT, + RR_SPIRIT_TEMPLE_STATUE_ROOM, ENTRANCE_DOOR(307) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, + RR_SPIRIT_TEMPLE_MQ_SAND_PIT, ENTRANCE_DOOR(250) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SAND_PIT, + RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, ENTRANCE_DOOR(251) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, + RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_UPPER, ENTRANCE_DOOR(252) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_UPPER, + RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, ENTRANCE_DOOR(253) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_LOWER, + RR_SPIRIT_TEMPLE_MQ_SKULLTULA_ROOM, ENTRANCE_DOOR(254) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SKULLTULA_ROOM, + RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_LOWER, ENTRANCE_DOOR(255) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, + RR_SPIRIT_TEMPLE_MQ_3_SUNS_ROOM_1F, ENTRANCE_DOOR(256) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_3_SUNS_ROOM_1F, + RR_SPIRIT_TEMPLE_MQ_BEHIND_GEYSER, ENTRANCE_DOOR(257) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_3_SUNS_ROOM_2F, + RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_ADULT, ENTRANCE_DOOR(258) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_ADULT, + RR_SPIRIT_TEMPLE_MQ_3_SUNS_ROOM_2F, ENTRANCE_DOOR(259) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_ADULT, + RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER, ENTRANCE_DOOR(260) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER, + RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_ADULT, ENTRANCE_DOOR(261) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER, + RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, ENTRANCE_DOOR(262) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER, ENTRANCE_DOOR(263) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_MQ_BIG_WALL_BASE, ENTRANCE_DOOR(264) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_WALL_BASE, + RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, ENTRANCE_DOOR(265) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, + RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, ENTRANCE_DOOR(266) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, + RR_SPIRIT_TEMPLE_MQ_BEAMOS_PITS, ENTRANCE_DOOR(267) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, + RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM, ENTRANCE_DOOR(268) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM, + RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, ENTRANCE_DOOR(269) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, + RR_SPIRIT_TEMPLE_MQ_FLOORMASTER_STAIRS, ENTRANCE_DOOR(270) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FLOORMASTER_STAIRS, + RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, ENTRANCE_DOOR(271) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FLOORMASTER_STAIRS, + RR_SPIRIT_TEMPLE_MQ_ADULT_THRONE, ENTRANCE_DOOR(272) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_ADULT_THRONE, + RR_SPIRIT_TEMPLE_MQ_FLOORMASTER_STAIRS, ENTRANCE_DOOR(273) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_ADULT_THRONE, + RR_SPIRIT_TEMPLE_MQ_LEFT_HAND_EXIT, ENTRANCE_DOOR(274) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_LEFT_HAND_EXIT, + RR_SPIRIT_TEMPLE_MQ_ADULT_THRONE, ENTRANCE_DOOR(275) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_WALL_UPPER, + RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, ENTRANCE_DOOR(276) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, + RR_SPIRIT_TEMPLE_MQ_BIG_WALL_UPPER, ENTRANCE_DOOR(277) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, + RR_SPIRIT_TEMPLE_MQ_9_THRONES_ROOM, ENTRANCE_DOOR(278) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_9_THRONES_ROOM, + RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, ENTRANCE_DOOR(279) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, + RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, ENTRANCE_DOOR(280) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, ENTRANCE_DOOR(281) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, + RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, ENTRANCE_DOOR(282) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, + RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, ENTRANCE_DOOR(283) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, + RR_SPIRIT_TEMPLE_MQ_GIBDO_GRAVES, ENTRANCE_DOOR(284) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_GIBDO_GRAVES, + RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, ENTRANCE_DOOR(285) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_GIBDO_POTS, + RR_SPIRIT_TEMPLE_MQ_TURNTABLE, ENTRANCE_DOOR(286) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_TURNTABLE, + RR_SPIRIT_TEMPLE_MQ_GIBDO_POTS, ENTRANCE_DOOR(287) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_TURNTABLE_BEHIND_FIRE, + RR_SPIRIT_TEMPLE_MQ_ANUBIS_BRIDGE_GRAVE, ENTRANCE_DOOR(288) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_ANUBIS_BRIDGE_GRAVE, + RR_SPIRIT_TEMPLE_MQ_TURNTABLE_BEHIND_FIRE, ENTRANCE_DOOR(289) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_ANUBIS_BRIDGE_CHEST, + RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, ENTRANCE_DOOR(290) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_CHILD_SIDE_HUB, + RR_SPIRIT_TEMPLE_MQ_ANUBIS_BRIDGE_CHEST, ENTRANCE_DOOR(291) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_1F_CHEST_SWITCH, + RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, ENTRANCE_DOOR(292) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, + RR_SPIRIT_TEMPLE_MQ_1F_CHEST_SWITCH, ENTRANCE_DOOR(293) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SUN_ON_FLOOR, + RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, ENTRANCE_DOOR(294) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, + RR_SPIRIT_TEMPLE_MQ_SUN_ON_FLOOR, ENTRANCE_DOOR(295) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, + RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, ENTRANCE_DOOR(296) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, + RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, ENTRANCE_DOOR(297) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, + RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, ENTRANCE_DOOR(298) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, + RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, ENTRANCE_DOOR(299) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, + RR_SPIRIT_TEMPLE_MQ_SKULLTULA_STAIRS, ENTRANCE_DOOR(300) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SKULLTULA_STAIRS, + RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, ENTRANCE_DOOR(301) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_SKULLTULA_STAIRS, + RR_SPIRIT_TEMPLE_MQ_CHILD_THRONE, ENTRANCE_DOOR(302) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_CHILD_THRONE, + RR_SPIRIT_TEMPLE_MQ_SKULLTULA_STAIRS, ENTRANCE_DOOR(303) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_CHILD_THRONE, + RR_SPIRIT_TEMPLE_MQ_RIGHT_HAND_EXIT, ENTRANCE_DOOR(304) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_RIGHT_HAND_EXIT, + RR_SPIRIT_TEMPLE_MQ_CHILD_THRONE, ENTRANCE_DOOR(305) } }, + { { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, + RR_SPIRIT_TEMPLE_MQ_BIG_BLOCKS_DOOR, ENTRANCE_DOOR(306) }, + { EntranceType::DoorSpirit, RR_SPIRIT_TEMPLE_MQ_BIG_BLOCKS_DOOR, + RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, ENTRANCE_DOOR(307) } }, + }); + } + + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MIDDLE, RR_BOTW_SKULL_WALL_ROOM, ENTRANCE_DOOR(308) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_SKULL_WALL_ROOM, RR_BOTW_MIDDLE, ENTRANCE_DOOR(309) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MIDDLE, RR_BOTW_INVISIBLE_PATH, ENTRANCE_DOOR(310) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_INVISIBLE_PATH, RR_BOTW_MIDDLE, ENTRANCE_DOOR(311) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_BEHIND_MOAT, RR_BOTW_CRYPT, ENTRANCE_DOOR(312) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_CRYPT, RR_BOTW_BEHIND_MOAT, ENTRANCE_DOOR(313) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_NEAR_BOSS_UPPER, RR_BOTW_DEAD_HAND_ROOM, + ENTRANCE_DOOR(314) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_DEAD_HAND_ROOM, RR_BOTW_NEAR_BOSS_UPPER, + ENTRANCE_DOOR(315) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_CORNER_CRAWLSPACE, RR_BOTW_HIDDEN_PITS_ROOM, + ENTRANCE_DOOR(316) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_HIDDEN_PITS_ROOM, RR_BOTW_CORNER_CRAWLSPACE, + ENTRANCE_DOOR(317) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_HIDDEN_PITS_ROOM, RR_BOTW_LOCKED_CAGE, + ENTRANCE_DOOR(318) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_LOCKED_CAGE, RR_BOTW_HIDDEN_PITS_ROOM, + ENTRANCE_DOOR(319) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_MIDDLE, RR_BOTW_MQ_GRAVE_ROOM, ENTRANCE_DOOR(308) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_GRAVE_ROOM, RR_BOTW_MQ_MIDDLE, ENTRANCE_DOOR(309) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_MIDDLE, RR_BOTW_MQ_INVISIBLE_PATH, + ENTRANCE_DOOR(310) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_INVISIBLE_PATH, RR_BOTW_MQ_MIDDLE, + ENTRANCE_DOOR(311) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_BEHIND_MOAT, RR_BOTW_MQ_CRYPT, ENTRANCE_DOOR(312) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_CRYPT, RR_BOTW_MQ_BEHIND_MOAT, ENTRANCE_DOOR(313) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_NEAR_BOSS_UPPER, RR_BOTW_MQ_DEAD_HAND_ROOM, + ENTRANCE_DOOR(314) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_DEAD_HAND_ROOM, RR_BOTW_MQ_NEAR_BOSS_UPPER, + ENTRANCE_DOOR(315) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_PERIMETER, RR_BOTW_MQ_FLOORMASTER_ROOM, + ENTRANCE_DOOR(316) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_FLOORMASTER_ROOM, RR_BOTW_MQ_PERIMETER, + ENTRANCE_DOOR(317) } }, + { { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_FLOORMASTER_ROOM, RR_BOTW_MQ_LOCKED_CAGE, + ENTRANCE_DOOR(318) }, + { EntranceType::DoorBottomOfTheWell, RR_BOTW_MQ_LOCKED_CAGE, RR_BOTW_MQ_FLOORMASTER_ROOM, + ENTRANCE_DOOR(319) } }, + }); + } + + if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorIceCavern, RR_ICE_CAVERN_BEFORE_FINAL_ROOM, + RR_ICE_CAVERN_FINAL_ROOM, ENTRANCE_DOOR(320) }, + { EntranceType::DoorIceCavern, RR_ICE_CAVERN_FINAL_ROOM, + RR_ICE_CAVERN_BEFORE_FINAL_ROOM, ENTRANCE_DOOR(321) } }, + { { EntranceType::DoorIceCavern, RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER, + RR_ICE_CAVERN_ABOVE_BEGINNING, ENTRANCE_DOOR(322) }, + { EntranceType::DoorIceCavern, RR_ICE_CAVERN_ABOVE_BEGINNING, + RR_ICE_CAVERN_FINAL_ROOM_UNDERWATER, ENTRANCE_DOOR(323) } }, + }); + } else { + entranceShuffleTable.insert(entranceShuffleTable.end(), + { + { { EntranceType::DoorIceCavern, RR_ICE_CAVERN_MQ_WEST_CORRIDOR, + RR_ICE_CAVERN_MQ_STALFOS_ROOM, ENTRANCE_DOOR(320) }, + { EntranceType::DoorIceCavern, RR_ICE_CAVERN_MQ_STALFOS_ROOM, + RR_ICE_CAVERN_MQ_WEST_CORRIDOR, ENTRANCE_DOOR(321) } }, + { { EntranceType::DoorIceCavern, RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER, + RR_ICE_CAVERN_MQ_ABOVE_BEGINNING, ENTRANCE_DOOR(322) }, + { EntranceType::DoorIceCavern, RR_ICE_CAVERN_MQ_ABOVE_BEGINNING, + RR_ICE_CAVERN_MQ_STALFOS_ROOM_UNDERWATER, ENTRANCE_DOOR(323) } }, + }); + } + + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LOBBY, + RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, ENTRANCE_DOOR(324) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, + RR_GERUDO_TRAINING_GROUND_LOBBY, ENTRANCE_DOOR(325) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LOBBY, + RR_GERUDO_TRAINING_GROUND_SAND_ROOM, ENTRANCE_DOOR(326) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_SAND_ROOM, + RR_GERUDO_TRAINING_GROUND_LOBBY, ENTRANCE_DOOR(327) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_SAND_ROOM, + RR_GERUDO_TRAINING_GROUND_BOULDER_ROOM, ENTRANCE_DOOR(328) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_BOULDER_ROOM, + RR_GERUDO_TRAINING_GROUND_SAND_ROOM, ENTRANCE_DOOR(329) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_BOULDER_ROOM, + RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, ENTRANCE_DOOR(330) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, + RR_GERUDO_TRAINING_GROUND_BOULDER_ROOM, ENTRANCE_DOOR(331) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_BEHIND_HEAVY_BLOCK, + RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, ENTRANCE_DOOR(332) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, + RR_GERUDO_TRAINING_GROUND_BEHIND_HEAVY_BLOCK, ENTRANCE_DOOR(333) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM_UPPER, + RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, ENTRANCE_DOOR(334) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, + RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM_UPPER, ENTRANCE_DOOR(335) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, + RR_GERUDO_TRAINING_GROUND_ABOVE_MAZE, ENTRANCE_DOOR(336) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_ABOVE_MAZE, + RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, ENTRANCE_DOOR(337) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, + RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, ENTRANCE_DOOR(338) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, + RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, ENTRANCE_DOOR(339) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, + RR_GERUDO_TRAINING_GROUND_LAVA_ROOM_UPPER_LEDGE, ENTRANCE_DOOR(340) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LAVA_ROOM_UPPER_LEDGE, + RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, ENTRANCE_DOOR(341) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, + RR_GERUDO_TRAINING_GROUND_UNDERWATER, ENTRANCE_DOOR(342) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_UNDERWATER, + RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, ENTRANCE_DOOR(343) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, + RR_GERUDO_TRAINING_GROUND_DINALFOS, ENTRANCE_DOOR(344) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_DINALFOS, + RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, ENTRANCE_DOOR(345) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_DINALFOS, + RR_GERUDO_TRAINING_GROUND_LOBBY, ENTRANCE_DOOR(346) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_LOBBY, + RR_GERUDO_TRAINING_GROUND_DINALFOS, ENTRANCE_DOOR(347) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, + RR_GERUDO_TRAINING_GROUND_MQ_MAZE_BY_LOBBY, ENTRANCE_DOOR(324) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_MAZE_BY_LOBBY, + RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, ENTRANCE_DOOR(325) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, + RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, ENTRANCE_DOOR(326) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, ENTRANCE_DOOR(327) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM, ENTRANCE_DOOR(328) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, ENTRANCE_DOOR(329) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, ENTRANCE_DOOR(330) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_BOULDER_ROOM, ENTRANCE_DOOR(331) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, ENTRANCE_DOOR(332) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, + RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, ENTRANCE_DOOR(333) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, ENTRANCE_DOOR(334) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, + RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, ENTRANCE_DOOR(335) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, + RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM, ENTRANCE_DOOR(336) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, ENTRANCE_DOOR(337) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, ENTRANCE_DOOR(338) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, ENTRANCE_DOOR(339) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, ENTRANCE_DOOR(340) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, + RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, ENTRANCE_DOOR(341) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, + RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, ENTRANCE_DOOR(342) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, + RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, ENTRANCE_DOOR(343) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, + RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, ENTRANCE_DOOR(344) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, ENTRANCE_DOOR(345) } }, + { { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, + RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, ENTRANCE_DOOR(346) }, + { EntranceType::DoorGerudoTrainingGround, RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, + RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, ENTRANCE_DOOR(347) } }, + }); + } + + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LOBBY, RR_GANONS_CASTLE_MAIN, ENTRANCE_DOOR(348) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_LOBBY, + ENTRANCE_DOOR(349) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, + ENTRANCE_DOOR(350) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(351) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, + RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH, ENTRANCE_DOOR(352) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH, + RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, ENTRANCE_DOOR(353) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH, + RR_GANONS_CASTLE_SPIRIT_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(354) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SPIRIT_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH, ENTRANCE_DOOR(355) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM, + ENTRANCE_DOOR(356) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(357) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM, + RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, ENTRANCE_DOOR(358) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, + RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM, ENTRANCE_DOOR(359) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, + RR_GANONS_CASTLE_LIGHT_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(360) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_LIGHT_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, ENTRANCE_DOOR(361) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_FIRE_TRIAL_FROM_OPEN, + ENTRANCE_DOOR(362) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FIRE_TRIAL_OPEN_DOOR, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(363) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FIRE_TRIAL_BARRED_DOOR, + RR_GANONS_CASTLE_FIRE_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(364) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FIRE_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_FIRE_TRIAL_FROM_BARRED, ENTRANCE_DOOR(365) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_SHADOW_TRIAL_START, + ENTRANCE_DOOR(366) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SHADOW_TRIAL_START, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(367) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SHADOW_TRIAL_END, + RR_GANONS_CASTLE_SHADOW_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(368) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_SHADOW_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_SHADOW_TRIAL_END, ENTRANCE_DOOR(369) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, + ENTRANCE_DOOR(370) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(371) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, + RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM, ENTRANCE_DOOR(372) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM, + RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, ENTRANCE_DOOR(373) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM_END, + RR_GANONS_CASTLE_WATER_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(374) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_WATER_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM_END, ENTRANCE_DOOR(375) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MAIN, RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, + ENTRANCE_DOOR(376) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, RR_GANONS_CASTLE_MAIN, + ENTRANCE_DOOR(377) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, + RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM, ENTRANCE_DOOR(378) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM, + RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, ENTRANCE_DOOR(379) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_FINAL_DOOR, + RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(380) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM_FINAL_DOOR, ENTRANCE_DOOR(381) } }, + }); + } else { + entranceShuffleTable.insert( + entranceShuffleTable.end(), + { + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LOBBY, RR_GANONS_CASTLE_MQ_MAIN, + ENTRANCE_DOOR(348) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, RR_GANONS_CASTLE_MQ_LOBBY, + ENTRANCE_DOOR(349) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, + RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, ENTRANCE_DOOR(350) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, + RR_GANONS_CASTLE_MQ_MAIN, ENTRANCE_DOOR(351) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, + RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, ENTRANCE_DOOR(352) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, + RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, ENTRANCE_DOOR(353) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, + RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(354) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, ENTRANCE_DOOR(355) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, + RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, ENTRANCE_DOOR(356) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, + RR_GANONS_CASTLE_MQ_MAIN, ENTRANCE_DOOR(357) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, + RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, ENTRANCE_DOOR(358) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, + RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, ENTRANCE_DOOR(359) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, + RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(360) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, ENTRANCE_DOOR(361) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FROM_OPEN, + ENTRANCE_DOOR(362) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FIRE_TRIAL_OPEN_DOOR, RR_GANONS_CASTLE_MQ_MAIN, + ENTRANCE_DOOR(363) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FIRE_TRIAL_BARRED_DOOR, + RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(364) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_FIRE_TRIAL_BARRED_DOOR, ENTRANCE_DOOR(365) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, + RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, ENTRANCE_DOOR(366) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, + RR_GANONS_CASTLE_MQ_MAIN, ENTRANCE_DOOR(367) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, + RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(368) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, ENTRANCE_DOOR(369) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, + RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, ENTRANCE_DOOR(370) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, + RR_GANONS_CASTLE_MQ_MAIN, ENTRANCE_DOOR(371) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, + RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, ENTRANCE_DOOR(372) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, + RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, ENTRANCE_DOOR(373) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM_END, + RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(374) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM_END, ENTRANCE_DOOR(375) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_MAIN, + RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, ENTRANCE_DOOR(376) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, + RR_GANONS_CASTLE_MQ_MAIN, ENTRANCE_DOOR(377) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, + RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, ENTRANCE_DOOR(378) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, + RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, ENTRANCE_DOOR(379) } }, + { { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM_END, + RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, ENTRANCE_DOOR(380) }, + { EntranceType::DoorGanonsCastle, RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, + RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM_END, ENTRANCE_DOOR(381) } }, + }); + } + for (auto& entrancePair : entranceShuffleTable) { auto& forwardEntry = entrancePair.first; auto& returnEntry = entrancePair.second; @@ -703,6 +2946,15 @@ std::vector EntranceShuffler::AssumeEntrancePool(std::vector& rollbacks) { + // Door shuffle only supported within same scene + if (entrance->GetType() >= EntranceType::DoorDekuTree && entrance->GetType() <= EntranceType::DoorGanonsTower) { + // avoid room leading to itself, causes duplicate actors + auto entranceDoor = DoorsList[entrance->GetIndex() - ENTRANCE_DOOR_START]; + auto targetIndex = (target->GetType() == EntranceType::None ? target->GetReplacement() : target)->GetIndex(); + auto targetDoor = DoorsList[targetIndex - ENTRANCE_DOOR_START]; + return entranceDoor.srcRoom != targetDoor.dstRoom; + } + // Entrances shouldn't connect to their own scene, fail in this situation if ( // allow "special" areas to connect to eachother @@ -807,11 +3059,13 @@ static bool ValidateWorld(Entrance* entrancePlaced) { (ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) || (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_ON) && ctx->GetOption(RSK_SHUFFLE_GROTTO_ENTRANCES)) || ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_ALL) || - ctx->GetOption(RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_SPAWNS)) && + ctx->GetOption(RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_SPAWNS) || + ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)) && (entrancePlaced == nullptr || ctx->GetOption(RSK_MIXED_ENTRANCE_POOLS) || type == EntranceType::SpecialInterior || type == EntranceType::Overworld || type == EntranceType::ThievesHideout || type == EntranceType::Spawn || type == EntranceType::WarpSong || - type == EntranceType::OwlDrop); + type == EntranceType::OwlDrop || + (type >= EntranceType::DoorDekuTree && type <= EntranceType::DoorGanonsTower)); // Search the world to verify that all necessary conditions are still being held // Conditions will be checked during the search and any that fail will be figured out @@ -819,7 +3073,8 @@ static bool ValidateWorld(Entrance* entrancePlaced) { ctx->GetLogic()->Reset(); ValidateEntrances(checkOtherEntranceAccess); - if (!ctx->GetOption(RSK_DECOUPLED_ENTRANCES)) { + if (!ctx->GetOption(RSK_DECOUPLED_ENTRANCES) && + !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS).Is(RO_SHUFFLE_DUNGEON_DOORS_MIX)) { // Unless entrances are decoupled, we don't want the player to end up through certain entrances as the wrong age // This means we need to hard check that none of the relevant entrances are ever reachable as that age // This is mostly relevant when mixing entrance pools or shuffling special interiors (such as windmill or kak @@ -1015,6 +3270,7 @@ bool EntranceShuffler::ShuffleOneWayPriorityEntrances(std::map 0) { retryCount--; std::vector rollbacks = {}; + rollbacks.reserve(oneWayPriorities.size()); bool success = true; for (auto& priority : oneWayPriorities) { @@ -1049,8 +3305,7 @@ bool EntranceShuffler::ShuffleOneWayPriorityEntrances(std::map, 2> SplitEntrancesByRequirements(std::vector& entrancesToSplit, std::vector& assumedEntrances) { // First, disconnect all root assumed entrances and save which regions they were originally connected to, so we can @@ -1160,6 +3415,7 @@ void EntranceShuffler::ShuffleEntrancePool(std::vector& entrancePool, retries--; std::vector rollbacks = {}; + rollbacks.reserve(entrancePool.size()); // Shuffle Restrictive Entrances first while more regions are available in // order to heavily reduce the chances of the placement failing @@ -1340,6 +3596,32 @@ int EntranceShuffler::ShuffleAllEntrances() { } } + // door entrances + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)) { + entrancePools[EntranceType::DoorDekuTree] = GetShuffleableEntrances(EntranceType::DoorDekuTree); + entrancePools[EntranceType::DoorDodongosCavern] = GetShuffleableEntrances(EntranceType::DoorDodongosCavern); + entrancePools[EntranceType::DoorJabuJabu] = GetShuffleableEntrances(EntranceType::DoorJabuJabu); + entrancePools[EntranceType::DoorForest] = GetShuffleableEntrances(EntranceType::DoorForest); + entrancePools[EntranceType::DoorFire] = GetShuffleableEntrances(EntranceType::DoorFire); + entrancePools[EntranceType::DoorWater] = GetShuffleableEntrances(EntranceType::DoorWater); + entrancePools[EntranceType::DoorShadow] = GetShuffleableEntrances(EntranceType::DoorShadow); + entrancePools[EntranceType::DoorSpirit] = GetShuffleableEntrances(EntranceType::DoorSpirit); + entrancePools[EntranceType::DoorBottomOfTheWell] = GetShuffleableEntrances(EntranceType::DoorBottomOfTheWell); + entrancePools[EntranceType::DoorIceCavern] = GetShuffleableEntrances(EntranceType::DoorIceCavern); + entrancePools[EntranceType::DoorGerudoTrainingGround] = + GetShuffleableEntrances(EntranceType::DoorGerudoTrainingGround); + entrancePools[EntranceType::DoorGanonsCastle] = GetShuffleableEntrances(EntranceType::DoorGanonsCastle); + entrancePools[EntranceType::DoorGanonsTower] = GetShuffleableEntrances(EntranceType::DoorGanonsTower); + + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS).Is(RO_SHUFFLE_DUNGEON_DOORS_MIX)) { + for (int i = (int)EntranceType::DoorDodongosCavern; i <= (int)EntranceType::DoorGanonsTower; i++) { + auto type = (EntranceType)i; + AddElementsToPool(entrancePools[EntranceType::DoorDekuTree], entrancePools[type]); + entrancePools[type].clear(); + } + } + } + // Set shuffled entrances as such SetShuffledEntrances(entrancePools); SetShuffledEntrances(oneWayEntrancePools); @@ -1456,9 +3738,9 @@ int EntranceShuffler::ShuffleAllEntrances() { // distribution stuff - // check placed on-way entrances + // check placed one-way entrances // remove replaced entrances so we don't place two in one target - // remvoe priority targets if any placed entrances point at their regions + // remove priority targets if any placed entrances point at their regions // Place priority entrances ShuffleOneWayPriorityEntrances(oneWayPriorities, oneWayEntrancePools, oneWayTargetEntrancePools); @@ -1607,6 +3889,8 @@ int EntranceShuffler::ShuffleAllEntrances() { } } + erase_if(RegionTable(RR_ROOT)->exits, [](Entrance exit) { return exit.GetReplacement() != NULL; }); + // Validate the world one last time to ensure all special conditions are still valid if (!ValidateWorld(nullptr)) { return ENTRANCE_SHUFFLE_FAILURE; @@ -1641,7 +3925,7 @@ void EntranceShuffler::CreateEntranceOverrides() { SPDLOG_DEBUG("Setting {}", entrance->to_string()); - uint8_t type = (uint8_t)entrance->GetType(); + uint16_t type = (uint16_t)entrance->GetType(); int16_t originalIndex = entrance->GetIndex(); int16_t replacementIndex = entrance->GetReplacement()->GetIndex(); @@ -1668,6 +3952,37 @@ void EntranceShuffler::CreateEntranceOverrides() { } } +const Door* EntranceShuffler::MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ) { + size_t doorIndex = -1; + size_t minDist = 18432; + for (size_t i = 0; i < DoorsList.size(); i++) { + auto door = &DoorsList[i]; + size_t linkDist = SQ(door->linkX - linkX) + SQ(door->linkZ - linkZ) + SQ(door->linkY - linkY); + if (door->scene == scene && door->srcRoom == srcRoom && door->dstRoom == dstRoom && linkDist < minDist) { + doorIndex = i; + minDist = linkDist; + } + } + + if (doorIndex != (size_t)-1) { + if (mDoorTable.size() == 0) { + mDoorTable.reserve(DoorsList.size()); + for (size_t i = 0; i < DoorsList.size(); i++) { + mDoorTable.push_back((int16_t)i ^ 1); + } + for (int i = 0; i < ENTRANCE_OVERRIDES_MAX_COUNT; i++) { + if (entranceOverrides[i].type >= (uint16_t)EntranceType::DoorDekuTree && + entranceOverrides[i].type <= (uint16_t)EntranceType::DoorGanonsTower) { + mDoorTable[entranceOverrides[i].index - ENTRANCE_DOOR_START] = + (entranceOverrides[i].override ^ 1) - ENTRANCE_DOOR_START; + } + } + } + return &DoorsList[mDoorTable[doorIndex]]; + } + return NULL; +} + /// @brief set all the entrances to be 0 to indicate an unshuffled entrance void EntranceShuffler::UnshuffleAllEntrances() { for (auto& entranceOveride : entranceOverrides) { diff --git a/soh/soh/Enhancements/randomizer/entrance.h b/soh/soh/Enhancements/randomizer/entrance.h index 32fefbb13..cf500faf5 100644 --- a/soh/soh/Enhancements/randomizer/entrance.h +++ b/soh/soh/Enhancements/randomizer/entrance.h @@ -35,6 +35,19 @@ enum class EntranceType { GrottoGrave, GrottoGraveReverse, Overworld, + DoorDekuTree, + DoorDodongosCavern, + DoorJabuJabu, + DoorForest, + DoorFire, + DoorWater, + DoorShadow, + DoorSpirit, + DoorBottomOfTheWell, + DoorIceCavern, + DoorGerudoTrainingGround, + DoorGanonsCastle, + DoorGanonsTower, Extra, Mixed, All, @@ -135,6 +148,7 @@ class EntranceShuffler { void SetNoRandomEntrances(bool noRandomEntrances); int ShuffleAllEntrances(); void CreateEntranceOverrides(); + const Door* MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ); void UnshuffleAllEntrances(); void ParseJson(nlohmann::json spoilerFileJson); void ApplyEntranceOverrides(); @@ -151,19 +165,21 @@ class EntranceShuffler { EntrancePools oneWayEntrancePools, EntrancePools oneWayTargetEntrancePools); bool ReplaceEntrance(Entrance* entrance, Entrance* target, std::vector& rollbacks); void ShuffleEntrancePool(std::vector& entrancePool, std::vector& targetEntrances, - int retryCount = 20); + int retryCount = 50); bool ShuffleEntrances(std::vector& entrances, std::vector& targetEntrances, std::vector& rollbacks); bool mNoRandomEntrances; int mTotalRandomizableEntrances = 0; int mCurNumRandomizedEntrances = 0; bool mEntranceShuffleFailure = false; + std::vector mDoorTable; }; } // namespace Rando extern "C" { #endif EntranceOverride* Randomizer_GetEntranceOverrides(); +void Randomizer_SetDoorOverride(int, int); #ifdef __cplusplus } #endif \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/location_access.h b/soh/soh/Enhancements/randomizer/location_access.h index d80a10ebe..4dc620b6a 100644 --- a/soh/soh/Enhancements/randomizer/location_access.h +++ b/soh/soh/Enhancements/randomizer/location_access.h @@ -233,7 +233,7 @@ class Region { bool pastAdult = logic->IsAdult; bool pastChild = logic->IsChild; - // set age access as this areas ages + // set age access as this area's ages logic->IsChild = Child(); logic->IsAdult = Adult(); diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 075296105..56529ab68 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1574,6 +1574,12 @@ bool Logic::SmallKeys(s16 scene, uint8_t requiredAmount) { if (HasItem(RG_SKELETON_KEY)) { return true; } + if (ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)) { + DungeonInfo* dungeon = ctx->GetDungeons()->GetDungeonFromScene(scene); + if (dungeon != nullptr) { + return GetSmallKeyCount(scene) >= dungeon->GetSmallKeyCount(); + } + } return GetSmallKeyCount(scene) >= requiredAmount; } diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index 496a6190c..52c56ddc8 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -36,6 +36,8 @@ class Logic { bool CalculatingAvailableChecks = false; bool ACProcessUndiscoveredExits = false; + /* --- END OF HELPERS AND LOCATION ACCESS --- */ + SaveContext* mSaveContext = nullptr; Logic(); bool CanUse(RandomizerGet itemName); diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 95481e9f6..5033f2893 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -186,6 +186,7 @@ void Settings::CreateOptionDescriptions() { "\n" "Keep in mind you may need to temporarily disable the \"Remember Save Location\" time saver to " "be able use the spawn positions, especially if they are the only logical way to get to certain areas."; + mOptionDescriptions[RSK_SHUFFLE_DUNGEON_DOORS] = "Shuffle where doors lead to in dungeons."; mOptionDescriptions[RSK_DECOUPLED_ENTRANCES] = "Decouple entrances when shuffling them. This means you are no longer guaranteed " "to end up back where you came from when you go back through an entrance.\n" diff --git a/soh/soh/Enhancements/randomizer/randomizerEnums/LogicVal.h b/soh/soh/Enhancements/randomizer/randomizerEnums/LogicVal.h index fc35b4bca..6890d730f 100644 --- a/soh/soh/Enhancements/randomizer/randomizerEnums/LogicVal.h +++ b/soh/soh/Enhancements/randomizer/randomizerEnums/LogicVal.h @@ -227,6 +227,7 @@ RANDO_ENUM_ITEM(LOGIC_DEKU_TREE_PUSHED_BASEMENT_BLOCK) RANDO_ENUM_ITEM(LOGIC_DEKU_TREE_MQ_CLEARED_SE_ROOM) RANDO_ENUM_ITEM(LOGIC_DEKU_TREE_MQ_WATER_ROOM_TORCHES) RANDO_ENUM_ITEM(LOGIC_DEKU_TREE_MQ_2F_BURNED_WEB) +RANDO_ENUM_ITEM(LOGIC_DEKU_TREE_MQ_3F_SWITCH) RANDO_ENUM_ITEM(LOGIC_DC_EYES_LIT) RANDO_ENUM_ITEM(LOGIC_DC_STAIRS_ROOM_DOOR) RANDO_ENUM_ITEM(LOGIC_DC_LIFT_PLATFORM) diff --git a/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerOptions.h b/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerOptions.h index e38d32293..a44be2079 100644 --- a/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerOptions.h +++ b/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerOptions.h @@ -471,6 +471,12 @@ RANDO_ENUM_ITEM(RO_MQ_SET_MQ) RANDO_ENUM_ITEM(RO_MQ_SET_RANDOM) RANDO_ENUM_END(RandoOptionMQSet) +RANDO_ENUM_BEGIN(RandoOptionShuffleDungeonDoors) +RANDO_ENUM_ITEM(RO_SHUFFLE_DUNGEON_DOORS_OFF) +RANDO_ENUM_ITEM(RO_SHUFFLE_DUNGEON_DOORS_ON) +RANDO_ENUM_ITEM(RO_SHUFFLE_DUNGEON_DOORS_MIX) +RANDO_ENUM_END(RandoOptionShuffleDungeonDoors) + #ifdef RANDO_ENUM_BEGIN_CLEANUP #undef RANDO_ENUM_BEGIN #undef RANDO_ENUM_BEGIN_CLEANUP diff --git a/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerSettingKey.h b/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerSettingKey.h index 5e1dc80f3..42b0ec573 100644 --- a/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerSettingKey.h +++ b/soh/soh/Enhancements/randomizer/randomizerEnums/RandomizerSettingKey.h @@ -250,6 +250,7 @@ RANDO_ENUM_ITEM(RSK_SHUFFLE_SIGNS) RANDO_ENUM_ITEM(RSK_ROCS_FEATHER) RANDO_ENUM_ITEM(RSK_SHUFFLE_ICICLES) RANDO_ENUM_ITEM(RSK_SHUFFLE_RED_ICE) +RANDO_ENUM_ITEM(RSK_SHUFFLE_DUNGEON_DOORS) RANDO_ENUM_ITEM(RSK_MAX) RANDO_ENUM_END(RandomizerSettingKey) diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 92bba438b..b39b41c53 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -46,6 +46,8 @@ typedef struct ShopItemIdentity { #define ENTRANCE_GROTTO_LOAD_START 0x0700 #define ENTRANCE_GROTTO_EXIT_START 0x0800 +#define ENTRANCE_DOOR_START 0x0900 #define ENTRANCE_GROTTO_LOAD(index) ENTRANCE_GROTTO_LOAD_START + index #define ENTRANCE_GROTTO_EXIT(index) ENTRANCE_GROTTO_EXIT_START + index +#define ENTRANCE_DOOR(index) (ENTRANCE_DOOR_START + index) diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.c b/soh/soh/Enhancements/randomizer/randomizer_entrance.c index 0154cd99f..d96d0f205 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.c +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.c @@ -220,6 +220,10 @@ void Entrance_Init(void) { continue; } + if (originalIndex >= ENTRANCE_DOOR_START && originalIndex < ENTRANCE_DOOR_START + 512) { + continue; + } + // Overwrite the indices which we want to shuffle, leaving the rest as they are entranceOverrideTable[originalIndex] = overrideIndex; diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance.h b/soh/soh/Enhancements/randomizer/randomizer_entrance.h index ec770b114..a377087b9 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance.h +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance.h @@ -9,7 +9,8 @@ #define ENTRANCE_TABLE_SIZE ENTR_MAX #define MAX_ENTRANCE_RANDO_USED_INDEX 0x0820 -#define ENTRANCE_OVERRIDES_MAX_COUNT 296 // 20 one-way entrances + 125 two-way entrances (x2) + 26 Thieves' Hideout +#define ENTRANCE_OVERRIDES_MAX_COUNT \ + 696 // 20 one-way entrances + 125 two-way entrances (x2) + 26 Thieves' Hideout + ~200 doors (x2) #define SHUFFLEABLE_BOSS_COUNT 8 #define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1 diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp index 95cb71c2e..fe711f602 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.cpp @@ -75,7 +75,7 @@ static std::string spoilerEntranceGroupNames[] = { }; static std::string groupTypeNames[] = { - "One Way", "Overworld", "Interior", "Fortress", "Grotto", "Dungeon", + "One Way", "Overworld", "Interior", "Fortress", "Grotto", "Dungeon", "Door", }; // Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and @@ -418,8 +418,403 @@ const EntranceData entranceData[] = { { ENTR_GANONS_TOWER_0, ENTR_INSIDE_GANONS_CASTLE_1, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle", "Ganon's Tower Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "gc"}, { ENTR_OUTSIDE_GANONS_CASTLE_1_2, -1, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "Ganon's Blue Warp", "Ganon's Castle Blue Warp", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_ONE_WAY, "gc,bw", 1}, - // clang-format on + // Doors + { ENTRANCE_DOOR(0), ENTRANCE_DOOR(1), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Lobby 2F", "Deku Tree 2F Middle Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(1), ENTRANCE_DOOR(0), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree 2F Middle Room", "Deku Tree Lobby 2F", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(2), ENTRANCE_DOOR(3), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree 2F Middle Room", "Deku Tree Falling Platform", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(3), ENTRANCE_DOOR(2), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Falling Platform", "Deku Tree 2F Middle Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(4), ENTRANCE_DOOR(5), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Lobby 3F", "Deku Tree Raising Platforms", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(5), ENTRANCE_DOOR(4), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Raising Platforms", "Deku Tree Lobby 3F", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(6), ENTRANCE_DOOR(7), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement", "Deku Tree Basement Scrub", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(7), ENTRANCE_DOOR(6), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Scrub", "Deku Tree Basement", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(8), ENTRANCE_DOOR(9), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Scrub", "Deku Tree Basement Water Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(9), ENTRANCE_DOOR(8), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Water Room", "Deku Tree Basement Scrub", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(10), ENTRANCE_DOOR(11), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Water Room", "Deku Tree Basement Torch Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(11), ENTRANCE_DOOR(10), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Torch Room", "Deku Tree Basement Water Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(12), ENTRANCE_DOOR(13), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Torch Room", "Deku Tree Basement Back Lobby", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(13), ENTRANCE_DOOR(12), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Back Lobby", "Deku Tree Basement Torch Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(14), ENTRANCE_DOOR(15), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Back Lobby", "Deku Tree Basement Back Room", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(15), ENTRANCE_DOOR(14), SINGLE_SCENE_INFO(SCENE_DEKU_TREE), "Deku Tree Basement Back Room", "Deku Tree Basement Back Lobby", ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_GROUP_KOKIRI_FOREST, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(16), ENTRANCE_DOOR(17), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Lobby", "DC Behind Mouth", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(17), ENTRANCE_DOOR(16), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Behind Mouth", "DC Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(18), ENTRANCE_DOOR(19), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Behind Mouth", "DC Back Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(19), ENTRANCE_DOOR(18), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Back Room", "DC Behind Mouth", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(20), ENTRANCE_DOOR(21), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Lobby", "DC Blue Cave", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(21), ENTRANCE_DOOR(20), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Blue Cave", "DC Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(22), ENTRANCE_DOOR(23), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Blue Cave", "DC Blue Cave Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(23), ENTRANCE_DOOR(22), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Blue Cave Room", "DC Blue Cave", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(24), ENTRANCE_DOOR(25), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Blue Cave", "DC Lower Lizalfos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(25), ENTRANCE_DOOR(24), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Lower Lizalfos", "DC Blue Cave", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(26), ENTRANCE_DOOR(27), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Lower Lizalfos", "DC Baby Dodongos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(27), ENTRANCE_DOOR(26), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Baby Dodongos", "DC Lower Lizalfos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(28), ENTRANCE_DOOR(29), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Baby Dodongos", "DC Baby Dodongos Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(29), ENTRANCE_DOOR(28), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Baby Dodongos Room", "DC Baby Dodongos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(30), ENTRANCE_DOOR(31), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Lobby", "DC Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(31), ENTRANCE_DOOR(30), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Stairs", "DC Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(32), ENTRANCE_DOOR(33), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Stairs", "DC Room Below Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(33), ENTRANCE_DOOR(32), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Room Below Stairs", "DC Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(34), ENTRANCE_DOOR(35), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Above Stairs", "DC Room Above Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(35), ENTRANCE_DOOR(34), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Room Above Stairs", "DC Above Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(36), ENTRANCE_DOOR(37), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Room Above Stairs", "DC Front Bridge", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(37), ENTRANCE_DOOR(36), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Front Bridge", "DC Room Above Stairs", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(38), ENTRANCE_DOOR(39), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Front Bridge", "DC Spikes", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(39), ENTRANCE_DOOR(38), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Spikes", "DC Front Bridge", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(40), ENTRANCE_DOOR(41), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Spikes", "DC Upper Lizalfos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(41), ENTRANCE_DOOR(40), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Upper Lizalfos", "DC Spikes", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(42), ENTRANCE_DOOR(43), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Upper Lizalfos", "DC Two Flames", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(43), ENTRANCE_DOOR(42), SINGLE_SCENE_INFO(SCENE_DODONGOS_CAVERN), "DC Two Flames", "DC Upper Lizalfos", ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_GROUP_DEATH_MOUNTAIN_TRAIL, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(44), ENTRANCE_DOOR(45), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Beginning", "JJB Lift", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(45), ENTRANCE_DOOR(44), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Lift", "JJB Beginning", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(46), ENTRANCE_DOOR(47), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Lift", "JJB Holes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(47), ENTRANCE_DOOR(46), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Holes", "JJB Lift", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(48), ENTRANCE_DOOR(49), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Holes", "JJB Pool", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(49), ENTRANCE_DOOR(48), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Pool", "JJB Holes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(50), ENTRANCE_DOOR(51), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Holes", "JJB Water Switch", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(51), ENTRANCE_DOOR(50), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Water Switch", "JJB Holes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(52), ENTRANCE_DOOR(53), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Water Switch", "JJB Lift", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(53), ENTRANCE_DOOR(52), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Lift", "JJB Water Switch", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(54), ENTRANCE_DOOR(55), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Holes", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(55), ENTRANCE_DOOR(54), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB Holes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(56), ENTRANCE_DOOR(57), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB West", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(57), ENTRANCE_DOOR(56), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB West", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(58), ENTRANCE_DOOR(59), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB North West", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(59), ENTRANCE_DOOR(58), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB North West", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(60), ENTRANCE_DOOR(61), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB East", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(61), ENTRANCE_DOOR(60), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB East", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(62), ENTRANCE_DOOR(63), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB North East", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(63), ENTRANCE_DOOR(62), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB North East", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(64), ENTRANCE_DOOR(65), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Fork", "JJB North", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(65), ENTRANCE_DOOR(64), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB North", "JJB Fork", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(66), ENTRANCE_DOOR(67), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Holes", "JJB Big Octo", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(67), ENTRANCE_DOOR(66), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Big Octo", "JJB Holes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(68), ENTRANCE_DOOR(69), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Above Big Octo", "JJB Cubes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(69), ENTRANCE_DOOR(68), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Cubes", "JJB Above Big Octo", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(70), ENTRANCE_DOOR(71), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Cubes", "JJB Above Lift", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(71), ENTRANCE_DOOR(70), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Above Lift", "JJB Cubes", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(72), ENTRANCE_DOOR(73), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB Lift Edge", "JJB East of Lift", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(73), ENTRANCE_DOOR(72), SINGLE_SCENE_INFO(SCENE_JABU_JABU), "JJB East of Lift", "JJB Lift Edge", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(74), ENTRANCE_DOOR(75), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Entrance", "Forest South Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(75), ENTRANCE_DOOR(74), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest South Hall", "Forest Entrance", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(76), ENTRANCE_DOOR(77), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest South Hall", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(77), ENTRANCE_DOOR(76), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest South Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(78), ENTRANCE_DOOR(79), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest West Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(79), ENTRANCE_DOOR(78), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest West Hall", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(80), ENTRANCE_DOOR(81), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest West Hall", "Forest Block Puzzle", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(81), ENTRANCE_DOOR(80), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Block Puzzle", "Forest West Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(82), ENTRANCE_DOOR(83), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Block Puzzle", "Forest NW Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(83), ENTRANCE_DOOR(82), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NW Courtyard", "Forest Block Puzzle", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(84), ENTRANCE_DOOR(85), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NW Courtyard", "Forest Floormaster", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(85), ENTRANCE_DOOR(84), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Floormaster", "Forest NW Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(86), ENTRANCE_DOOR(87), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NW Courtyard", "Forest Below Boss Key Chest", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(87), ENTRANCE_DOOR(86), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Below Boss Key Chest", "Forest NW Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(88), ENTRANCE_DOOR(89), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NW Courtyard", "Forest Courtyard Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(89), ENTRANCE_DOOR(88), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Courtyard Hall", "Forest NW Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(90), ENTRANCE_DOOR(91), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Courtyard Hall", "Forest NE Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(91), ENTRANCE_DOOR(90), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NE Courtyard", "Forest Courtyard Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(92), ENTRANCE_DOOR(93), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NW Courtyard", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(93), ENTRANCE_DOOR(92), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest NW Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(94), ENTRANCE_DOOR(95), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NE Courtyard", "Forest Falling Floor", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(95), ENTRANCE_DOOR(94), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Falling Floor", "Forest NE Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(96), ENTRANCE_DOOR(97), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest NE Courtyard", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(97), ENTRANCE_DOOR(96), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest NE Courtyard", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(98), ENTRANCE_DOOR(99), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Falling Floor", "Forest Green Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(99), ENTRANCE_DOOR(98), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Green Poe", "Forest Falling Floor", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(100), ENTRANCE_DOOR(101), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Green Poe", "Forest East Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(101), ENTRANCE_DOOR(100), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest East Hall", "Forest Green Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(102), ENTRANCE_DOOR(103), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest East Hall", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(103), ENTRANCE_DOOR(102), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest East Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(104), ENTRANCE_DOOR(105), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Lobby", "Forest North Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(105), ENTRANCE_DOOR(104), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest North Hall", "Forest Lobby", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(106), ENTRANCE_DOOR(107), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest North Hall", "Forest North Room F1", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(107), ENTRANCE_DOOR(106), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest North Room F1", "Forest North Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(108), ENTRANCE_DOOR(109), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Block Puzzle", "Forest Twisted Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(109), ENTRANCE_DOOR(108), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Twisted Hall", "Forest Block Puzzle", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(110), ENTRANCE_DOOR(111), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Twisted Hall", "Forest Red Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(111), ENTRANCE_DOOR(110), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Red Poe", "Forest Twisted Hall", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(112), ENTRANCE_DOOR(113), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Red Poe", "Forest North Room F2", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(113), ENTRANCE_DOOR(112), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest North Room F2", "Forest Red Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(114), ENTRANCE_DOOR(115), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest North Room F2", "Forest Blue Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(115), ENTRANCE_DOOR(114), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Blue Poe", "Forest North Room F2", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(116), ENTRANCE_DOOR(117), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Blue Poe", "Forest Twisted Room", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(117), ENTRANCE_DOOR(116), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Twisted Room", "Forest Blue Poe", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(118), ENTRANCE_DOOR(119), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Twisted Room", "Forest Frozen Eye", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(119), ENTRANCE_DOOR(118), SINGLE_SCENE_INFO(SCENE_FOREST_TEMPLE), "Forest Frozen Eye", "Forest Twisted Room", ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_GROUP_LOST_WOODS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(120), ENTRANCE_DOOR(121), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Lobby", "Fire Near Boss Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(121), ENTRANCE_DOOR(120), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Near Boss Room", "Fire Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(122), ENTRANCE_DOOR(123), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Lobby", "Fire West Loop Entrance", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(123), ENTRANCE_DOOR(122), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Loop Entrance", "Fire Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(124), ENTRANCE_DOOR(125), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Lobby", "Fire East Loop Entrance", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(125), ENTRANCE_DOOR(124), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire East Loop Entrance", "Fire Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(126), ENTRANCE_DOOR(127), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire East Loop", "Fire East Loop Entrance", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(127), ENTRANCE_DOOR(126), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire East Loop Entrance", "Fire East Loop", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(128), ENTRANCE_DOOR(129), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire East Loop", "Fire West Loop", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(129), ENTRANCE_DOOR(128), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Loop", "Fire East Loop", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(130), ENTRANCE_DOOR(131), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Loop", "Fire West Loop Entrance Switch", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(131), ENTRANCE_DOOR(130), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Loop Entrance Switch", "Fire West Loop", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(132), ENTRANCE_DOOR(133), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Lobby", "Fire Big Lava Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(133), ENTRANCE_DOOR(132), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room", "Fire Lobby", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(134), ENTRANCE_DOOR(135), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room", "Fire Big Lava Room North Goron", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(135), ENTRANCE_DOOR(134), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room North Goron", "Fire Big Lava Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(136), ENTRANCE_DOOR(137), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room", "Fire Above Big Lava Room North Goron", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(137), ENTRANCE_DOOR(136), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Above Big Lava Room North Goron", "Fire Big Lava Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(138), ENTRANCE_DOOR(139), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room", "Fire Big Lava Room South Goron", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(139), ENTRANCE_DOOR(138), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room South Goron", "Fire Big Lava Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(140), ENTRANCE_DOOR(141), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Big Lava Room", "Fire Fire Pillar", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(141), ENTRANCE_DOOR(140), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Fire Pillar", "Fire Big Lava Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(142), ENTRANCE_DOOR(143), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Above Fire Pillar", "Fire Below Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(143), ENTRANCE_DOOR(142), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Below Boulder Maze", "Fire Above Fire Pillar", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(144), ENTRANCE_DOOR(145), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Below Boulder Maze", "Fire Boulder Maze Start", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(145), ENTRANCE_DOOR(144), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Boulder Maze Start", "Fire Below Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(146), ENTRANCE_DOOR(147), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Above Boulder Maze", "Fire Room Above Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(147), ENTRANCE_DOOR(146), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Room Above Boulder Maze", "Fire Above Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(148), ENTRANCE_DOOR(149), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Room Above Boulder Maze", "Fire East Peak", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(149), ENTRANCE_DOOR(148), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire East Peak", "Fire Room Above Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(150), ENTRANCE_DOOR(151), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Boulder Maze Lower", "Fire Bridge Above Bridge", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(151), ENTRANCE_DOOR(150), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Bridge Above Bridge", "Fire Boulder Maze Lower", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(152), ENTRANCE_DOOR(153), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Boulder Maze Lower", "Fire Boulder Maze Side Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(153), ENTRANCE_DOOR(152), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Boulder Maze Side Room", "Fire Boulder Maze Lower", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(154), ENTRANCE_DOOR(155), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Boulder Maze", "Fire Wall Chase", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(155), ENTRANCE_DOOR(154), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Chase", "Fire Boulder Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(156), ENTRANCE_DOOR(157), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Chase Cage", "Fire Bridge Above Bridge", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(157), ENTRANCE_DOOR(156), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Bridge Above Bridge", "Fire Wall Chase Cage", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(158), ENTRANCE_DOOR(159), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Bridge Above Bridge", "Fire Wall Chase", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(159), ENTRANCE_DOOR(158), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Chase", "Fire Bridge Above Bridge", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(160), ENTRANCE_DOOR(161), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Chase", "Fire Corridor", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(161), ENTRANCE_DOOR(160), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Corridor", "Fire Wall Chase", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(162), ENTRANCE_DOOR(163), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Corridor", "Fire Wall Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(163), ENTRANCE_DOOR(162), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze", "Fire Corridor", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(164), ENTRANCE_DOOR(165), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze Upper", "Fire Wall Maze Core Upper", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(165), ENTRANCE_DOOR(164), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze Core Upper", "Fire Wall Maze Upper", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(166), ENTRANCE_DOOR(167), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze", "Fire Wall Maze Side Room", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(167), ENTRANCE_DOOR(166), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze Side Room", "Fire Wall Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(168), ENTRANCE_DOOR(169), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze", "Fire Wall Maze Core", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(169), ENTRANCE_DOOR(168), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze Core", "Fire Wall Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(170), ENTRANCE_DOOR(171), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze Core", "Fire Wall Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(171), ENTRANCE_DOOR(170), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze", "Fire Wall Maze Core", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(172), ENTRANCE_DOOR(173), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Wall Maze End", "Fire Upper Flare Dancer", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(173), ENTRANCE_DOOR(172), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Upper Flare Dancer", "Fire Wall Maze End", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(174), ENTRANCE_DOOR(175), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Above Upper Flare Dancer", "Fire West Climb", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(175), ENTRANCE_DOOR(174), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Climb", "Fire Above Upper Flare Dancer", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(176), ENTRANCE_DOOR(177), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Climb", "Fire West Peak", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(177), ENTRANCE_DOOR(176), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Peak", "Fire West Climb", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(178), ENTRANCE_DOOR(179), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire West Peak Basement", "Fire Hammer Stairs Top", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(179), ENTRANCE_DOOR(178), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Hammer Stairs Top", "Fire West Peak Basement", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(180), ENTRANCE_DOOR(181), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Hammer Stairs Bottom", "Fire Above Fire Wall Maze", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(181), ENTRANCE_DOOR(180), SINGLE_SCENE_INFO(SCENE_FIRE_TEMPLE), "Fire Above Fire Wall Maze", "Fire Hammer Stairs Bottom", ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_GROUP_DEATH_MOUNTAIN_CRATER, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(182), ENTRANCE_DOOR(183), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 3F North", "Water Boss Ramp", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(183), ENTRANCE_DOOR(182), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boss Ramp", "Water 3F North", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(184), ENTRANCE_DOOR(185), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 3F West", "Water Waterfall Front", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(185), ENTRANCE_DOOR(184), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Waterfall Front", "Water 3F West", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(186), ENTRANCE_DOOR(187), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Waterfall Back", "Water Skinny Pillar", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(187), ENTRANCE_DOOR(186), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Skinny Pillar", "Water Waterfall Back", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(188), ENTRANCE_DOOR(189), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Skinny Pillar Upper", "Water Dark Link", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(189), ENTRANCE_DOOR(188), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Dark Link", "Water Skinny Pillar Upper", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(190), ENTRANCE_DOOR(191), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Dark Link", "Water Past Dark Link", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(191), ENTRANCE_DOOR(190), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Past Dark Link", "Water Dark Link", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(192), ENTRANCE_DOOR(193), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Whirlpool", "Water 1F West", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(193), ENTRANCE_DOOR(192), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F West", "Water Whirlpool", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(194), ENTRANCE_DOOR(195), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F North", "Water Boulders Front", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(195), ENTRANCE_DOOR(194), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boulders Front", "Water 1F North", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(196), ENTRANCE_DOOR(197), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boulders Upper", "Water Boulders Hidden Room", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(197), ENTRANCE_DOOR(196), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boulders Hidden Room", "Water Boulders Upper", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(198), ENTRANCE_DOOR(199), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boulders Back", "Water Past Boulders", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(199), ENTRANCE_DOOR(198), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Past Boulders", "Water Boulders Back", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(200), ENTRANCE_DOOR(201), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Past Boulders", "Water Jets Past Boulders", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(201), ENTRANCE_DOOR(200), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Jets Past Boulders", "Wate Past Bouldersr", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(202), ENTRANCE_DOOR(203), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Jets Past Boulders", "Water Boulders Upper", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(203), ENTRANCE_DOOR(202), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water Boulders Upper", "Water Jets Past Boulders", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(204), ENTRANCE_DOOR(205), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 3F East", "Water 3F East Side Room", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(205), ENTRANCE_DOOR(204), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 3F East Side Room", "Water 3F East", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(206), ENTRANCE_DOOR(207), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F East", "Water 1F East Side Room", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(207), ENTRANCE_DOOR(206), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F East Side Room", "Water 1F East", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(208), ENTRANCE_DOOR(209), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F", "Water 1F Central", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(209), ENTRANCE_DOOR(208), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 1F Central", "Water 1F", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(210), ENTRANCE_DOOR(211), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 2F", "Water 2F Central", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(211), ENTRANCE_DOOR(210), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 2F Central", "Water 2F", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(212), ENTRANCE_DOOR(213), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 2F", "Water 2F East", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(213), ENTRANCE_DOOR(212), SINGLE_SCENE_INFO(SCENE_WATER_TEMPLE), "Water 2F East", "Water 2F", ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_GROUP_LAKE_HYLIA, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(214), ENTRANCE_DOOR(215), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Beginning", "Shadow Whispering Walls", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(215), ENTRANCE_DOOR(214), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Whispering Walls", "Shadow Beginning", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(216), ENTRANCE_DOOR(217), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Whispering Walls", "Shadow Whispering Walls Side Room", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(217), ENTRANCE_DOOR(216), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Whispering Walls Side Room", "Shadow Whispering Walls", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(218), ENTRANCE_DOOR(219), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Whispering Walls", "Shadow Deadhand", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(219), ENTRANCE_DOOR(218), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Deadhand", "Shadow Whispering Walls", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(220), ENTRANCE_DOOR(221), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow First Beamos", "Shadow First Beamos Right", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(221), ENTRANCE_DOOR(220), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow First Beamos Right", "Shadow First Beamos", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(222), ENTRANCE_DOOR(223), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow First Beamos", "Shadow First Beamos Left", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(223), ENTRANCE_DOOR(222), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow First Beamos Left", "Shadow First Beamos", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(224), ENTRANCE_DOOR(225), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow First Beamos", "Shadow Hall to Huge Pit", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(225), ENTRANCE_DOOR(224), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Hall to Huge Pit", "Shadow First Beamos", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(226), ENTRANCE_DOOR(227), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Huge Pit Upper", "Shadow Invisible Blades", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(227), ENTRANCE_DOOR(226), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Invisible Blades", "Shadow Huge Pit Upper", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(228), ENTRANCE_DOOR(229), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Huge Pit Lower", "Shadow Invisible Spikes", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(229), ENTRANCE_DOOR(228), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Invisible Spikes", "Shadow Huge Pit Lower", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(230), ENTRANCE_DOOR(231), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Invisible Spikes", "Shadow Skull Jar", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(231), ENTRANCE_DOOR(230), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Skull Jar", "Shadow Invisible Spikes", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(232), ENTRANCE_DOOR(233), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Invisible Spikes", "Shadow Wind Tunnel Upper", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(233), ENTRANCE_DOOR(232), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Wind Tunnel Upper", "Shadow Invisible Spikes", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(234), ENTRANCE_DOOR(235), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Wind Tunnel Lower", "Shadow Wind Hint", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(235), ENTRANCE_DOOR(234), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Wind Hint", "Shadow Wind Tunnel Lower", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(236), ENTRANCE_DOOR(237), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Wind Tunnel Lower", "Shadow Room to Boat", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(237), ENTRANCE_DOOR(236), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Room to Boat", "Shado Wind Tunnel Lowerw", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(238), ENTRANCE_DOOR(239), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Room to Boat", "Shadow Dock", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(239), ENTRANCE_DOOR(238), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Dock", "Shadow Room to Boat", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(240), ENTRANCE_DOOR(241), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Past Chasm", "Shadow Near Boss Room", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(241), ENTRANCE_DOOR(240), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Near Boss Room", "Shadow Past Chasm", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(242), ENTRANCE_DOOR(243), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Beyond Boat", "Shadow Maze", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(243), ENTRANCE_DOOR(242), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Maze", "Shadow Beyond Boat", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(244), ENTRANCE_DOOR(245), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Maze", "Shadow X-Cross", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(245), ENTRANCE_DOOR(244), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow X-Cross", "Shadow Maze", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(246), ENTRANCE_DOOR(247), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Maze", "Shadow Three Skull Jars", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(247), ENTRANCE_DOOR(246), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Three Skull Jars", "Shadow Maze", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(248), ENTRANCE_DOOR(249), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Maze", "Shadow Wooden Spikes", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(249), ENTRANCE_DOOR(248), SINGLE_SCENE_INFO(SCENE_SHADOW_TEMPLE), "Shadow Wooden Spikes", "Shadow Maze", ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_GROUP_GRAVEYARD, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(250), ENTRANCE_DOOR(251), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Lobby", "Spirit Adult Sand Pit", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(251), ENTRANCE_DOOR(250), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Sand Pit", "Spirit Adult Lobby", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(252), ENTRANCE_DOOR(253), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Lobby", "Spirit Boulders", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(253), ENTRANCE_DOOR(252), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Boulders", "Spirit Adult Lobby", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(254), ENTRANCE_DOOR(255), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Boulders", "Spirit Past Boulders", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(255), ENTRANCE_DOOR(254), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Past Boulders", "Spirit Boulders", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(256), ENTRANCE_DOOR(257), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Lobby", "Spirit Adult Climb", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(257), ENTRANCE_DOOR(256), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Climb", "Spirit Adult Lobby", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(258), ENTRANCE_DOOR(259), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Statue East", "Spirit Adult Climb", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(259), ENTRANCE_DOOR(258), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Adult Climb", "Spirit Statue East", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(260), ENTRANCE_DOOR(261), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Statue East", "Spirit Stairs to Beamos Pits", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(261), ENTRANCE_DOOR(260), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to Beamos Pits", "Spirit Statue East", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(262), ENTRANCE_DOOR(263), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to Beamos Pits", "Spirit Beamos Pits", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(263), ENTRANCE_DOOR(262), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Beamos Pits", "Spirit Stairs to Beamos Pits", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(264), ENTRANCE_DOOR(265), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Beamos Pits", "Spirit Big Wall Lower", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(265), ENTRANCE_DOOR(264), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Big Wall Lower", "Spirit Beamos Pits", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(266), ENTRANCE_DOOR(267), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Beamos Pits", "Spirit Four Armos", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(267), ENTRANCE_DOOR(266), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Four Armos", "Spirit Beamos Pits", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(268), ENTRANCE_DOOR(269), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Four Armos", "Spirit Four Armos Side Room", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(269), ENTRANCE_DOOR(268), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Four Armos Side Room", "Spirit Four Armos", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(270), ENTRANCE_DOOR(271), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Four Armos", "Spirit Stairs to East Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(271), ENTRANCE_DOOR(270), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to East Hand", "Spirit Four Armos", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(272), ENTRANCE_DOOR(273), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to East Hand", "Spirit East Iron Knuckle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(273), ENTRANCE_DOOR(272), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit East Iron Knuckle", "Spirit Stairs to East Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(274), ENTRANCE_DOOR(275), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit East Iron Knuckle", "Spirit Exit to East Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(275), ENTRANCE_DOOR(274), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Exit to East Hand", "Spirit East Iron Knuckle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(276), ENTRANCE_DOOR(277), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Big Wall Upper", "Spirit 4F Central", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(277), ENTRANCE_DOOR(276), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit 4F Central", "Spiri Big Wall Uppert", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(278), ENTRANCE_DOOR(279), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit 4F Central", "Spirit 4F Side Room", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(279), ENTRANCE_DOOR(278), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit 4F Side Room", "Spirit 4F Central", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(280), ENTRANCE_DOOR(281), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit 4F Central", "Spirit Big Mirror", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(281), ENTRANCE_DOOR(280), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Big Mirror", "Spirit 4F Central", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(282), ENTRANCE_DOOR(283), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Big Mirror", "Spirit Big Mirror Cave", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(283), ENTRANCE_DOOR(282), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Big Mirror Cave", "Spirit Big Mirror", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(284), ENTRANCE_DOOR(285), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Lobby", "Spirit Child Left", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(285), ENTRANCE_DOOR(284), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Left", "Spirit Child Lobby", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(286), ENTRANCE_DOOR(287), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Left Across Bridge", "Spirit Child Back Room", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(287), ENTRANCE_DOOR(286), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Back Room", "Spirit Child Left Across Bridge", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(288), ENTRANCE_DOOR(289), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Back Room", "Spirit Child Right Across Bridge", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(289), ENTRANCE_DOOR(288), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Right Across Bridge", "Spirit Child Back Room", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(290), ENTRANCE_DOOR(291), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Right", "Spirit Child Lobby", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(291), ENTRANCE_DOOR(290), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Lobby", "Spirit Child Right", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(292), ENTRANCE_DOOR(293), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Before Climb", "Spirit Child Climb", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(293), ENTRANCE_DOOR(292), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Climb", "Spirit Child Before Climb", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(294), ENTRANCE_DOOR(295), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Child Climb", "Spirit Statue", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(295), ENTRANCE_DOOR(294), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Statue", "Spirit Child Climb", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(296), ENTRANCE_DOOR(297), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Statue", "Spirit Stairs to Block Puzzle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(297), ENTRANCE_DOOR(296), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to Block Puzzle", "Spirit Statue", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(298), ENTRANCE_DOOR(299), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to Block Puzzle", "Spirit Block Puzzle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(299), ENTRANCE_DOOR(298), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Block Puzzle", "Spirit Stairs to Block Puzzle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(300), ENTRANCE_DOOR(301), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Block Puzzle", "Spirit Stairs to West Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(301), ENTRANCE_DOOR(300), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to West Hand", "Spirit Block Puzzle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(302), ENTRANCE_DOOR(303), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Stairs to West Hand", "Spirit West Iron Knuckle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(303), ENTRANCE_DOOR(302), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit West Iron Knuckle", "Spirit Stairs to West Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(304), ENTRANCE_DOOR(305), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit West Iron Knuckle", "Spirit Exit to West Hand", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(305), ENTRANCE_DOOR(304), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Exit to West Hand", "Spirit West Iron Knuckle", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(306), ENTRANCE_DOOR(307), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Statue", "Spirit Shortcut", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(307), ENTRANCE_DOOR(306), SINGLE_SCENE_INFO(SCENE_SPIRIT_TEMPLE), "Spirit Shortcut", "Spirit Statue", ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_GROUP_DESERT_COLOSSUS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(308), ENTRANCE_DOOR(309), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well West Inner Room", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(309), ENTRANCE_DOOR(310), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well West Inner Room", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(310), ENTRANCE_DOOR(311), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well East Inner Room", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(311), ENTRANCE_DOOR(310), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well East Inner Room", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(312), ENTRANCE_DOOR(313), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well Coffins", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(313), ENTRANCE_DOOR(312), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well Coffins", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(314), ENTRANCE_DOOR(315), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well Dead Hand", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(315), ENTRANCE_DOOR(314), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well Dead Hand", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(316), ENTRANCE_DOOR(317), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well Pits", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(317), ENTRANCE_DOOR(316), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well Pits", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(318), ENTRANCE_DOOR(319), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well", "Bottom of the Well Cage", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(319), ENTRANCE_DOOR(318), SINGLE_SCENE_INFO(SCENE_BOTTOM_OF_THE_WELL), "Bottom of the Well Cage", "Bottom of the Well", ENTRANCE_GROUP_KAKARIKO, ENTRANCE_GROUP_KAKARIKO, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(320), ENTRANCE_DOOR(321), SINGLE_SCENE_INFO(SCENE_ICE_CAVERN), "Ice Cavern", "Ice Cavern Final Room", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(321), ENTRANCE_DOOR(320), SINGLE_SCENE_INFO(SCENE_ICE_CAVERN), "Ice Cavern Final Room", "Ice Cavern", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(322), ENTRANCE_DOOR(323), SINGLE_SCENE_INFO(SCENE_ICE_CAVERN), "Ice Cavern Final Room", "Ice Cavern Shortcut", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(323), ENTRANCE_DOOR(322), SINGLE_SCENE_INFO(SCENE_ICE_CAVERN), "Ice Cavern Shortcut", "Ice Cavern Final Room", ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_GROUP_ZORAS_FOUNTAIN, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(324), ENTRANCE_DOOR(325), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lobby", "GTG Maze", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(325), ENTRANCE_DOOR(324), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Maze", "GTG Lobby", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(326), ENTRANCE_DOOR(327), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lobby", "GTG Sand Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(327), ENTRANCE_DOOR(326), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Sand Room", "GTG Lobby", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(328), ENTRANCE_DOOR(329), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Sand Room", "GTG West Lower", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(329), ENTRANCE_DOOR(328), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG West Lower", "GTG Sand Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(330), ENTRANCE_DOOR(331), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG West Upper", "GTG Heavy Block", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(331), ENTRANCE_DOOR(330), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Heavy Block", "GTG West Upper", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(332), ENTRANCE_DOOR(333), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Heavy Block", "GTG Room Behind Heavy Block", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(333), ENTRANCE_DOOR(332), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Room Behind Heavy Block", "GTG Heavy Block", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(334), ENTRANCE_DOOR(335), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Heavy Block Upper", "GTG Eye Statue Upper", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(335), ENTRANCE_DOOR(334), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Eye Statue Upper", "GTG Heavy Block Upper", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(336), ENTRANCE_DOOR(337), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Eye Statue Upper", "GTG Above Maze", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(337), ENTRANCE_DOOR(336), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Above Maze", "GTG Eye Statue Upper", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(338), ENTRANCE_DOOR(339), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Eye Statue", "GTG Hammer Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(339), ENTRANCE_DOOR(338), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Hammer Room", "GTG Eye Statue", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(340), ENTRANCE_DOOR(341), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Hammer Room", "GTG Lava Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(341), ENTRANCE_DOOR(340), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lava Room", "GTG Hammer Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(342), ENTRANCE_DOOR(343), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lava Room", "GTG Underwater Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(343), ENTRANCE_DOOR(342), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Underwater Room", "GTG Lava Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(344), ENTRANCE_DOOR(345), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lava Room", "GTG Dinalfos", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(345), ENTRANCE_DOOR(344), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Dinalfos", "GTG Lava Room", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(346), ENTRANCE_DOOR(347), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Dinalfos", "GTG Lobby", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(347), ENTRANCE_DOOR(346), SINGLE_SCENE_INFO(SCENE_GERUDO_TRAINING_GROUND), "GTG Lobby", "GTG Dinalfos", ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_GROUP_GERUDO_FORTRESS, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(348), ENTRANCE_DOOR(349), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Entrance", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(349), ENTRANCE_DOOR(348), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(350), ENTRANCE_DOOR(351), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Spirit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(351), ENTRANCE_DOOR(350), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Spirit", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(352), ENTRANCE_DOOR(353), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Spirit", "GC Spirit Before Switch", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(353), ENTRANCE_DOOR(352), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Spirit Before Switch", "GC Spirit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(354), ENTRANCE_DOOR(355), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Spirit After Switch", "GC Spirit Final", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(355), ENTRANCE_DOOR(354), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Spirit Final", "GC Spirit After Switch", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(356), ENTRANCE_DOOR(357), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Light", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(357), ENTRANCE_DOOR(356), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Light", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(358), ENTRANCE_DOOR(359), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Light Triforce", "GC Light Boulders", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(359), ENTRANCE_DOOR(358), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Light Boulders", "GC Light Triforce", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(360), ENTRANCE_DOOR(361), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Light Boulders", "GC Light Final", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(361), ENTRANCE_DOOR(360), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Light Final", "GC Light Boulders", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(362), ENTRANCE_DOOR(363), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Fire Front", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(363), ENTRANCE_DOOR(362), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Fire Front", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(364), ENTRANCE_DOOR(365), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Fire Back", "GC Final", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(365), ENTRANCE_DOOR(364), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Final", "GC Fire Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(366), ENTRANCE_DOOR(367), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Shadow Front", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(367), ENTRANCE_DOOR(366), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Shadow Front", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(368), ENTRANCE_DOOR(369), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Shadow Back", "GC Shadow Trial", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(369), ENTRANCE_DOOR(368), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Shadow Trial", "GC Shadow Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(370), ENTRANCE_DOOR(371), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Water", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(371), ENTRANCE_DOOR(370), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Water", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(372), ENTRANCE_DOOR(373), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Water Back", "GC Water Block Front", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(373), ENTRANCE_DOOR(372), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Water Block Front", "GC Water Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(374), ENTRANCE_DOOR(375), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Water Block Back", "GC Water Final", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(375), ENTRANCE_DOOR(374), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Water Final", "GC Water Block Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(376), ENTRANCE_DOOR(377), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Lobby", "GC Forest", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(377), ENTRANCE_DOOR(376), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Forest", "GC Lobby", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(378), ENTRANCE_DOOR(379), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Forest Back", "GC Forest Wind Front", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(379), ENTRANCE_DOOR(378), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Forest Wind Front", "GC Forest Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(380), ENTRANCE_DOOR(381), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Forest Wind Back", "GC Forest Final", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(381), ENTRANCE_DOOR(380), SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "GC Forest Final", "GC Forest Wind Back", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(382), ENTRANCE_DOOR(383), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 1", "Ganon's Tower Floor 1", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(383), ENTRANCE_DOOR(382), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 1", "Ganon's Tower Stairs 1", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(384), ENTRANCE_DOOR(385), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 1", "Ganon's Tower Stairs 2", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(385), ENTRANCE_DOOR(384), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 2", "Ganon's Tower Floor 1", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(386), ENTRANCE_DOOR(387), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 2", "Ganon's Tower Floor 2", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(387), ENTRANCE_DOOR(386), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 2", "Ganon's Tower Stairs 2", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(388), ENTRANCE_DOOR(389), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 2", "Ganon's Tower Stairs 3", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(389), ENTRANCE_DOOR(388), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 3", "Ganon's Tower Floor 2", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(390), ENTRANCE_DOOR(391), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 3", "Ganon's Tower Floor 3", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(391), ENTRANCE_DOOR(390), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 3", "Ganon's Tower Floor 4", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(392), ENTRANCE_DOOR(393), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Floor 3", "Ganon's Tower Stairs 4", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, + { ENTRANCE_DOOR(393), ENTRANCE_DOOR(392), SINGLE_SCENE_INFO(SCENE_GANONS_TOWER), "Ganon's Tower Stairs 4", "Ganon's Tower Floor 3", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DOOR }, }; +// clang-format on // Check if Link is in the area and return that scene/entrance for tracking int16_t LinkIsInArea(const EntranceData* entrance) { diff --git a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h index 036630e90..a5d7bfd13 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_entrance_tracker.h @@ -41,6 +41,7 @@ typedef enum { ENTRANCE_TYPE_FORTRESS, ENTRANCE_TYPE_GROTTO, ENTRANCE_TYPE_DUNGEON, + ENTRANCE_TYPE_DOOR, ENTRANCE_TYPE_COUNT, } TrackerEntranceType; diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index ad92fede4..1e986c6b5 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -383,6 +383,7 @@ void Settings::CreateOptions() { OPT_CALLBACK(RSK_SHUFFLE_OVERWORLD_SPAWNS, { HandleStartingAgeUI(); }); + OPT_U8(RSK_SHUFFLE_DUNGEON_DOORS, "Dungeon Doors", {"Off", "On", "Mix"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleDungeonDoors"), mOptionDescriptions[RSK_SHUFFLE_DUNGEON_DOORS], WIDGET_CVAR_COMBOBOX, RO_SHUFFLE_DUNGEON_DOORS_OFF); OPT_BOOL(RSK_MIXED_ENTRANCE_POOLS, "Mixed Entrance Pools", CVAR_RANDOMIZER_SETTING("MixedEntrances"), mOptionDescriptions[RSK_MIXED_ENTRANCE_POOLS]); OPT_CALLBACK(RSK_MIXED_ENTRANCE_POOLS, { // Show mixed entrance pool options if mixed entrance pools are enabled, but only the ones that aren't off @@ -1786,10 +1787,11 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_GANONS_TOWER_ENTRANCE], &mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES], &mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES], &mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS], - &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], &mOptions[RSK_DECOUPLED_ENTRANCES], - &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES], - &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], &mOptions[RSK_MIX_INTERIOR_ENTRANCES], - &mOptions[RSK_MIX_THIEVES_HIDEOUT_ENTRANCES], &mOptions[RSK_MIX_GROTTO_ENTRANCES] }, + &mOptions[RSK_SHUFFLE_DUNGEON_DOORS], &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], + &mOptions[RSK_DECOUPLED_ENTRANCES], &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], + &mOptions[RSK_MIX_BOSS_ENTRANCES], &mOptions[RSK_MIX_OVERWORLD_ENTRANCES], + &mOptions[RSK_MIX_INTERIOR_ENTRANCES], &mOptions[RSK_MIX_THIEVES_HIDEOUT_ENTRANCES], + &mOptions[RSK_MIX_GROTTO_ENTRANCES] }, WidgetContainerType::SECTION); mOptionGroups[RSG_MENU_COLUMN_ENTRANCES] = OptionGroup::SubGroup("", { &mOptionGroups[RSG_MENU_SECTION_ENTRANCES] }, WidgetContainerType::COLUMN); @@ -2093,6 +2095,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS], &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS], + &mOptions[RSK_SHUFFLE_DUNGEON_DOORS], &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES], @@ -2514,7 +2517,8 @@ void Context::FinalizeSettings(const std::set& excludedLocation mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] || mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].IsNot(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF) || mOptions[RSK_SHUFFLE_THIEVES_HIDEOUT_ENTRANCES] || mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || - mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] || mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) { + mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] || mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS] || + mOptions[RSK_SHUFFLE_DUNGEON_DOORS]) { mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_ON); } else { mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF); diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp index e45656846..8e2fd590a 100644 --- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp +++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp @@ -1088,8 +1088,9 @@ void TimeSaverOnActorInitHandler(void* actorRef) { // So for now we're just going to set the flag before they get to the room the cutscene is in if (gPlayState->sceneNum == SCENE_FOREST_TEMPLE && actor->id == ACTOR_EN_DOOR && !Flags_GetSwitch(gPlayState, 0x1B) && !Flags_GetSwitch(gPlayState, 0x1C)) { - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) && - !CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) { + if ((IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_DOORS)) || + (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) && + !CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0))) { Flags_SetSwitch(gPlayState, 0x1B); } } diff --git a/soh/soh/z_scene_otr.cpp b/soh/soh/z_scene_otr.cpp index 2ac7b8e38..38e2f7fca 100644 --- a/soh/soh/z_scene_otr.cpp +++ b/soh/soh/z_scene_otr.cpp @@ -1,4 +1,6 @@ +#include "OTRGlobals.h" #include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" +#include "soh/Enhancements/randomizer/ShuffleDoors.h" #include "ResourceManagerHelpers.h" #include #include "soh/resource/type/Scene.h" @@ -35,10 +37,16 @@ #include "soh/resource/type/scenecommand/SetEchoSettings.h" #include "soh/resource/type/scenecommand/SetAlternateHeaders.h" +extern "C" { +#include "overlays/actors/ovl_En_Ru1/z_en_ru1.h" +#include "assets/objects/object_ru1/object_ru1.h" +} + extern Ship::IResource* OTRPlay_LoadFile(PlayState* play, const char* fileName); extern "C" s32 Object_Spawn(ObjectContext* objectCtx, s16 objectId); extern "C" RomFile sNaviMsgFiles[]; s32 OTRScene_ExecuteCommands(PlayState* play, SOH::Scene* scene); +extern "C" void func_8083C0E8(Player*, PlayState*); // used by doorsanity to prevent cutscene softlock bool Scene_CommandSpawnList(PlayState* play, SOH::ISceneCommand* cmd) { // SOH::SetStartPositionList* cmdStartPos = std::static_pointer_cast(cmd); @@ -488,7 +496,96 @@ extern "C" s32 OTRfunc_800973FC(PlayState* play, RoomContext* roomCtx) { } extern "C" s32 OTRfunc_8009728C(PlayState* play, RoomContext* roomCtx, s32 roomNum) { - u32 size; + if (play->sceneNum >= SCENE_DEKU_TREE && play->sceneNum <= SCENE_INSIDE_GANONS_CASTLE && play->state.frames != 0) { + Player* player = GET_PLAYER(play); + if (player != NULL) { + SPDLOG_WARN("DOOR {}\t{}\t({},{},{},{})", roomCtx->curRoom.num, roomNum, (s32)player->actor.world.pos.x, + (s32)player->actor.world.pos.y, (s32)player->actor.world.pos.z, (s32)player->actor.world.rot.y); + if (IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)) { + const Door* newDoor = OTRGlobals::Instance->gRandoContext->MapDoor( + play->sceneNum, roomCtx->curRoom.num, roomNum, (s32)player->actor.world.pos.x, + (s32)player->actor.world.pos.y, (s32)player->actor.world.pos.z); + if (newDoor != NULL) { + roomNum = newDoor->srcRoom; + player->actor.world.pos.x = newDoor->linkX; + player->actor.world.pos.y = newDoor->linkY; + player->actor.world.pos.z = newDoor->linkZ; + player->actor.world.rot.y = newDoor->rotY; + player->actor.shape.rot.y = newDoor->rotY; + player->skelAnime.movementFlags = 0; + player->skelAnime.endFrame = 0; + player->doorTimer = 0; + player->linearVelocity = 0; + player->unk_450 = player->actor.world.pos; + player->unk_45C = player->actor.world.pos; + Camera_InitPlayerSettings(&play->mainCamera, player); + func_8083C0E8(player, play); // prevent cutscene softlock + if (play->sceneNum != newDoor->scene) { + gSaveContext.respawnFlag = 1; + gSaveContext.subTimerSeconds = 1; + switch (newDoor->scene) { + case SCENE_DEKU_TREE: + play->nextEntranceIndex = ENTR_DEKU_TREE_ENTRANCE; + break; + case SCENE_DODONGOS_CAVERN: + play->nextEntranceIndex = ENTR_DODONGOS_CAVERN_ENTRANCE; + break; + case SCENE_JABU_JABU: + play->nextEntranceIndex = ENTR_JABU_JABU_ENTRANCE; + break; + case SCENE_FOREST_TEMPLE: + play->nextEntranceIndex = ENTR_FOREST_TEMPLE_ENTRANCE; + break; + case SCENE_FIRE_TEMPLE: + play->nextEntranceIndex = ENTR_FIRE_TEMPLE_ENTRANCE; + break; + case SCENE_WATER_TEMPLE: + play->nextEntranceIndex = ENTR_WATER_TEMPLE_ENTRANCE; + break; + case SCENE_SHADOW_TEMPLE: + play->nextEntranceIndex = ENTR_SHADOW_TEMPLE_ENTRANCE; + break; + case SCENE_SPIRIT_TEMPLE: + play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_ENTRANCE; + break; + case SCENE_BOTTOM_OF_THE_WELL: + play->nextEntranceIndex = ENTR_BOTTOM_OF_THE_WELL_ENTRANCE; + break; + case SCENE_ICE_CAVERN: + play->nextEntranceIndex = ENTR_ICE_CAVERN_ENTRANCE; + break; + case SCENE_GERUDO_TRAINING_GROUND: + play->nextEntranceIndex = ENTR_GERUDO_TRAINING_GROUND_ENTRANCE; + break; + case SCENE_INSIDE_GANONS_CASTLE: + play->nextEntranceIndex = ENTR_INSIDE_GANONS_CASTLE_ENTRANCE; + break; + case SCENE_GANONS_TOWER: + play->nextEntranceIndex = ENTR_GANONS_TOWER_0; + break; + } + gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = play->nextEntranceIndex; + gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex = roomNum; + gSaveContext.respawn[RESPAWN_MODE_DOWN].pos = player->actor.world.pos; + gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw = player->actor.world.rot.y; + gSaveContext.respawn[RESPAWN_MODE_DOWN].playerParams = 0xDFF; + gSaveContext.nextTransitionType = TRANS_TYPE_INSTANT; + play->transitionTrigger = TRANS_TRIGGER_START; + play->transitionType = TRANS_TYPE_INSTANT; + static HOOK_ID hookId; + hookId = REGISTER_VB_SHOULD(VB_INFLICT_VOID_DAMAGE, { + *should = false; + GameInteractor::Instance->UnregisterGameHookForID( + hookId); + }); + return 0; + } else if (play->interfaceCtx.mapRoomNum != roomNum) { + Map_InitRoomData(play, roomNum); + } + } + } + } + } if (roomCtx->status == 0) { roomCtx->prevRoom = roomCtx->curRoom; @@ -501,7 +598,7 @@ extern "C" s32 OTRfunc_8009728C(PlayState* play, RoomContext* roomCtx, s32 roomN if (roomNum >= play->numRooms) return 0; // UH OH - size = play->roomList[roomNum].vromEnd - play->roomList[roomNum].vromStart; + u32 size = play->roomList[roomNum].vromEnd - play->roomList[roomNum].vromStart; roomCtx->unk_34 = (void*)ALIGN16((uintptr_t)roomCtx->bufPtrs[roomCtx->unk_30] - ((size + 8) * roomCtx->unk_30 + 7)); diff --git a/soh/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/soh/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index a5c3882e3..4bda6705e 100644 --- a/soh/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/soh/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -558,14 +558,16 @@ void func_80997220(DoorShutter* this, PlayState* play) { Vec3f vec; Actor_WorldToActorCoords(&this->dyna.actor, &vec, &player->actor.world.pos); - this->dyna.actor.room = - play->transiActorCtx.list[(u16)this->dyna.actor.params >> 0xA].sides[(vec.z < 0.0f) ? 0 : 1].room; - if (room != this->dyna.actor.room) { - Room tempRoom = play->roomCtx.curRoom; + if (GameInteractor_Should(VB_DOOR_SHUTTER_HANDLE_ROOM_TRANSITION, true, this, &vec)) { + this->dyna.actor.room = + play->transiActorCtx.list[(u16)this->dyna.actor.params >> 0xA].sides[(vec.z < 0.0f) ? 0 : 1].room; + if (room != this->dyna.actor.room) { + Room tempRoom = play->roomCtx.curRoom; - play->roomCtx.curRoom = play->roomCtx.prevRoom; - play->roomCtx.prevRoom = tempRoom; - play->roomCtx.unk_30 ^= 1; + play->roomCtx.curRoom = play->roomCtx.prevRoom; + play->roomCtx.prevRoom = tempRoom; + play->roomCtx.unk_30 ^= 1; + } } func_80097534(play, &play->roomCtx); Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0x0EFF); @@ -573,8 +575,10 @@ void func_80997220(DoorShutter* this, PlayState* play) { this->unk_164 = 0; this->dyna.actor.velocity.y = 0.0f; if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) { - DoorShutter_SetupAction(this, func_80997568); - Player_SetCsActionWithHaltedActors(play, NULL, 2); + if (GameInteractor_Should(VB_DOOR_SHUTTER_WALK_THROUGH_CS, true, this)) { + DoorShutter_SetupAction(this, func_80997568); + Player_SetCsActionWithHaltedActors(play, NULL, 2); + } } } diff --git a/soh/src/overlays/actors/ovl_player_actor/z_player.c b/soh/src/overlays/actors/ovl_player_actor/z_player.c index 7ffe8af7f..fa544b250 100644 --- a/soh/src/overlays/actors/ovl_player_actor/z_player.c +++ b/soh/src/overlays/actors/ovl_player_actor/z_player.c @@ -5346,6 +5346,12 @@ s32 Player_ActionHandler_1(Player* this, PlayState* play) { } doorDirection = this->doorDirection; + + if (this->doorType != PLAYER_DOORTYPE_FAKE && + !GameInteractor_Should(VB_PLAYER_DOOR_SETUP, true, this, doorActor, doorDirection)) { + return 1; + } + sp78 = Math_CosS(doorActor->shape.rot.y); sp74 = Math_SinS(doorActor->shape.rot.y);