mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-23 06:35:33 -07:00
Merge 60b52746f3
into 824c203b97
This commit is contained in:
commit
4cd2e6b9b5
32 changed files with 4505 additions and 527 deletions
|
@ -1224,7 +1224,7 @@ int Fill() {
|
||||||
auto ctx = Rando::Context::GetInstance();
|
auto ctx = Rando::Context::GetInstance();
|
||||||
int retries = 0;
|
int retries = 0;
|
||||||
SPDLOG_INFO("Starting seed generation...");
|
SPDLOG_INFO("Starting seed generation...");
|
||||||
while (retries < 5) {
|
while (retries < 10) {
|
||||||
SPDLOG_INFO("Attempt {}...", retries + 1);
|
SPDLOG_INFO("Attempt {}...", retries + 1);
|
||||||
placementFailure = false;
|
placementFailure = false;
|
||||||
// showItemProgress = false;
|
// showItemProgress = false;
|
||||||
|
@ -1442,7 +1442,7 @@ int Fill() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
// Unsuccessful placement
|
// Unsuccessful placement
|
||||||
if (retries < 4) {
|
if (retries < 9) {
|
||||||
SPDLOG_DEBUG("Failed to generate a beatable seed. Retrying...");
|
SPDLOG_DEBUG("Failed to generate a beatable seed. Retrying...");
|
||||||
Regions::ResetAllLocations();
|
Regions::ResetAllLocations();
|
||||||
logic->Reset();
|
logic->Reset();
|
||||||
|
|
|
@ -49,8 +49,8 @@ bool GenerateRandomizer(std::set<RandomizerCheck> excludedLocations, std::set<Ra
|
||||||
ctx->ClearItemLocations();
|
ctx->ClearItemLocations();
|
||||||
int ret = Playthrough::Playthrough_Init(ctx->GetSeed(), excludedLocations, enabledTricks);
|
int ret = Playthrough::Playthrough_Init(ctx->GetSeed(), excludedLocations, enabledTricks);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
if (ret == -1) { // Failed to generate after 5 tries
|
if (ret == -1) { // Failed to generate after 10 tries
|
||||||
SPDLOG_ERROR("Failed to generate after 5 tries.");
|
SPDLOG_ERROR("Failed to generate after 10 tries.");
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
SPDLOG_ERROR("Error {} with fill.", ret);
|
SPDLOG_ERROR("Error {} with fill.", ret);
|
||||||
|
|
11
soh/soh/Enhancements/randomizer/ShuffleDoors.h
Normal file
11
soh/soh/Enhancements/randomizer/ShuffleDoors.h
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
struct Door {
|
||||||
|
s16 scene;
|
||||||
|
s8 srcRoom;
|
||||||
|
s8 dstRoom;
|
||||||
|
s16 linkX;
|
||||||
|
s16 linkY;
|
||||||
|
s16 linkZ;
|
||||||
|
s16 rotY;
|
||||||
|
};
|
|
@ -20,7 +20,6 @@ namespace Rando {
|
||||||
std::weak_ptr<Context> Context::mContext;
|
std::weak_ptr<Context> Context::mContext;
|
||||||
|
|
||||||
Context::Context() {
|
Context::Context() {
|
||||||
|
|
||||||
for (int i = 0; i < RC_MAX; i++) {
|
for (int i = 0; i < RC_MAX; i++) {
|
||||||
itemLocationTable[i] = ItemLocation(static_cast<RandomizerCheck>(i));
|
itemLocationTable[i] = ItemLocation(static_cast<RandomizerCheck>(i));
|
||||||
}
|
}
|
||||||
|
@ -83,6 +82,10 @@ std::shared_ptr<Context> Context::GetInstance() {
|
||||||
return mContext.lock();
|
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) {
|
Hint* Context::GetHint(const RandomizerHint hintKey) {
|
||||||
return &hintTable[hintKey];
|
return &hintTable[hintKey];
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include "hint.h"
|
#include "hint.h"
|
||||||
#include "fishsanity.h"
|
#include "fishsanity.h"
|
||||||
#include "trial.h"
|
#include "trial.h"
|
||||||
|
#include "ShuffleDoors.h"
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
@ -37,6 +38,8 @@ class Context {
|
||||||
static std::shared_ptr<Context> CreateInstance();
|
static std::shared_ptr<Context> CreateInstance();
|
||||||
static std::shared_ptr<Context> GetInstance();
|
static std::shared_ptr<Context> GetInstance();
|
||||||
void InitStaticData();
|
void InitStaticData();
|
||||||
|
const Door* MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ);
|
||||||
|
void ShuffleDoors();
|
||||||
Hint* GetHint(RandomizerHint hintKey);
|
Hint* GetHint(RandomizerHint hintKey);
|
||||||
void AddHint(const RandomizerHint hintId, const Hint hint);
|
void AddHint(const RandomizerHint hintId, const Hint hint);
|
||||||
ItemLocation* GetItemLocation(RandomizerCheck locKey);
|
ItemLocation* GetItemLocation(RandomizerCheck locKey);
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -31,6 +31,19 @@ enum class EntranceType {
|
||||||
GrottoGrave,
|
GrottoGrave,
|
||||||
GrottoGraveReverse,
|
GrottoGraveReverse,
|
||||||
Overworld,
|
Overworld,
|
||||||
|
DoorDekuTree,
|
||||||
|
DoorDodongosCavern,
|
||||||
|
DoorJabuJabu,
|
||||||
|
DoorForest,
|
||||||
|
DoorFire,
|
||||||
|
DoorWater,
|
||||||
|
DoorShadow,
|
||||||
|
DoorSpirit,
|
||||||
|
DoorBottomOfTheWell,
|
||||||
|
DoorIceCavern,
|
||||||
|
DoorGerudoTrainingGround,
|
||||||
|
DoorGanonsCastle,
|
||||||
|
DoorGanonsTower,
|
||||||
Extra,
|
Extra,
|
||||||
Mixed,
|
Mixed,
|
||||||
All,
|
All,
|
||||||
|
@ -126,6 +139,7 @@ class EntranceShuffler {
|
||||||
void SetNoRandomEntrances(bool noRandomEntrances);
|
void SetNoRandomEntrances(bool noRandomEntrances);
|
||||||
int ShuffleAllEntrances();
|
int ShuffleAllEntrances();
|
||||||
void CreateEntranceOverrides();
|
void CreateEntranceOverrides();
|
||||||
|
const Door* MapDoor(s16 scene, s8 srcRoom, s8 dstRoom, s16 linkX, s16 linkY, s16 linkZ);
|
||||||
void UnshuffleAllEntrances();
|
void UnshuffleAllEntrances();
|
||||||
void ParseJson(nlohmann::json spoilerFileJson);
|
void ParseJson(nlohmann::json spoilerFileJson);
|
||||||
|
|
||||||
|
@ -139,19 +153,21 @@ class EntranceShuffler {
|
||||||
EntrancePools oneWayEntrancePools, EntrancePools oneWayTargetEntrancePools);
|
EntrancePools oneWayEntrancePools, EntrancePools oneWayTargetEntrancePools);
|
||||||
bool ReplaceEntrance(Entrance* entrance, Entrance* target, std::vector<EntrancePair>& rollbacks);
|
bool ReplaceEntrance(Entrance* entrance, Entrance* target, std::vector<EntrancePair>& rollbacks);
|
||||||
void ShuffleEntrancePool(std::vector<Entrance*>& entrancePool, std::vector<Entrance*>& targetEntrances,
|
void ShuffleEntrancePool(std::vector<Entrance*>& entrancePool, std::vector<Entrance*>& targetEntrances,
|
||||||
int retryCount = 20);
|
int retryCount = 50);
|
||||||
bool ShuffleEntrances(std::vector<Entrance*>& entrances, std::vector<Entrance*>& targetEntrances,
|
bool ShuffleEntrances(std::vector<Entrance*>& entrances, std::vector<Entrance*>& targetEntrances,
|
||||||
std::vector<EntrancePair>& rollbacks);
|
std::vector<EntrancePair>& rollbacks);
|
||||||
bool mNoRandomEntrances;
|
bool mNoRandomEntrances;
|
||||||
int mTotalRandomizableEntrances = 0;
|
int mTotalRandomizableEntrances = 0;
|
||||||
int mCurNumRandomizedEntrances = 0;
|
int mCurNumRandomizedEntrances = 0;
|
||||||
bool mEntranceShuffleFailure = false;
|
bool mEntranceShuffleFailure = false;
|
||||||
|
std::vector<int16_t> mDoorTable;
|
||||||
};
|
};
|
||||||
} // namespace Rando
|
} // namespace Rando
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
EntranceOverride* Randomizer_GetEntranceOverrides();
|
EntranceOverride* Randomizer_GetEntranceOverrides();
|
||||||
|
void Randomizer_SetDoorOverride(int, int);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -199,11 +199,11 @@ class Region {
|
||||||
bool pastAdult = logic->IsAdult;
|
bool pastAdult = logic->IsAdult;
|
||||||
bool pastChild = logic->IsChild;
|
bool pastChild = logic->IsChild;
|
||||||
|
|
||||||
// set age access as this areas ages
|
// set age access as this area's ages
|
||||||
logic->IsChild = Child();
|
logic->IsChild = Child();
|
||||||
logic->IsAdult = Adult();
|
logic->IsAdult = Adult();
|
||||||
|
|
||||||
// heck condition as well as having at least child or adult access
|
// check condition as well as having at least child or adult access
|
||||||
bool hereVal = condition() && (logic->IsAdult || logic->IsChild);
|
bool hereVal = condition() && (logic->IsAdult || logic->IsChild);
|
||||||
|
|
||||||
// set back age variables
|
// set back age variables
|
||||||
|
|
|
@ -57,7 +57,8 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_INNER_ROOMS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_WEST_INNER_ROOM, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_EAST_INNER_ROOM, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||||
});
|
});
|
||||||
|
@ -95,14 +96,20 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return true;}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//If the player can voidwarp into one of these rooms they will need splitting up, and Fake walls will need specifying into middle and the rest moved to perimeter
|
areaTable[RR_BOTTOM_OF_THE_WELL_WEST_INNER_ROOM] = Region("Bottom of the Well West Inner Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_INNER_ROOMS] = Region("Bottom of the Well Inner Rooms", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_BOTTOM_OF_THE_WELL_EAST_INNER_ROOM] = Region("Bottom of the Well East Inner Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -209,7 +216,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild;}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild;}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH, []{return Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH, []{return Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2) && logic->CanUseProjectile();}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_FLOORMASTER_ROOM, []{return logic->IsChild && logic->CanUseProjectile();}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, []{return logic->IsChild && logic->LoweredWaterInsideBotw;}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, []{return logic->IsChild && logic->LoweredWaterInsideBotw;}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||||
|
@ -235,12 +242,17 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_FLOORMASTER_ROOM] = Region("Bottom of the Well MQ Locked Cage", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->IsChild;}),
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE] = Region("Bottom of the Well MQ Locked Cage", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE] = Region("Bottom of the Well MQ Locked Cage", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->OpenedMiddleHoleMQBotw, []{return logic->HasExplosives();}),
|
EventAccess(&logic->OpenedMiddleHoleMQBotw, []{return logic->HasExplosives();}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_FLOORMASTER_ROOM, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM] = Region("Bottom of the Well MQ Dead Hand Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM] = Region("Bottom of the Well MQ Dead Hand Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -260,8 +272,33 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Region("Bottom of the Well MQ Middle", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Region("Bottom of the Well MQ Middle", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, true),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, true),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
//If a relevant trick causes you to be able to warp into here without going through PERIMETER, a new eventAccess will be needed for lowering the gates with ZL
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM, []{return logic->OpenedMiddleHoleMQBotw;}),
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_WEST_INNER_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM] = Region("Bottom of the Well East Inner Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
//This location technically involves an invisible platform, but it's intended to do lensless in vanilla and is clearly signposted by pots.
|
//This location technically involves an invisible platform, but it's intended to do lensless in vanilla and is clearly signposted by pots.
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, true),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, true),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_WEST_INNER_ROOM] = Region("Bottom of the Well West Inner Room", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
//The enemies in this room are invisible and crowd around the player, being awkward to deal with blind unless you already know how.
|
//The enemies in this room are invisible and crowd around the player, being awkward to deal with blind unless you already know how.
|
||||||
//the right wall is safe, and can be followed to get behind the grave which you can then pull easily assuming you can tank invisible keese
|
//the right wall is safe, and can be followed to get behind the grave which you can then pull easily assuming you can tank invisible keese
|
||||||
//Using a deku nut however stuns everything easily. and if you have a melee weapon you can kill the skull through the grave then grab the drop
|
//Using a deku nut however stuns everything easily. and if you have a melee weapon you can kill the skull through the grave then grab the drop
|
||||||
|
@ -270,18 +307,9 @@ void RegionTable_Init_BottomOfTheWell() {
|
||||||
//An MQ lens trick is recommended here, and a review of this room for OHKO logic what that is added is advised.
|
//An MQ lens trick is recommended here, and a review of this room for OHKO logic what that is added is advised.
|
||||||
//In the meantime I assume damage taken or the easy answer (nuts)
|
//In the meantime I assume damage taken or the easy answer (nuts)
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, logic->OpenedWestRoomMQBotw && (logic->TakeDamage() || logic->CanUse(RG_NUTS)) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, logic->OpenedWestRoomMQBotw && (logic->TakeDamage() || logic->CanUse(RG_NUTS)) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
//If a relevant trick causes you to be able to warp into here without going through PERIMETER, a new eventAccess will be needed for lowering the gates with ZL
|
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return true;}),
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM, []{return logic->OpenedMiddleHoleMQBotw;}),
|
|
||||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT] = Region("Bottom of the Well MQ Basement", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT] = Region("Bottom of the Well MQ Basement", "Bottom of the Well", {RA_BOTTOM_OF_THE_WELL}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
|
|
@ -225,7 +225,7 @@ void RegionTable_Init_DekuTree() {
|
||||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
||||||
//Will need canAvoid logic with enemy shuffle
|
//Will need canAvoid logic with enemy shuffle
|
||||||
Entrance(RR_DEKU_TREE_MQ_3F, []{return true;}),
|
Entrance(RR_DEKU_TREE_MQ_3F, []{return true;}),
|
||||||
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource();});}),
|
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource() || (logic->MQDeku3FSwitch && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW)));});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_3F] = Region("Deku Tree MQ 3F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_DEKU_TREE_MQ_3F] = Region("Deku Tree MQ 3F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -233,7 +233,15 @@ void RegionTable_Init_DekuTree() {
|
||||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||||
EventAccess(&logic->BrokeDeku1FWeb, []{return true;}),
|
EventAccess(&logic->BrokeDeku1FWeb, []{return true;}),
|
||||||
}, {
|
EventAccess(&logic->MQDeku3FSwitch, []{return true;}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
|
||||||
|
Entrance(RR_DEKU_TREE_MQ_SLINGSHOT_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_DEKU_TREE_MQ_SLINGSHOT_ROOM] = Region("Deku Tree MQ 3F", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//Implies CanKillEnemy(RE_GOHMA_LARVA)
|
//Implies CanKillEnemy(RE_GOHMA_LARVA)
|
||||||
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)),
|
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)),
|
||||||
|
@ -246,11 +254,8 @@ void RegionTable_Init_DekuTree() {
|
||||||
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()),
|
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()),
|
||||||
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()),
|
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
// Exits
|
||||||
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
|
Entrance(RR_DEKU_TREE_MQ_3F, []{return logic->CanKillEnemy(RE_DEKU_BABA);}),
|
||||||
//Assumes RR_DEKU_TREE_MQ_2F access
|
|
||||||
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_3F, []{return logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW);});}),
|
|
||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", "Deku Tree", {RA_DEKU_TREE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -307,7 +312,7 @@ void RegionTable_Init_DekuTree() {
|
||||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();});}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();});}),
|
||||||
//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there
|
//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there
|
||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);});}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);});}),
|
||||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS);}),
|
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -297,7 +297,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->ClearMQDCUpperLobbyRocks;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->ClearMQDCUpperLobbyRocks;}),
|
||||||
//Bunny hood jump + jumpslash can also make it directly from the raising platform
|
//Bunny hood jump + jumpslash can also make it directly from the raising platform
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DC_MQ_CHILD_BOMBS) && logic->CanJumpslashExceptHammer() && logic->TakeDamage());}), //RANDOTODO is this possible with equip swapped hammer?
|
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DC_MQ_CHILD_BOMBS) && logic->CanJumpslashExceptHammer() && logic->TakeDamage()));}), //RANDOTODO is this possible with equip swapped hammer?
|
||||||
//it is possible to use bunny hood speed, hovers and a jumpslash to go between here and the other bridge (included with TORCH_ROOM_LOWER), but this would be a trick
|
//it is possible to use bunny hood speed, hovers and a jumpslash to go between here and the other bridge (included with TORCH_ROOM_LOWER), but this would be a trick
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -316,6 +316,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick
|
//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick
|
||||||
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));});}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));});}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}),
|
||||||
});
|
});
|
||||||
|
@ -383,7 +384,7 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSourceWithTorch();}),//torch checks here need strength 0 with sticks when that is implemented
|
Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSourceWithTorch();}),//torch checks here need strength 0 with sticks when that is implemented
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();});}), //Includes an implied CanPass(RE_BIG_SKULLTULA)
|
Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();});}), //Includes an implied CanPass(RE_BIG_SKULLTULA)
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return ((logic->IsAdult /*or bunny hood jump*/) && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return ((logic->IsAdult /*or bunny hood jump*/) && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET);}), //Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here
|
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && (logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET));}), //Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM] = Region("Dodongos Cavern MQ Torch Puzzle Lower", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM] = Region("Dodongos Cavern MQ Torch Puzzle Lower", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -455,7 +456,6 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanStunDeku()),
|
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, logic->CanBreakPots()),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, logic->CanBreakPots()),
|
||||||
|
@ -463,9 +463,18 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CanHitEyeTargets();}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CanHitEyeTargets();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB] = Region("Dodongos Cavern MQ Lower Right Side Scrub", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, logic->CanStunDeku()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS] = Region("Dodongos Cavern MQ Lower Lizalfos", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS] = Region("Dodongos Cavern MQ Lower Lizalfos", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, true),
|
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, true),
|
||||||
|
@ -520,10 +529,10 @@ void RegionTable_Init_DodongosCavern() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||||
//using pots to get past the fire is in default logic. if stregnth 0 gets added, this will need to be:
|
//using pots to get past the fire is in default logic. if strength 0 gets added, this will need to be:
|
||||||
//stregnth 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy)
|
//strength 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy)
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
||||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->IsAdult;}),
|
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && logic->IsAdult;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE] = Region("Dodongos Cavern MQ Back Behind Fire", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE] = Region("Dodongos Cavern MQ Back Behind Fire", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
|
|
@ -207,6 +207,7 @@ void RegionTable_Init_FireTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Region("Fire Temple Boulder Maze Upper", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Region("Fire Temple Boulder Maze Upper", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -336,6 +337,7 @@ void RegionTable_Init_FireTemple() {
|
||||||
{
|
{
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_WEST_PEAK, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Region("Fire Temple Above Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Region("Fire Temple Above Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
@ -476,9 +478,6 @@ void RegionTable_Init_FireTemple() {
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Region("Fire Temple MQ Big Lava Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Region("Fire Temple MQ Big Lava Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//I'm currently assuming the oversight version of RT_FIRE_MQ_BK_CHEST for the fire timer logic
|
//I'm currently assuming the oversight version of RT_FIRE_MQ_BK_CHEST for the fire timer logic
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, logic->FireTimer() >= 40 && logic->HasFireSource() && logic->HasExplosives() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST)))),
|
|
||||||
//implies CanGetEnemyDrop(RE_GOLD_SKULLTULA)
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, logic->FireTimer() >= 20 && logic->CanUse(RG_MEGATON_HAMMER)),
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, logic->CanBreakPots()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, logic->CanBreakPots()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, logic->FireTimer() >= 40 && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST) && ((logic->IsAdult && logic->CanBreakPots()) || logic->CanUse(RG_BOOMERANG))))),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, logic->FireTimer() >= 40 && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST) && ((logic->IsAdult && logic->CanBreakPots()) || logic->CanUse(RG_BOOMERANG))))),
|
||||||
|
@ -486,10 +485,29 @@ void RegionTable_Init_FireTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
// Fewer tunic requirements ends here
|
// Fewer tunic requirements ends here
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->FireTimer() >= 20;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->FireTimer() >= 20;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_NORTH_GORON, []{return logic->FireTimer() >= 20;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_SOUTH_GORON, []{return logic->FireTimer() >= 40 && logic->HasFireSource() && logic->HasExplosives() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_MQ_BLOCKED_CHEST)));}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, []{return logic->HasFireSource() && ((logic->CanUse(RG_FAIRY_BOW) && logic->FireTimer() >= 25) || (ctx->GetTrickOption(RT_FIRE_MQ_BK_CHEST) && logic->FireTimer() >= 50)) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_SOT)));}),
|
Entrance(RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, []{return logic->HasFireSource() && ((logic->CanUse(RG_FAIRY_BOW) && logic->FireTimer() >= 25) || (ctx->GetTrickOption(RT_FIRE_MQ_BK_CHEST) && logic->FireTimer() >= 50)) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_SOT)));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_NORTH_GORON] = Region("Fire Temple MQ Big Lava Room North Goron", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
//implies CanGetEnemyDrop(RE_GOLD_SKULLTULA)
|
||||||
|
LOCATION(RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_SOUTH_GORON] = Region("Fire Temple MQ Big Lava Room South Goron", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, logic->HasFireSource()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM] = Region("Fire Temple MQ Torch Firewall Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM] = Region("Fire Temple MQ Torch Firewall Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_HOOKSHOT);}),
|
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
@ -523,9 +541,6 @@ void RegionTable_Init_FireTemple() {
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Region("Fire Temple MQ Lower Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Region("Fire Temple MQ Lower Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
|
||||||
//Check handled on both floors
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives() && ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM)),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}),
|
||||||
|
@ -533,6 +548,8 @@ void RegionTable_Init_FireTemple() {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return logic->CanJumpslash();});}),
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return logic->CanJumpslash();});}),
|
||||||
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON_DOOR, []{return logic->HasExplosives() && ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -548,6 +565,21 @@ void RegionTable_Init_FireTemple() {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->IsAdult && ((ctx->GetTrickOption(RT_FIRE_MQ_MAZE_HOVERS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_FIRE_MQ_MAZE_JUMP));}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->IsAdult && ((ctx->GetTrickOption(RT_FIRE_MQ_MAZE_HOVERS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_FIRE_MQ_MAZE_JUMP));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON_DOOR] = Region("Fire Temple MQ Lower Maze Goron", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
//This exists to join upper/lower access in a way compatible with door shuffle
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON] = Region("Fire Temple MQ Lower Maze Goron", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON_DOOR, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Region("Fire Temple MQ Upper Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Region("Fire Temple MQ Upper Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||||
|
@ -556,7 +588,7 @@ void RegionTable_Init_FireTemple() {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->CanJumpslash() || logic->HasExplosives();});}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->CanJumpslash() || logic->HasExplosives();});}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->HasExplosives();}),
|
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->HasExplosives();}),
|
||||||
//Implies RR_FIRE_TEMPLE_MQ_LOWER_MAZE access
|
//Implies RR_FIRE_TEMPLE_MQ_LOWER_MAZE access
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)));}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_LOWER, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)));}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3) && logic->CanUse(RG_GORON_TUNIC);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3) && logic->CanUse(RG_GORON_TUNIC);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -568,11 +600,11 @@ void RegionTable_Init_FireTemple() {
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||||
//Assumes maze access
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||||
|
//Assumes maze access
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON_DOOR, []{return logic->HasExplosives();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT] = Region("Fire Temple MQ Maze Shortcut", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT] = Region("Fire Temple MQ Maze Shortcut", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -599,17 +631,26 @@ void RegionTable_Init_FireTemple() {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return logic->OpenedUpperFireShortcut;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return logic->OpenedUpperFireShortcut;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_LOWER] = Region("Fire Temple MQ Burning Block Climb Lower", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB] = Region("Fire Temple MQ Burning Block Climb", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
//Events
|
||||||
//EventAccess(&WallFairy, []{return logic->CanUse(RG_HOOKSHOT);}),
|
//EventAccess(&WallFairy, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
}, {
|
}, {}, {
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_UPPER, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_UPPER] = Region("Fire Temple MQ Burning Block Climb Upper", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_LOWER, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK] = Region("Fire Temple MQ Burning Block", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//There's definitely ways to do this hammerless, but with one points on it's a trick
|
//There's definitely ways to do this hammerless, but with one points on it's a trick
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_MEGATON_HAMMER)),
|
LOCATION(RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_MEGATON_HAMMER)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_UPPER, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return logic->TakeDamage();}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return logic->TakeDamage();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -624,6 +665,8 @@ void RegionTable_Init_FireTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return false;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE, []{return false;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return logic->TakeDamage();}),
|
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return logic->TakeDamage();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -643,45 +686,74 @@ void RegionTable_Init_FireTemple() {
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return true;}),
|
||||||
//Child has issues navigating the higher points of this room without an equip swapped hookshot
|
//Child has issues navigating the higher points of this room without an equip swapped hookshot
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return Here(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT));}) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT));}),
|
Entrance(RR_FIRE_TEMPLE_MQ_CORRIDOR, []{return Here(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT));}) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT));}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE] = Region("Fire Temple MQ High Torch Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_CORRIDOR] = Region("Fire Temple Corridor", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE] = Region("Fire Temple MQ South Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE] = Region("Fire Temple MQ South Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, logic->HasExplosives()),
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, logic->CanBreakPots()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HitFireTemplePlatform;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HitFireTemplePlatform;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_CORRIDOR, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||||
//Hover boots get there via the platforms
|
//Hover boots get there via the platforms
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return logic->OpenedFireMQFireMazeDoor;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS] = Region("Fire Temple MQ Fire Maze Platforms", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS] = Region("Fire Temple MQ Fire Maze Platforms", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->HitFireTemplePlatform, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
EventAccess(&logic->HitFireTemplePlatform, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||||
EventAccess(&logic->OpenedFireMQFireMazeDoor, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
|
||||||
}, {}, {
|
}, {}, {
|
||||||
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_UPPER, []{return true;}),
|
||||||
//trick to get to RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE with hovers + taking damage is plausible
|
//trick to get to RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE with hovers + taking damage is plausible
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_UPPER] = Region("Fire Temple MQ Fire Maze Inner Upper", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->OpenedFireMQFireMazeDoor, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
}, {}, {
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER, []{return false;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER] = Region("Fire Temple MQ Fire Maze Inner Lower", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, logic->HasExplosives()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return logic->OpenedFireMQFireMazeDoor;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE] = Region("Fire Temple MQ North Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE] = Region("Fire Temple MQ North Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanUse(RG_BOOMERANG)),
|
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, logic->CanUse(RG_BOOMERANG)),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, logic->CanBreakPots()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_SIDE_ROOM, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return logic->IsAdult || ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return logic->IsAdult || ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||||
});
|
});
|
||||||
|
@ -689,6 +761,15 @@ void RegionTable_Init_FireTemple() {
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE] = Region("Fire Temple MQ West Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE] = Region("Fire Temple MQ West Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return true;}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER, []{return logic->OpenedFireMQFireMazeDoor;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_SIDE_ROOM] = Region("Fire Temple MQ Fire Maze Side Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//this area exists for the pots in case we void warp to the top of fire somehow, because there's no way to get back the way we came
|
//this area exists for the pots in case we void warp to the top of fire somehow, because there's no way to get back the way we came
|
||||||
|
@ -698,6 +779,7 @@ void RegionTable_Init_FireTemple() {
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, logic->CanBreakPots()),
|
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, logic->CanBreakPots()),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanUse(RG_BOOMERANG)),
|
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanUse(RG_BOOMERANG)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return true;}),
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -705,8 +787,15 @@ void RegionTable_Init_FireTemple() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, logic->CanKillEnemy(RE_FLARE_DANCER)),
|
LOCATION(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, logic->CanKillEnemy(RE_FLARE_DANCER)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanKillEnemy(RE_FLARE_DANCER) && logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_CLIMB, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_SCARECROW_CLIMB] = Region("Fire Temple MQ Scarecrow Climb", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return true;}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM] = Region("Fire Temple MQ Scarecrow Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM] = Region("Fire Temple MQ Scarecrow Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -715,22 +804,30 @@ void RegionTable_Init_FireTemple() {
|
||||||
//Child basically needs the scarecrow or a bunny hood though due to a worse ledge grab.
|
//Child basically needs the scarecrow or a bunny hood though due to a worse ledge grab.
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, logic->IsAdult || logic->CanUse(RG_SCARECROW)),
|
LOCATION(RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, logic->IsAdult || logic->CanUse(RG_SCARECROW)),
|
||||||
}, {
|
}, {
|
||||||
//The dropdown here is unusual in that it hits 1 of 3 locations: RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS and the section of RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS with the hammer switch
|
//Exits
|
||||||
|
//The dropdown here is unusual in that it hits 1 of 2 locations: RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER, RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_UPPER, and RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_UPPER with the hammer switch
|
||||||
//Using this dropdown is in N64 logic elsewhere, but not here, probably because it requires good foreknowlege to determine where to land
|
//Using this dropdown is in N64 logic elsewhere, but not here, probably because it requires good foreknowlege to determine where to land
|
||||||
//This would be a logical method to reach the hammer switch without hookshot, but it practically requires access to the area that switch unlocks already. It could also be first child access to PLATFORMS if tricks ever enable that
|
//This would be a logical method to reach the hammer switch without hookshot, but it practically requires access to the area that switch unlocks already. It could also be first child access to PLATFORMS if tricks ever enable that
|
||||||
//If a practical use for this drop is found, it should be made a trick
|
//If a practical use for this drop is found, it should be made a trick
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_CLIMB, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return Here(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && logic->SmallKeys(RR_FIRE_TEMPLE, 5);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return Here(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && logic->SmallKeys(RR_FIRE_TEMPLE, 5);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//The peg knocked down from here could have logical implications for child in the fire maze if tricks to gain height like bomb jumps exist
|
//The peg knocked down from here could have logical implications for child in the fire maze if tricks to gain height like bomb jumps exist
|
||||||
areaTable[RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS] = Region("Fire Temple MQ Collapsed Stairs", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS] = Region("Fire Temple MQ Collapsed Stairs", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
// TODO split into upper/lower, need adult to climb stairs
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_HOOKSHOT) && Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE] = Region("Fire Temple MQ Above Fire Maze", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//If someone manages to make a trick to get here from fire maze, this needs to be in a separate room as the door back is barred
|
LOCATION(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, logic->CanUse(RG_HOOKSHOT)),
|
|
||||||
}, {
|
}, {
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->CanUse(RG_HOOKSHOT) && Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
//Exits
|
||||||
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||||
|
Entrance(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
|
@ -305,18 +305,25 @@ void RegionTable_Init_ForestTemple() {
|
||||||
|
|
||||||
#pragma region MQ
|
#pragma region MQ
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_LOBBY] = Region("Forest Temple MQ Lobby", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_FIRST_ROOM] = Region("Forest Temple MQ First Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA, ED_SHORT_JUMPSLASH, false) || logic->CanUse(RG_HOVER_BOOTS)),
|
LOCATION(RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA, ED_SHORT_JUMPSLASH, false) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||||
//Implies CanPassEnemy(RE_BIG_SKULLTULA)
|
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, logic->HookshotOrBoomerang()),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1) && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_SOUTH_CORRIDOR, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Region("Forest Temple MQ Central Region", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_SOUTH_CORRIDOR] = Region("Forest Temple MQ South Corridor", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, logic->HookshotOrBoomerang()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_FIRST_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) && logic->SmallKeys(RR_FOREST_TEMPLE, 1);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_LOBBY] = Region("Forest Temple MQ Lobby", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->ForestTempleMeg, []{return logic->ForestTempleJoelle && logic->ForestTempleBeth && logic->ForestTempleAmy && logic->CanKillEnemy(RE_MEG);}),
|
EventAccess(&logic->ForestTempleMeg, []{return logic->ForestTempleJoelle && logic->ForestTempleBeth && logic->ForestTempleAmy && logic->CanKillEnemy(RE_MEG);}),
|
||||||
}, {
|
}, {
|
||||||
|
@ -329,14 +336,22 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, logic->CanBreakPots()),
|
LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, []{return logic->IsChild || logic->CanUse(RG_SONG_OF_TIME);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_SOUTH_CORRIDOR, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1);}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_NORTH_CORRIDOR, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_EAST_CORRIDOR, []{return false;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
|
||||||
//implies the other 3 poes
|
//implies the other 3 poes
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestTempleMeg;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestTempleMeg;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_NORTH_CORRIDOR] = Region("Forest Temple MQ North Corridor", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, []{return logic->IsChild || logic->CanUse(RG_SONG_OF_TIME);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FairyPot, []{return true;}),
|
EventAccess(&logic->FairyPot, []{return true;}),
|
||||||
|
@ -348,7 +363,13 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestClearBelowBowChest && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NORTH_CORRIDOR, []{return logic->ForestClearBelowBowChest && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME));}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR] = Region("Forest Temple MQ West Corridor", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return Here(RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return Here(RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE] = Region("Forest Temple MQ Lower Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE] = Region("Forest Temple MQ Lower Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -361,11 +382,11 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
LOCATION(RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
Entrance(RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE, []{return logic->HasItem(RG_GORONS_BRACELET) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE, []{return logic->HasItem(RG_GORONS_BRACELET) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||||
//Assumes RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE access
|
//Assumes RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE access
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return logic->ForestCanTwistHallway && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE, []{return logic->ForestCanTwistHallway && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE] = Region("Forest Temple MQ Middle Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE] = Region("Forest Temple MQ Middle Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -377,21 +398,18 @@ void RegionTable_Init_ForestTemple() {
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return true;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||||
//Hammer cannot recoil from here, but can make the jump forwards with a hammer jumpslash as adult
|
//Hammer cannot recoil from here, but can make the jump forwards with a hammer jumpslash as adult
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return logic->ForestCanTwistHallway && logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE, []{return logic->ForestCanTwistHallway && logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE] = Region("Forest Temple MQ After Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE] = Region("Forest Temple MQ After Block Puzzle", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Locations
|
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
|
||||||
}, {
|
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return logic->ForestCanTwistHallway && logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return logic->ForestCanTwistHallway && logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
||||||
//!QUANTUM LOGIC!
|
//!QUANTUM LOGIC!
|
||||||
//As there is no way in default logic to reach the other possible key use without going through RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, this is logically safe for now
|
//As there is no way in default logic to reach the other possible key use without going through RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, this is logically safe for now
|
||||||
//Breaks if there's any other way to RR_FOREST_TEMPLE_MQ_FALLING_ROOM than going through the eye targets in RR_FOREST_TEMPLE_MQ_CENTRAL_AREA
|
//Breaks if there's any other way to RR_FOREST_TEMPLE_MQ_FALLING_ROOM than going through the eye targets in RR_FOREST_TEMPLE_MQ_LOBBY
|
||||||
//Requires a bow/sling ammo source once ammo logic is done, to avoid edge cases.
|
//Requires a bow/sling ammo source once ammo logic is done, to avoid edge cases.
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2) && Here(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && logic->SmallKeys(RR_FOREST_TEMPLE, 2) && Here(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY] = Region("Forest Temple MQ Straight Hallway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY] = Region("Forest Temple MQ Straight Hallway", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -407,17 +425,34 @@ void RegionTable_Init_ForestTemple() {
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return Here(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return Here(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Region("Forest Temple MQ Outdoor Ledge", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE] = Region("Forest Temple MQ Indoor Ledge", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
EventAccess(&logic->ForestCanTwistHallway, []{return logic->CanHitSwitch();}),
|
EventAccess(&logic->ForestCanTwistHallway, []{return logic->CanHitSwitch();}),
|
||||||
}, {
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return logic->ForestCanTwistHallway;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Region("Forest Temple MQ Outdoor Ledge", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, logic->CanKillEnemy(RE_REDEAD)),
|
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, true),
|
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, true),
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, true),
|
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, true),
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, true),
|
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, true),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return true;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_REDEAD_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_REDEAD_ROOM] = Region("Forest Temple MQ Redead Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, logic->CanKillEnemy(RE_REDEAD)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return logic->CanKillEnemy(RE_REDEAD);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Region("Forest Temple MQ NW Outdoors", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Region("Forest Temple MQ NW Outdoors", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -434,10 +469,16 @@ void RegionTable_Init_ForestTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT))) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT))) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_FIRE_ARROWS);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, []{return logic->CanUse(RG_FIRE_ARROWS);}), // TODO event access with north passage?
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//The well only coniders the eye target here because the eye target is a temp flag, making it unwieldy to use as an EventAccess to make it it's own room
|
areaTable[RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE] = Region("Forest Temple MQ North Passage", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->HasFireSourceWithTorch();}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
//The well only considers the eye target here because the eye target is a temp flag, making it unwieldy to use as an EventAccess to make it it's own room
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS] = Region("Forest Temple MQ NE Outdoors", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS] = Region("Forest Temple MQ NE Outdoors", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||||
|
@ -453,6 +494,7 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanHitEyeTargets()),
|
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanHitEyeTargets()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanUse(RG_SONG_OF_TIME)));}),
|
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanUse(RG_SONG_OF_TIME)));}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
@ -465,7 +507,7 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, ((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_FOREST_DOORFRAME))) && logic->CanJumpslash() && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang() || (logic->CanStandingShield() && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MASTER_SWORD) || (logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD)))))),
|
LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, ((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_FOREST_DOORFRAME))) && logic->CanJumpslash() && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang() || (logic->CanStandingShield() && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MASTER_SWORD) || (logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD)))))),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->HasFireSourceWithTorch();}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE, []{return true;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}),
|
||||||
//N64 logic doesn't check damage but I always take some so I'm adding it
|
//N64 logic doesn't check damage but I always take some so I'm adding it
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->TakeDamage();}),
|
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->TakeDamage();}),
|
||||||
|
@ -561,10 +603,16 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleAmy;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_EAST_CORRIDOR, []{return logic->ForestTempleAmy;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return true;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_FOREST_TEMPLE_MQ_EAST_CORRIDOR] = Region("Forest Temple MQ East Corridor", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_AMY_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT] = Region("Forest Temple MQ Basement", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT] = Region("Forest Temple MQ Basement", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//Implies CanHitSwitch()
|
//Implies CanHitSwitch()
|
||||||
|
@ -574,7 +622,7 @@ void RegionTable_Init_ForestTemple() {
|
||||||
LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, true),
|
LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, true),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleMeg;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return logic->ForestTempleMeg;}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage();}),
|
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage();}),
|
||||||
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return logic->ForestOpenBossCorridor;}),
|
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return logic->ForestOpenBossCorridor;}),
|
||||||
});
|
});
|
||||||
|
|
|
@ -17,18 +17,23 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
|
|
||||||
#pragma region Vanilla
|
#pragma region Vanilla
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_LOBBY] = Region("Ganon's Castle Lobby", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_CASTLE_LOBBY] = Region("Ganon's Castle Lobby", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_MAIN] = Region("Ganon's Castle Main", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHEIK_HINT_GC, true),
|
LOCATION(RC_SHEIK_HINT_GC, true),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_LOBBY, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_FIRE_TRIAL, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_FIRE_TRIAL_MAIN_ROOM, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_WATER_TRIAL, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL_MAIN_ROOM, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL, []{return true;}),
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, []{return true;}),
|
||||||
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);}),
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);}),
|
||||||
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return (logic->ForestTrialClear || ctx->GetTrial(TK_FOREST_TRIAL)->IsSkipped()) &&
|
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return (logic->ForestTrialClear || ctx->GetTrial(TK_FOREST_TRIAL)->IsSkipped()) &&
|
||||||
(logic->FireTrialClear || ctx->GetTrial(TK_FIRE_TRIAL)->IsSkipped()) &&
|
(logic->FireTrialClear || ctx->GetTrial(TK_FIRE_TRIAL)->IsSkipped()) &&
|
||||||
(logic->WaterTrialClear || ctx->GetTrial(TK_WATER_TRIAL)->IsSkipped()) &&
|
(logic->WaterTrialClear || ctx->GetTrial(TK_WATER_TRIAL)->IsSkipped()) &&
|
||||||
|
@ -57,74 +62,162 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, true),
|
LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, true),
|
||||||
}, {});
|
}, {});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL] = Region("Ganon's Castle Forest Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM] = Region("Ganon's Castle Forest Trial Wolfos Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Events
|
|
||||||
EventAccess(&logic->ForestTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE));}),
|
|
||||||
}, {
|
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanKillEnemy(RE_WOLFOS)),
|
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanKillEnemy(RE_WOLFOS)),
|
||||||
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))),
|
}, {
|
||||||
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))),
|
//Exits
|
||||||
}, {});
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Region("Ganon's Castle Fire Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM] = Region("Ganon's Castle Forest Trial Beamos Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Forest Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->FireTrialClear, []{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LIGHT_ARROWS) && logic->CanUse(RG_LONGSHOT);}),
|
EventAccess(&logic->ForestTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)),
|
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)),
|
LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)),
|
}, {
|
||||||
}, {});
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Region("Ganon's Castle Water Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle Fire Trial Main Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_FIRE_TRIAL_FINAL_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Fire Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->FireTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
|
//There's no way back across the lava without glitches
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_FIRE_TRIAL_MAIN_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM] = Region("Ganon's Castle Water Trial Blue Fire Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
||||||
EventAccess(&logic->FairyPot, []{return logic->FairyPot || (logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD));}),
|
|
||||||
EventAccess(&logic->WaterTrialClear, []{return logic->BlueFire() && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_LIGHT_ARROWS);}),
|
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, true),
|
||||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, true),
|
||||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_1, logic->CanBreakPots() && logic->BlueFire() && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
|
|
||||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_2, logic->CanBreakPots() && logic->BlueFire() && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
|
|
||||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_3, logic->CanBreakPots() && logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD)),
|
|
||||||
}, {});
|
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL] = Region("Ganon's Castle Shadow Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
|
||||||
EventAccess(&logic->ShadowTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))));}),
|
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM, []{return logic->BlueFire();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle Water Trial Block Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->FairyPot, []{return logic->FairyPot || (logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD));}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_3, logic->CanBreakPots() && logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_WATER_TRIAL_FINAL_ROOM, []{return logic->IsAdult && logic->BlueFire() && logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_WATER_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Water Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->WaterTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL_MAIN_ROOM] = Region("Ganon's Castle Shadow Trial Main Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, logic->CanBreakPots() && logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))))),
|
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, logic->CanBreakPots() && logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))))),
|
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
||||||
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_DINS_FIRE)))) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH) || logic->CanUse(RG_BOOMERANG))),
|
||||||
}, {});
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL_FINAL_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER) && ((logic->CanUse(RG_FIRE_ARROWS) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))) || (logic->CanUse(RG_LONGSHOT) && (logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_DINS_FIRE) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))))));}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Region("Ganon's Castle Spirit Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Shadow Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->NutPot, []{return logic->NutPot || (((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))));}),
|
EventAccess(&logic->ShadowTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_MIRROR_SHIELD) || ctx->GetOption(RSK_SUNLIGHT_ARROWS)) && logic->CanUse(RG_BOMBCHU_5) && ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT));}),
|
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && (logic->CanJumpslashExceptHammer() || logic->CanUse(RG_BOMBCHU_5))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
LOCATION(RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))),
|
}, {
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))),
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL_MAIN_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM] = Region("Ganon's Castle Spirit Trial Beamos Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true),
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true),
|
||||||
}, {});
|
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
|
||||||
EventAccess(&logic->LightTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH, []{return ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH] = Region("Ganon's Castle Spirit Trial Before Switch", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH] = Region("Ganon's Castle Spirit Trial After Switch", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, logic->CanHitSwitch()),
|
||||||
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_FINAL_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)));}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Spirit Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
|
EventAccess(&logic->NutPot, []{return true;}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM] = Region("Ganon's Castle Light Trial Chests Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, true),
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, true),
|
||||||
|
@ -133,11 +226,39 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, true),
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, true),
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, true),
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_GANONS_CASTLE, 1)),
|
}, {
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, logic->CanBreakPots() && logic->SmallKeys(RR_GANONS_CASTLE, 2)),
|
//Exits
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
Entrance(RR_GANONS_CASTLE_MAIN, []{return true;}),
|
||||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 1);}),
|
||||||
}, {});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM] = Region("Ganon's Castle Light Trial Triforce Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM] = Region("Ganon's Castle Light Trial Boulder Room", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_FINAL_ROOM, []{return logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle Light Trial Final Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->LightTrialClear, []{return (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, logic->CanBreakPots() && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||||
|
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, logic->CanBreakPots() && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}),
|
||||||
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
@ -242,7 +363,10 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
}, {});
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM] = Region("Ganon's Castle MQ Water Trial Geyser Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM] = Region("Ganon's Castle MQ Water Trial Geyser Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
|
@ -426,7 +550,10 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, logic->CanBreakPots()),
|
||||||
}, {});
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}),
|
||||||
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
@ -436,13 +563,25 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsVanilla();}),
|
Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsVanilla();}),
|
||||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return ctx->GetDungeon(GANONS_CASTLE)->IsMQ();}),
|
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return ctx->GetDungeon(GANONS_CASTLE)->IsMQ();}),
|
||||||
|
Entrance(RR_GANONS_TOWER_STAIRS_1, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_TOWER_STAIRS_1] = Region("Ganon's Tower Stairs 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return true;}),
|
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_TOWER_FLOOR_1] = Region("Ganon's Tower Floor 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GANONS_TOWER_FLOOR_1] = Region("Ganon's Tower Floor 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_1, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
||||||
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_2, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_TOWER_STAIRS_2] = Region("Ganon's Tower Stairs 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_TOWER_FLOOR_2] = Region("Ganon's Tower Floor 2", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_TOWER_FLOOR_2] = Region("Ganon's Tower Floor 2", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -450,14 +589,26 @@ void RegionTable_Init_GanonsCastle() {
|
||||||
LOCATION(RC_GANONS_TOWER_BOSS_KEY_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
LOCATION(RC_GANONS_TOWER_BOSS_KEY_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_2, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||||
Entrance(RR_GANONS_TOWER_FLOOR_3, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_3, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_TOWER_STAIRS_3] = Region("Ganon's Tower Stairs 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_TOWER_FLOOR_3, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_TOWER_FLOOR_3] = Region("Ganon's Tower Floor 3", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GANONS_TOWER_FLOOR_3] = Region("Ganon's Tower Floor 3", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_3, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
||||||
Entrance(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
Entrance(RR_GANONS_TOWER_STAIRS_4, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GANONS_TOWER_STAIRS_4] = Region("Ganon's Tower Stairs 1", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GANONS_TOWER_FLOOR_3, []{return true;}),
|
||||||
|
Entrance(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
|
|
@ -20,19 +20,29 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, logic->CanHitEyeTargets()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, logic->CanHitEyeTargets()),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, logic->CanHitEyeTargets()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, logic->CanHitEyeTargets()),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true)),
|
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true),
|
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_SAND_ROOM, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_DINALFOS, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GERUDO_TRAINING_GROUND_SAND_ROOM] = Region("Gerudo Training Ground Sand Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LEFT_SIDE, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GERUDO_TRAINING_GROUND_LEFT_SIDE] = Region("Gerudo Training Ground Left Side", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_SAND_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE] = Region("Gerudo Training Ground Central Maze", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE] = Region("Gerudo Training Ground Central Maze", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3) && (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3) && (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||||
|
@ -42,6 +52,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9)),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9);}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -56,13 +67,30 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_DINALFOS] = Region("Gerudo Training Dinalfos", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true)),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true),
|
||||||
|
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_DINALFOS, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_DINALFOS, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_HOOKSHOT));}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_HOOKSHOT));}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_UNDERWATER, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GERUDO_TRAINING_GROUND_UNDERWATER] = Region("Gerudo Training Dinalfos", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BRONZE_SCALE)) && logic->WaterTimer() >= 24),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM] = Region("Gerudo Training Ground Hammer Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM] = Region("Gerudo Training Ground Hammer Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -83,12 +111,19 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Locations
|
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
|
||||||
}, {
|
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_ABOVE_MAZE, []{return logic->CanUse(RG_FAIRY_BOW);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_GERUDO_TRAINING_GROUND_ABOVE_MAZE] = Region("Gerudo Training Ground Above Eye", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM] = Region("Gerudo Training Ground Heavy Block Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM] = Region("Gerudo Training Ground Heavy Block Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -96,6 +131,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 4, true)),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 4, true)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_LEFT_SIDE, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||||
});
|
});
|
||||||
|
@ -106,7 +142,9 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, logic->CanJumpslashExceptHammer()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, logic->CanJumpslashExceptHammer()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, logic->CanJumpslashExceptHammer()),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
}, {});
|
}, {
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return true;}), // TODO fix logic when block not pushed yet
|
||||||
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
@ -125,19 +163,19 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM, []{return ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_BY_LOBBY, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}),
|
//It's possible to use the torch in hidden room of maze with flame storage to light these
|
||||||
//It's possible to use the torch in RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM with flame storage to light these
|
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->HasFireSource();});}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->HasFireSource();});}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT));});}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->CanHitEyeTargets();});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM] = Region("Gerudo Training Ground MQ Maze Hidden Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_BY_LOBBY] = Region("Gerudo Training Ground MQ Maze Hidden Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, true),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK] = Region("Gerudo Training Ground MQ Maze First Lock", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK] = Region("Gerudo Training Ground MQ Maze First Lock", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -185,6 +223,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->IsAdult && Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && (ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->IsAdult && Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && (ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||||
});
|
});
|
||||||
|
@ -193,7 +232,9 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
//Locations
|
//Locations
|
||||||
//implies logic->CanKillEnemy(RE_SPIKE)
|
//implies logic->CanKillEnemy(RE_SPIKE)
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_FREEZARD)),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_FREEZARD)),
|
||||||
}, {});
|
}, {
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return true;}), // TODO fix logic where block not pushed
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
@ -241,6 +282,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
//the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it
|
//the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOOKSHOT)) || ((logic->CanUse(RG_FIRE_ARROWS) && logic->GTGPlatformSilverRupees) && logic->CanUse(RG_HOVER_BOOTS));}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOOKSHOT)) || ((logic->CanUse(RG_FIRE_ARROWS) && logic->GTGPlatformSilverRupees) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return logic->MQGTGRightSideSwitch && logic->CanUse(RG_LONGSHOT);}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return logic->MQGTGRightSideSwitch && logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
|
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
|
||||||
|
@ -322,6 +364,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
||||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))),
|
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
||||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)));});}),
|
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)));});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ void RegionTable_Init_IceCavern() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}),
|
Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}),
|
||||||
|
Entrance(RR_ICE_CAVERN_FINAL_ROOM, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MAIN] = Region("Ice Cavern", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MAIN] = Region("Ice Cavern", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -32,8 +33,6 @@ void RegionTable_Init_IceCavern() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire() && logic->IsAdult),
|
LOCATION(RC_ICE_CAVERN_MAP_CHEST, logic->BlueFire() && logic->IsAdult),
|
||||||
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->BlueFire()),
|
LOCATION(RC_ICE_CAVERN_COMPASS_CHEST, logic->BlueFire()),
|
||||||
LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS)),
|
|
||||||
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->BlueFire() && logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult),
|
|
||||||
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->BlueFire()),
|
LOCATION(RC_ICE_CAVERN_FREESTANDING_POH, logic->BlueFire()),
|
||||||
LOCATION(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, logic->HookshotOrBoomerang()),
|
LOCATION(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, logic->HookshotOrBoomerang()),
|
||||||
LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, logic->BlueFire() && logic->HookshotOrBoomerang()),
|
LOCATION(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, logic->BlueFire() && logic->HookshotOrBoomerang()),
|
||||||
|
@ -53,7 +52,21 @@ void RegionTable_Init_IceCavern() {
|
||||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||||
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))),
|
||||||
}, {});
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_ICE_CAVERN_BEGINNING, []{return true;}),
|
||||||
|
Entrance(RR_ICE_CAVERN_FINAL_ROOM, []{return logic->BlueFire();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_ICE_CAVERN_FINAL_ROOM] = Region("Ice Cavern", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_ICE_CAVERN_IRON_BOOTS_CHEST, logic->CanKillEnemy(RE_WOLFOS)),
|
||||||
|
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->CanKillEnemy(RE_WOLFOS) && logic->IsAdult),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_FINAL_ROOM, []{return logic->CanKillEnemy(RE_WOLFOS);});}),
|
||||||
|
Entrance(RR_ICE_CAVERN_BEGINNING, []{return logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_FINAL_ROOM, []{return logic->CanKillEnemy(RE_WOLFOS);});}),
|
||||||
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
@ -67,6 +80,7 @@ void RegionTable_Init_IceCavern() {
|
||||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||||
//It is in logic to use a pot to hit the toggle switch here.
|
//It is in logic to use a pot to hit the toggle switch here.
|
||||||
Entrance(RR_ICE_CAVERN_MQ_HUB, []{return true;}),
|
Entrance(RR_ICE_CAVERN_MQ_HUB, []{return true;}),
|
||||||
|
Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -93,7 +107,7 @@ void RegionTable_Init_IceCavern() {
|
||||||
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", "Ice Cavern", {RA_ICE_CAVERN}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
//Child can fit between the stalagmites on the left hand side
|
//Child can fit between the stalagmites on the left hand side
|
||||||
EventAccess(&logic->BlueFireAccess, []{return logic->IsChild || logic->CanJumpslash() || logic->HasExplosives();}),
|
EventAccess(&logic->BlueFireAccess, []{return logic->BlueFireAccess || logic->IsChild || logic->CanJumpslash() || logic->HasExplosives();}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_ICE_CAVERN_MQ_MAP_CHEST, logic->BlueFire() && Here(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return logic->CanHitSwitch();})),
|
LOCATION(RC_ICE_CAVERN_MQ_MAP_CHEST, logic->BlueFire() && Here(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return logic->CanHitSwitch();})),
|
||||||
|
|
|
@ -19,53 +19,75 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_ROOM, []{return logic->CanUseProjectile();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms
|
//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MAIN] = Region("Jabu Jabus Belly Main", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_LIFT_ROOM] = Region("Jabu Jabus Belly Lift Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Events
|
|
||||||
EventAccess(&logic->JabuWestTentacle, []{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
|
||||||
}, {
|
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()),
|
LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()),
|
||||||
//We can kill the Stingers with ruto
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_HOLES_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->JabuWestTentacle;}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->JabuWestTentacle;}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->JabuEastTentacle;}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->JabuNorthTentacle;}),
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS));}),
|
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
|
areaTable[RR_JABU_JABUS_BELLY_HOLES_ROOM] = Region("Jabu Jabus Belly Holes Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_B1_NORTH] = Region("Jabu Jabus Belly B1 North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
EventAccess(&logic->JabuRutoIn1F, []{return (bool)ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS);}),
|
||||||
//Events
|
|
||||||
EventAccess(&logic->JabuRutoIn1F, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
|
||||||
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK));}),
|
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, logic->HookshotOrBoomerang()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->HookshotOrBoomerang()),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->HookshotOrBoomerang()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->JabuNorthTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_B1_CUBE, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_B1_CUBE] = Region("Jabu Jabus Belly B1 Cube", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->FairyPot, []{return logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK));}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false)))),
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false)))),
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false)))),
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false)))),
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false)))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_HOLES_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH] = Region("Jabu Jabus Belly Water Switch Room North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
EventAccess(&logic->JabuRutoIn1F, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE));}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
//there's tricks for getting here with bunny-jumps or just side-hops
|
//there's tricks for getting here with bunny-jumps or just side-hops
|
||||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_HOLES_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH] = Region("Jabu Jabus Belly Water Switch Room South", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_ROOM, []{return logic->CanUseProjectile();}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -80,55 +102,76 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, logic->CanBreakPots()),
|
LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH] = Region("Jabu Jabus Belly Water Switch Room South", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_FORKED_CORRIDOR] = Region("Jabu Jabus Belly Forked Corridor", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Locations
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
|
||||||
}, {
|
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
Entrance(RR_JABU_JABUS_BELLY_HOLES_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_HOVER_BOOTS);}),
|
Entrance(RR_JABU_JABUS_BELLY_FORK_WEST, []{return logic->JabuRutoIn1F;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}),
|
Entrance(RR_JABU_JABUS_BELLY_FORK_NORTH_WEST, []{return logic->JabuWestTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORK_NORTH, []{return logic->JabuEastTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORK_NORTH_EAST, []{return logic->JabuWestTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORK_EAST, []{return logic->JabuRutoIn1F;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Region("Jabu Jabus Belly Compass Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_FORK_WEST] = Region("Jabu Jabus Belly Fork West", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
EventAccess(&logic->JabuWestTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||||
|
}, {
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_FORK_NORTH_WEST] = Region("Jabu Jabus Belly Fork North West", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//ruto could theoretically clear this room, but it's hard because of the timer and she doesn't appear with you when you respawn after failing, which would force a savewarp
|
//ruto could theoretically clear this room, but it's hard because of the timer and she doesn't appear with you when you respawn after failing, which would force a savewarp
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanKillEnemy(RE_SHABOM)),
|
LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanKillEnemy(RE_SHABOM)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return Here(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->CanKillEnemy(RE_SHABOM);});}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return Here(RR_JABU_JABUS_BELLY_FORK_NORTH_WEST, []{return logic->CanKillEnemy(RE_SHABOM);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Region("Jabu Jabus Belly Blue Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_FORK_NORTH] = Region("Jabu Jabus Belly Fork North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
|
||||||
EventAccess(&logic->JabuEastTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
|
||||||
}, {}, {
|
|
||||||
//Exits
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuEastTentacle;}),
|
|
||||||
});
|
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Region("Jabu Jabus Belly Green Tentacle", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->JabuNorthTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
EventAccess(&logic->JabuNorthTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
//implied logic->CanKillEnemy(RE_BARI)
|
//implied logic->CanKillEnemy(RE_BARI)
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuNorthTentacle;}),
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return logic->JabuNorthTentacle;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE] = Region("Jabu Jabus Belly Bigocto Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_FORK_NORTH_EAST] = Region("Jabu Jabus Belly Fork North East", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->JabuEastTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return logic->JabuEastTentacle;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_FORK_EAST] = Region("Jabu Jabus Belly Fork East", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//We can kill the Stingers with ruto
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) ? logic->CanKillEnemy(RE_STINGER, ED_CLOSE, true, 4) : logic->JabuRutoIn1F),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE] = Region("Jabu Jabus Belly Bigocto Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//Only adult can get the token without assistance
|
//Only adult can get the token without assistance
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)),
|
||||||
//You can get the LOWER skull token from here as aduly with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang
|
//You can get the LOWER skull token from here as adult with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_HOLES_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, []{return logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO, []{return logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO] = Region("Jabu Jabus Belly Bigocto", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, []{return logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -142,6 +185,12 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, logic->CanBreakPots()),
|
LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_CUBES_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_CUBES_ROOM] = Region("Jabu Jabus Belly Cubes Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, []{return logic->CanUse(RG_BOOMERANG);}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, []{return logic->CanUse(RG_BOOMERANG);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -150,7 +199,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
EventAccess(&logic->LoweredJabuPath, []{return true;}),
|
EventAccess(&logic->LoweredJabuPath, []{return true;}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_CUBES_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -158,7 +208,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)),
|
LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_LIFT_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))));}),
|
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -200,7 +250,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE))));}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE))));}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->MQJabuHolesRoomDoor;}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->MQJabuHolesRoomDoor;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return logic->LoweredJabuPath || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->MQJabuLiftRoomCow);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return logic->LoweredJabuPath || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->MQJabuLiftRoomCow);}),
|
||||||
//If opening RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM by lowering the geyser as 1 age is to let the other through is relevant, it needs an eventAccess
|
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER, []{return logic->MQJabuWaterSwitchLiftAccess;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE] = Region("Jabu Jabus Belly MQ Underwater Alcove", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE] = Region("Jabu Jabus Belly MQ Underwater Alcove", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -235,10 +285,12 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return logic->JabuNorthTentacle;}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return logic->JabuNorthTentacle;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->JabuWestTentacle && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_BIGOCTO, []{return logic->JabuWestTentacle && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM] = Region("Jabu Jabus Belly MQ Water Switch Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM] = Region("Jabu Jabus Belly MQ Water Switch Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
EventAccess(&logic->MQJabuWaterSwitchLiftAccess, []{return logic->MQJabuWaterSwitchLiftAccess || logic->CanKillEnemy(RE_LIZALFOS);}),
|
||||||
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, true),
|
||||||
//Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines.
|
//Implies logic->CanKillEnemy(RE_LIKE_LIKE) && logic->CanKillEnemy(RE_STINGER). Without swim, jump from the song of time block to the vines.
|
||||||
|
@ -250,15 +302,48 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
//without swim, jump from rang chest to the other side
|
//without swim, jump from rang chest to the other side
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER, []{return Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//Includes Like Like room
|
areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER] = Region("Jabu Jabus Belly MQ Water Switch Room Past Geyser", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR] = Region("Jabu Jabus Belly MQ Forked Corridor", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->MQJabuWaterSwitchLiftAccess;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR] = Region("Jabu Jabus Belly MQ Forked Corridor", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}),
|
||||||
|
//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORK_WEST, []{return logic->JabuEastTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORK_NORTH, []{return logic->BlastOrSmash();}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST, []{return logic->JabuWestTentacle;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORK_EAST, []{return Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) && logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanUse(RG_STICKS);}) || Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->HasFireSource();});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_WEST] = Region("Jabu Jabus Belly MQ Fork West", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->JabuNorthTentacle, []{return Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->BlastOrSmash();}) && logic->CanUse(RG_BOOMERANG);}),
|
EventAccess(&logic->JabuWestTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
});
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST] = Region("Jabu Jabus Belly MQ Fork North West", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, logic->HasExplosives() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
});
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_NORTH] = Region("Jabu Jabus Belly MQ Fork North", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->JabuNorthTentacle, []{return logic->JabuNorthTentacle || logic->CanUse(RG_BOOMERANG);}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||||
|
});
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST] = Region("Jabu Jabus Belly MQ Fork North East", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//Implies CanKillEnemy(RE_LIKE_LIKE)
|
//Implies CanKillEnemy(RE_LIKE_LIKE)
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||||
|
@ -269,18 +354,12 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||||
//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing
|
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG);}) && (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanUse(RG_STICKS);}) || Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->HasFireSource();}));}),
|
|
||||||
});
|
});
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_FORK_EAST] = Region("Jabu Jabus Belly MQ Fork East", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS] = Region("Jabu Jabus Belly MQ West Forked Rooms", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->JabuWestTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
EventAccess(&logic->JabuEastTentacle, []{return logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||||
}, {
|
}, {}, {
|
||||||
//Locations
|
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, Here(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return logic->HasExplosives();}) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
|
||||||
}, {
|
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||||
});
|
});
|
||||||
|
@ -289,7 +368,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, //firstly, we can just use FAs to clear the web and then longshot the skull
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, //firstly, we can just use FAs to clear the web and then longshot the skull
|
||||||
logic->CanUse(RG_FIRE_ARROWS) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) ||
|
logic->CanUse(RG_FIRE_ARROWS) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) ||
|
||||||
//Otherwise, we we have to cross the gap and kill the skull.
|
//Otherwise, we have to cross the gap and kill the skull.
|
||||||
(logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) &&
|
(logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) &&
|
||||||
//We can cheese the gap with hovers
|
//We can cheese the gap with hovers
|
||||||
((logic->CanUse(RG_HOVER_BOOTS) ||
|
((logic->CanUse(RG_HOVER_BOOTS) ||
|
||||||
|
@ -305,21 +384,36 @@ void RegionTable_Init_JabuJabusBelly() {
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->JabuNorthTentacle || logic->TakeDamage()) && logic->HasItem(RG_BRONZE_SCALE);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->JabuNorthTentacle || logic->TakeDamage()) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_PAST_OCTO] = Region("Jabu Jabus Belly MQ Past Octo", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_BIGOCTO] = Region("Jabu Jabus Belly MQ Big Octo", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Events
|
// Need Ruto here
|
||||||
//if a hover up to the path is added, this will want it's own room
|
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}),
|
||||||
EventAccess(&logic->LoweredJabuPath, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);}),
|
||||||
}, {
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly MQ Above Big Octo", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_CUBES_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_BIGOCTO, []{return logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_CUBES_ROOM] = Region("Jabu Jabus Belly MQ Cubes Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, logic->CanCutShrubs()),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_WIGGLERS_GRASS, logic->CanCutShrubs()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()),
|
||||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()),
|
LOCATION(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()),
|
||||||
}, {
|
}, {
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO, []{return true;}),
|
||||||
|
Entrance(RR_JABU_JABUS_BELLY_MQ_ABOVE_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_JABU_JABUS_BELLY_MQ_ABOVE_LIFT_ROOM] = Region("Jabu Jabus Belly MQ Cubes Room", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->LoweredJabuPath, []{return true;}),
|
||||||
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
Entrance(RR_JABU_JABUS_BELLY_MQ_CUBES_ROOM, []{return true;}),
|
||||||
//you take both fall damage and tentacle damage, unless the tentacle is down. need better damage logic
|
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
|
||||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE] = Region("Jabu Jabus Belly MQ Lift Room East Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE] = Region("Jabu Jabus Belly MQ Lift Room East Ledge", "Jabu Jabus Belly", {RA_JABU_JABUS_BELLY}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
|
|
@ -16,110 +16,233 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
|
|
||||||
#pragma region Vanilla
|
#pragma region Vanilla
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SHADOW_TEMPLE_BEGINNING] = Region("Shadow Temple Beginning", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WHISPERING_WALLS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_WHISPERING_WALLS] = Region("Shadow Temple Whispering Walls", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->NutPot, []{return true;}),
|
EventAccess(&logic->NutPot, []{return true;}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST, logic->CanJumpslashExceptHammer()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_BEGINNING, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MAP_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_DEAD_HAND, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MAP_ROOM] = Region("Shadow Temple Map Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_SHADOW_TEMPLE_WHISPERING_WALLS, []{return true;}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SHADOW_TEMPLE_DEAD_HAND] = Region("Shadow Temple Dead Hand", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Events
|
//Locations
|
||||||
EventAccess(&logic->FairyPot, []{return true;}), //This fairy pot is only on 3DS
|
LOCATION(RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WHISPERING_WALLS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_COMPASS_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_SPINNING_BLADES, []{return true;}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return logic->HasExplosives() && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2);}),
|
Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return logic->HasExplosives() && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2);}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return false;}),
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_COMPASS_ROOM] = Region("Shadow Temple Compass Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_SPINNING_BLADES] = Region("Shadow Temple Spinning Blades", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_DOCK, []{return false;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Region("Shadow Temple Huge Pit", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Region("Shadow Temple Huge Pit", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, logic->CanJumpslashExceptHammer()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanJumpslashExceptHammer()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, true),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, true),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FREESTANDING_KEY, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->CanUse(RG_BOMBCHU_5)))),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, logic->CanJumpslashExceptHammer()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->CanUse(RG_HOVER_BOOTS))),
|
LOCATION(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, logic->CanBreakPots() && (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, logic->CanBreakPots() && (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, logic->CanBreakPots() && (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, logic->CanBreakPots() && (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)),
|
||||||
//We cannot repeat the MQ invisible blades trick for these hearts as the like-like does not respawn if the room is cleared
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
LOCATION(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return false;}), // TODO hookshot up?
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES] = Region("Shadow Temple Invisible Spinning Blades", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanJumpslashExceptHammer()),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, logic->CanJumpslashExceptHammer()),
|
||||||
|
//We cannot repeat the MQ invisible blades trick for these hearts as the like-like does not respawn if the room is cleared
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_SKULL_JAR, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_INVISIBLE_SPIKES] = Region("Shadow Temple Invisible Spinning Blades", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_SKULL_JAR, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}),
|
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Region("Shadow Temple Wind Tunnel", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_SKULL_JAR] = Region("Shadow Temple Skull Jar", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_FREESTANDING_KEY, logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->CanUse(RG_BOMBCHU_5))),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
// TODO upper/lower logic
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Region("Shadow Temple Wind Tunnel", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_INVISIBLE_SPIKES, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_ROOM_TO_BOAT, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM] = Region("Shadow Temple Wind Tunnel Side Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_CHEST, true),
|
LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_CHEST, true),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_ROOM_TO_BOAT] = Region("Shadow Temple Dock", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, logic->CanKillEnemy(RE_GIBDO, ED_CLOSE, true, 2)),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, logic->CanKillEnemy(RE_GIBDO, ED_CLOSE, true, 2)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, logic->HasExplosives()),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, logic->HasExplosives()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, logic->CanUse(RG_LONGSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return logic->CanKillEnemy(RE_GIBDO, ED_CLOSE, true, 2);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_DOCK, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_DOCK] = Region("Shadow Temple Dock", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, logic->CanUse(RG_LONGSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return logic->CanJumpslashExceptHammer() && logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}),
|
Entrance(RR_SHADOW_TEMPLE_ROOM_TO_BOAT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_SPINNING_BLADES, []{return logic->HasItem(RG_GORONS_BRACELET);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return ((logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Region("Shadow Temple Beyond Boat", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Region("Shadow Temple Beyond Boat", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, logic->CanUse(RG_DINS_FIRE)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_DINS_FIRE)),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, logic->CanKillEnemy(RE_FLOORMASTER)),
|
|
||||||
//RANDOTODO check if child can reach the token
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, logic->IsAdult && logic->CanAttack()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, logic->CanBreakPots() && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5)))),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, logic->CanUse(RG_DISTANT_SCARECROW)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->CanUse(RG_SONG_OF_TIME) || (logic->CanUse(RG_DISTANT_SCARECROW) && logic->CanUse(RG_HOVER_BOOTS))),
|
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->CanUse(RG_SONG_OF_TIME) || (logic->CanUse(RG_DISTANT_SCARECROW) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5) && logic->CanUse(RG_HOVER_BOOTS) && logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY);})
|
Entrance(RR_SHADOW_TEMPLE_MAZE, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_PRE_BOSS_ROOM, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MAZE] = Region("Shadow Temple Maze", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_X_CROSS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_THREE_SKULL_JARS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_WOODEN_SPIKES, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_X_CROSS] = Region("Shadow Temple X-Cross", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, logic->CanKillEnemy(RE_FLOORMASTER)),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, logic->CanBreakPots()),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MAZE, []{return logic->CanKillEnemy(RE_FLOORMASTER);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_THREE_SKULL_JARS] = Region("Shadow Temple Three Skull Jars", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
//RANDOTODO check if child can reach the token
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, logic->IsAdult && logic->CanAttack()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MAZE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_WOODEN_SPIKES] = Region("Shadow Temple Wooden Spikes", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, logic->CanUse(RG_DINS_FIRE)),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_DINS_FIRE)),
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MAZE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_PRE_BOSS_ROOM] = Region("Shadow Temple Pre Boss Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return logic->CanUse(RG_HOVER_BOOTS) && logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
#pragma region MQ
|
#pragma region MQ
|
||||||
|
|
||||||
//RANDOTODO doublecheck CanAttack when rewriting, as I assumed it only checked adult due to the entrance
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Region("Shadow Temple MQ Beginning", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Region("Shadow Temple MQ Beginning", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
|
@ -138,36 +261,59 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()));}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()));}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->HasExplosives();}) && logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->HasExplosives();}) && logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assumes we're in the "main" area and needed lens to enter. logic will need changes if a void warp puts us somewhere weird
|
//Assumes we're in the "main" area and needed lens to enter. logic will need changes if a void warp puts us somewhere weird
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA] = Region("Shadow Temple MQ Dead Hand Region", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS] = Region("Shadow Temple MQ Whispering Walls", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_REDEAD)),
|
|
||||||
//There's a shared flag tied to some glass here. eye target here and killing an enemy group later in the dungeon toggles. I'm building the logic as "intended", assuming the switch needs flipping
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND) && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanHitEyeTargets()),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_REDEADS, []{return true;}),
|
||||||
|
//There's a shared flag tied to some glass here. eye target here and killing an enemy group later in the dungeon toggles. I'm building the logic as "intended", assuming the switch needs flipping
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_DEAD_HAND, []{return (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanHitEyeTargets();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_REDEADS] = Region("Shadow Temple MQ Whispering Walls Redeads", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_REDEAD)),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return true;}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS, []{return logic->CanKillEnemy(RE_REDEAD);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_DEAD_HAND] = Region("Shadow Temple MQ Whispering Walls Dead Hand", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS, []{return logic->CanKillEnemy(RE_DEAD_HAND);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
//also includes the B2 gibdo room
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS] = Region("Shadow Temple MQ First Beamos", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS] = Region("Shadow Temple MQ First Beamos", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//Doing this sets the shared flag for the glass in RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, but doesn't seem to affect the chest
|
//Doing this sets the shared flag for the glass in RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS, but doesn't seem to affect the chest
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, logic->CanKillEnemy(RE_GIBDO) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return logic->HasExplosives() && logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_B2_GIBDO_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR, []{return logic->HasExplosives() && logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MQ_B2_GIBDO_ROOM] = Region("Shadow Temple MQ B2 Gibdo Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, logic->CanKillEnemy(RE_GIBDO) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return logic->CanKillEnemy(RE_GIBDO);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||||
|
@ -202,6 +348,7 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return (logic->HasFireSource() && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))) || ctx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT);}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return (logic->HasFireSource() && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))) || ctx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT);}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM] = Region("Shadow Temple MQ Invisible Blades Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM] = Region("Shadow Temple MQ Invisible Blades Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -275,6 +422,7 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}),
|
||||||
//We need to assume we can get here with or without the glass platforms
|
//We need to assume we can get here with or without the glass platforms
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -374,16 +522,30 @@ void RegionTable_Init_ShadowTemple() {
|
||||||
});
|
});
|
||||||
|
|
||||||
//Assumes lens is checked on entry
|
//Assumes lens is checked on entry
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Region("Shadow Temple MQ Invisible Maze", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE] = Region("Shadow Temple MQ Invisible Maze", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_X_CROSS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS, []{return true;}),
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 6);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MQ_X_CROSS] = Region("Shadow Temple MQ X-Cross", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, (logic->CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_SHADOW_MQ_DEADHAND)) && logic->CanKillEnemy(RE_DEAD_HAND) && logic->CanDetonateUprightBombFlower()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, (logic->CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_SHADOW_MQ_DEADHAND)) && logic->CanKillEnemy(RE_DEAD_HAND) && logic->CanDetonateUprightBombFlower()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, true),
|
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}),
|
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return true;}),
|
||||||
Entrance(RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 6);}),
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS] = Region("Shadow Temple MQ Three Skull Jars", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM] = Region("Shadow Temple MQ Spike Walls Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM] = Region("Shadow Temple MQ Spike Walls Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
|
|
@ -23,26 +23,80 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD, []{return logic->IsChild;}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_LOBBY, []{return logic->IsChild;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_LOBBY, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_CHILD] = Region("Child Spirit Temple", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_LOBBY] = Region("Child Spirit Temple", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
EventAccess(&logic->NutCrate, []{return true;}),
|
EventAccess(&logic->NutCrate, []{return true;}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return logic->IsChild;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_BEFORE_CLIMB, []{return logic->IsChild;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_STALFOS, []{return logic->CanKillEnemy(RE_ARMOS) && logic->CanKillEnemy(RE_KEESE);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_TORCHES, []{return logic->CanKillEnemy(RE_ARMOS) && logic->CanKillEnemy(RE_KEESE);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_STALFOS] = Region("Child Spirit Temple Stalfos", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->SpiritChildStalfosBridge, []{return logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU));}),
|
||||||
|
}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_STALFOS_ACROSS_BRIDGE, []{return (logic->SpiritChildStalfosBridge && logic->CanPassEnemy(RE_GREEN_BUBBLE, ED_CLOSE, false)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_STALFOS_ACROSS_BRIDGE] = Region("Child Spirit Temple Stalfos Across Bridge", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->SpiritChildStalfosBridge, []{return logic->CanHitSwitch();}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, true),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))),
|
}, {
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
//Exits
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_STALFOS, []{return logic->CanUse(RG_HOVER_BOOTS) || (logic->SpiritChildStalfosBridge && logic->CanPassEnemy(RE_GREEN_BUBBLE, ED_CLOSE, false));}),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_ANUBIS, []{return true;}),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
});
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))),
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_ANUBIS] = Region("Child Spirit Temple Anubis", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, true),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, true),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, true),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_STALFOS_ACROSS_BRIDGE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_TORCHES_ACROSS_BRIDGE, []{return logic->CanHitSwitch();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_TORCHES_ACROSS_BRIDGE] = Region("Child Spirit Temple Torches", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
//Events
|
||||||
|
EventAccess(&logic->SpiritChildTorchesBridge, []{return true;}),
|
||||||
|
}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, logic->HasFireSourceWithTorch()),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_TORCHES, []{return logic->SpiritChildTorchesBridge;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_ANUBIS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_TORCHES] = Region("Child Spirit Temple Torches", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_TORCHES_ACROSS_BRIDGE, []{return logic->SpiritChildTorchesBridge;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_CHILD_BEFORE_CLIMB] = Region("Child Spirit Temple Before Climb", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_LOBBY, []{return logic->IsChild;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -57,94 +111,255 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_BEFORE_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM, []{return logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Region("Early Adult Spirit Temple", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_ADULT_LOBBY] = Region("Adult Spirit Temple Lobby", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_SAND_PIT, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH));}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_BOULDERS, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH));}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 3);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_ADULT_SAND_PIT] = Region("Adult Spirit Temple Sand Pit", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_COMPASS_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_ZELDAS_LULLABY)),
|
LOCATION(RC_SPIRIT_TEMPLE_COMPASS_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslashExceptHammer())),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_LOBBY, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER] = Region("Spirit Temple Central Chamber", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_ADULT_BOULDERS] = Region("Adult Spirit Temple Boulders", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && logic->CanKillEnemy(RE_GOLD_SKULLTULA)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_PAST_BOULDERS, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslashExceptHammer();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_ADULT_PAST_BOULDERS] = Region("Adult Spirit Temple Past Boulders", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, true),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_BOULDERS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_ADULT_CLIMB] = Region("Adult Spirit Temple Climb", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, true),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, true),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_LOBBY, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 3);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_STATUE_ROOM] = Region("Spirit Temple Statue Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MAP_CHEST, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
LOCATION(RC_SPIRIT_TEMPLE_MAP_CHEST, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
||||||
(logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST)) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS) ))) ||
|
(logic->HasFireSource() || (ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS)))) ||
|
||||||
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) ||
|
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) ||
|
||||||
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))),
|
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MAP_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
|
||||||
(logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST)) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS) ))) ||
|
|
||||||
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) ||
|
|
||||||
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY)),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_HOOKSHOT)) ||
|
|
||||||
(logic->CanUse(RG_BOOMERANG) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives()) ||
|
|
||||||
(logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) &&
|
|
||||||
logic->CanUse(RG_BOOMERANG) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_GS_LOBBY, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
LOCATION(RC_SPIRIT_TEMPLE_GS_LOBBY, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
||||||
ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && logic->CanUse(RG_BOOMERANG) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))) ||
|
ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && logic->CanUse(RG_BOOMERANG) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))) ||
|
||||||
(ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG)) ||
|
(ctx->GetTrickOption(RT_SPIRIT_LOBBY_GS) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG)) ||
|
||||||
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)))),
|
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP)))),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_OUTDOOR_HANDS, []{return logic->CanJumpslashExceptHammer() || logic->HasExplosives();}),
|
|
||||||
Entrance(RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return true;}),
|
||||||
// RT_SPIRIT_PLATFORM_HOOKSHOT is currently disabled
|
// RT_SPIRIT_PLATFORM_HOOKSHOT is currently disabled
|
||||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ctx->GetTrickOption(RT_SPIRIT_PLATFORM_HOOKSHOT) && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ctx->GetTrickOption(RT_SPIRIT_PLATFORM_HOOKSHOT) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STAIRS_TO_BLOCK_PUZZLE, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_OUTDOOR_HANDS] = Region("Spirit Temple Outdoor Hands", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_STAIRS_TO_BLOCK_PUZZLE] = Region("Spirit Temple Stairs to Block Puzzle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BLOCK_PUZZLE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BLOCK_PUZZLE] = Region("Spirit Temple Block Puzzle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_LONGSHOT) && logic->HasExplosives()) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)),
|
LOCATION(RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, ((logic->HasExplosives() || logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) &&
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->HasExplosives()),
|
(logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST)) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS) ))) ||
|
||||||
|
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) ||
|
||||||
|
(logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_DESERT_COLOSSUS, []{return (logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (logic->CanUse(RG_SILVER_GAUNTLETS) && ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->HasExplosives()) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)));}),
|
Entrance(RR_SPIRIT_TEMPLE_STAIRS_TO_BLOCK_PUZZLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_WEST_STAIRS_TO_HAND, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Central Locked Door", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_WEST_STAIRS_TO_HAND] = Region("Spirit Temple West Stairs to Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_HOOKSHOT)) ||
|
||||||
|
(logic->CanUse(RG_BOOMERANG) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives()) ||
|
||||||
|
(logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) &&
|
||||||
|
logic->CanUse(RG_BOOMERANG) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))))),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, logic->CanBreakPots() && (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && ctx->GetOption(RSK_BOMBCHU_BAG) && logic->BombchuRefill() && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BLOCK_PUZZLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_WEST_IRON_KNUCKLE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_WEST_IRON_KNUCKLE] = Region("Spirit Temple East Stairs to Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_WEST_STAIRS_TO_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EXIT_TO_SILVER_GAUNTLETS_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_EXIT_TO_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple Exit to Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_WEST_IRON_KNUCKLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_SILVER_GAUNTLETS_HAND, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EXIT_TO_SILVER_GAUNTLETS_HAND, []{return true;}),
|
||||||
|
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST] = Region("Spirit Temple Statue Room East", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_ADULT_CLIMB, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STAIRS_TO_BEAMOS_PITS, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_SHORTCUT, []{return logic->CanUse(RG_MEGATON_HAMMER) && (ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP) || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_ZELDAS_LULLABY) && logic->CanUse(RG_HOOKSHOT)));}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_STAIRS_TO_BEAMOS_PITS] = Region("Spirit Temple Stairs to Beamos Pits", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, logic->CanBreakPots()),
|
||||||
|
}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BEAMOS_PITS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BEAMOS_PITS] = Region("Spirit Temple Beamos Pits", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))) && logic->HasExplosives()),
|
LOCATION(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))) && logic->HasExplosives()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives()),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->HasExplosives()),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, logic->CanBreakPots()),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, logic->HasExplosives() && logic->CanUse(RG_SUNS_SONG)),
|
LOCATION(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, logic->HasExplosives() && logic->CanUse(RG_SUNS_SONG)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (ctx->GetTrickOption(RT_SPIRIT_WALL) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_BOMBCHU_5) || ((logic->CanUse(RG_BOMB_BAG) || logic->CanUse(RG_NUTS) || logic->CanUse(RG_DINS_FIRE)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_MEGATON_HAMMER))));}),
|
Entrance(RR_SPIRIT_TEMPLE_STAIRS_TO_BEAMOS_PITS, []{return logic->CanKillEnemy(RE_BEAMOS);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_FOUR_ARMOS, []{return logic->CanKillEnemy(RE_BEAMOS);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BIG_WALL, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (ctx->GetTrickOption(RT_SPIRIT_WALL) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_BOMBCHU_5) || ((logic->CanUse(RG_BOMB_BAG) || logic->CanUse(RG_NUTS) || logic->CanUse(RG_DINS_FIRE)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_MEGATON_HAMMER))));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Final Locked Door", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_FOUR_ARMOS] = Region("Spirit Temple Four Armos", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BEAMOS_PITS, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_FOUR_ARMOS_SIDE_ROOM, []{return logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EAST_STAIRS_TO_HAND, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_FOUR_ARMOS_SIDE_ROOM] = Region("Spirit Temple Four Armos Side Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_FOUR_ARMOS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_EAST_STAIRS_TO_HAND] = Region("Spirit Temple East Stairs to Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_SPIRIT) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_FOUR_ARMOS, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EAST_IRON_KNUCKLE, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_EAST_IRON_KNUCKLE] = Region("Spirit Temple East Stairs to Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EAST_STAIRS_TO_HAND, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EXIT_TO_MIRROR_SHIELD_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_EXIT_TO_MIRROR_SHIELD_HAND] = Region("Spirit Temple Exit to Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EAST_IRON_KNUCKLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MIRROR_SHIELD_HAND, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MIRROR_SHIELD_HAND] = Region("Spirit Temple Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, true),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_EXIT_TO_MIRROR_SHIELD_HAND, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_SILVER_GAUNTLETS_HAND, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BIG_WALL] = Region("Spirit Temple Big Wall", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && ((logic->TakeDamage() && ctx->GetTrickOption(RT_FLAMING_CHESTS)) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT)))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, (logic->CanUse(RG_MIRROR_SHIELD) && logic->CanAttack()) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BEAMOS_PITS, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_4F_CENTRAL, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_4F_CENTRAL] = Region("Spirit Temple 4F Central", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BIG_WALL, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BOSS_KEY_ROOM, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BOSS_KEY_ROOM] = Region("Spirit Temple Boss Key Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, (logic->TakeDamage() && ctx->GetTrickOption(RT_FLAMING_CHESTS)) || (logic->CanHitEyeTargets() && logic->CanUse(RG_HOOKSHOT))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_4F_CENTRAL, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM] = Region("Spirit Temple Big Mirror Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_4F_CENTRAL, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BIG_MIRROR_CAVE, []{return logic->CanJumpslash() || logic->HasExplosives();}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_BIG_MIRROR_CAVE] = Region("Spirit Temple Big Mirror Cave", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_SPIRIT_TEMPLE_TOPMOST_CHEST, logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return logic->CanUse(RG_MIRROR_SHIELD) && logic->HasExplosives() && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return logic->CanUse(RG_MIRROR_SHIELD) && logic->HasExplosives() && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_SHORTCUT] = Region("Spirit Temple Shortcut", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] = Region("Spirit Temple Inside Statue Head", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] = Region("Spirit Temple Inside Statue Head", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
// Exits
|
// Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_STATUE_ROOM, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY);}),
|
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -166,6 +381,7 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return false;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -190,7 +406,6 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets();}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets();}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets() && logic->CanKillEnemy(RE_GIBDO);}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
// Room to store the 2 pots in to handle glitch logic going backwards around the loop later
|
// Room to store the 2 pots in to handle glitch logic going backwards around the loop later
|
||||||
|
@ -198,7 +413,9 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, logic->CanBreakPots()),
|
||||||
}, {});
|
}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanKillEnemy(RE_GIBDO);}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM] = Region("Spirit Temple Turntable Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM] = Region("Spirit Temple Turntable Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
//Events
|
//Events
|
||||||
|
@ -226,6 +443,7 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
//Stalfos room blocks you in with fire until you kill the stalfos, which won't spawn from behind the fire
|
//Stalfos room blocks you in with fire until you kill the stalfos, which won't spawn from behind the fire
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return false;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -296,11 +514,17 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||||
//We can use Here instead of Shared here because adult will never need to rely on child access to reach this room, and adult access is Certain
|
//We can use Here instead of Shared here because adult will never need to rely on child access to reach this room, and adult access is Certain
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->HasFireSource() || (ctx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME));});}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->HasFireSource() || (ctx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME));});}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->IsAdult || ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_SOT) || logic->CanUse(RG_SONG_OF_TIME);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, []{return logic->IsAdult || ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_SOT) || logic->CanUse(RG_SONG_OF_TIME);}),
|
||||||
//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this
|
//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS] = Region("Spirit Temple MQ Flamethrower Stairs", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM] = Region("Spirit Temple MQ Sun Block Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM] = Region("Spirit Temple MQ Sun Block Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
//We don't need Shared here because If we are checking as child, universe 2 adult access needs nothing so it always passes, and if we are checking as adult, it is Certain Access
|
//We don't need Shared here because If we are checking as child, universe 2 adult access needs nothing so it always passes, and if we are checking as adult, it is Certain Access
|
||||||
|
@ -310,15 +534,27 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS, []{return true;}),
|
||||||
//This door causes the Universes to merge as it requires 7 keys for both ages
|
//This door causes the Universes to merge as it requires 7 keys for both ages
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_STAIRS_TO_HAND, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_STAIRS_TO_HAND] = Region("Spirit Temple MQ West Stairs to Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_STAIRS_TO_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_EXIT_TO_SILVER_GAUNTLETS_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_EXIT_TO_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple MQ Exit to Silver Gauntlets Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple MQ Silver Gauntlets Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple MQ Silver Gauntlets Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -327,7 +563,7 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess
|
//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_EXIT_TO_SILVER_GAUNTLETS_HAND, []{return true;}),
|
||||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -360,13 +596,14 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
//We only need 4 keys, access to Shield hand and longshot to reach Gauntlets hand, as if we waste the 5th key we have given ourselves Gauntlets hand access through child climb
|
//We only need 4 keys, access to Shield hand and longshot to reach Gauntlets hand, as if we waste the 5th key we have given ourselves Gauntlets hand access through child climb
|
||||||
//This exit handles that possibility as cleanly as possible without quantum logic, but will not survive glitch logic
|
//This exit handles that possibility as cleanly as possible without quantum logic, but will not survive glitch logic
|
||||||
//logic->CanKillEnemy(RE_FLOORMASTER) is implied
|
//logic->CanKillEnemy(RE_FLOORMASTER) is implied
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) &&
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return !ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) &&
|
||||||
|
logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) &&
|
||||||
logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) &&
|
logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) &&
|
||||||
logic->CanJumpslash() &&
|
logic->CanJumpslash() &&
|
||||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) &&
|
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) &&
|
||||||
logic->CanKillEnemy(RE_IRON_KNUCKLE) &&
|
logic->CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||||
logic->CanUse(RG_LONGSHOT);}),
|
logic->CanUse(RG_LONGSHOT);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE));}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -427,13 +664,25 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER] = Region("Spirit Temple MQ Fire Wall Stairs Lower", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER] = Region("Spirit Temple MQ Fire Wall Stairs Upper", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)),
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, logic->CanKillEnemy(RE_BEAMOS) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, logic->CanKillEnemy(RE_BEAMOS) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 6);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 6);}),
|
||||||
});
|
});
|
||||||
|
@ -458,7 +707,12 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return true;}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return true;}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, []{return Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_EXIT_TO_MIRROR_SHIELD_HAND, []{return Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_SPIRIT_TEMPLE_MQ_EXIT_TO_MIRROR_SHIELD_HAND] = Region("Spirit Temple MQ Exit To Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return true;}),
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Region("Spirit Temple MQ Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Region("Spirit Temple MQ Mirror Shield Hand", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
@ -533,6 +787,7 @@ void RegionTable_Init_SpiritTemple() {
|
||||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
LOCATION(RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return true;}), // TODO hammer switch logic
|
||||||
//If it's ever relevant to longshot into head from lobby, this needs to be an event access
|
//If it's ever relevant to longshot into head from lobby, this needs to be an event access
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);}) && logic->CanUse(RG_HOOKSHOT);}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);}) && logic->CanUse(RG_HOOKSHOT);}),
|
||||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);});}),
|
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);});}),
|
||||||
|
|
|
@ -277,6 +277,11 @@ void RegionTable_Init_WaterTemple() {
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||||
|
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM_RAMP, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM_RAMP] = Region("Water Temple Pre Boss Room Ramp", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return true;}),
|
||||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}),
|
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -359,12 +364,18 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//what we need if WL_LOW, we can't guarantee repeated access otherwise.
|
//what we need if WL_LOW, we can't guarantee repeated access otherwise.
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
|
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_LONGSHOT);}),
|
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP] = Region("Water Temple MQ Boss Door Ramp", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return true;}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE);}),
|
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Main", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Boss Door", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage();}),
|
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP, []{return logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage();}),
|
||||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}),
|
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -378,20 +389,30 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//EventAccess(&logic->CanWaterTempleLowFromMid, []{return false;}),
|
//EventAccess(&logic->CanWaterTempleLowFromMid, []{return false;}),
|
||||||
}, {
|
}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->MQWaterLevel(WL_HIGH) && logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)),
|
|
||||||
//easy to get at WL_HIGH with the hook-the-underwater-chest glitch
|
//easy to get at WL_HIGH with the hook-the-underwater-chest glitch
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)),
|
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
LOCATION(RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER_3F_ROOM, []{return logic->MQWaterLevel(WL_HIGH) && logic->HasFireSource();}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM, []{return logic->MQWaterLevel(WL_LOW) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_STICKS));}),
|
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM, []{return logic->MQWaterLevel(WL_LOW) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_STICKS));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER_3F_ROOM] = Region("Water Temple MQ East Tower 3F Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_WATER_TEMPLE_MQ_MAP_CHEST, logic->MQWaterLevel(WL_HIGH) && logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 4);}),
|
||||||
|
});
|
||||||
|
|
||||||
//Raising the targets by clearing this room achieves nothing logically because it requires WL_LOW to do and hookshot to use, which implies access to WL_MID and WL_HIGH already
|
//Raising the targets by clearing this room achieves nothing logically because it requires WL_LOW to do and hookshot to use, which implies access to WL_MID and WL_HIGH already
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM] = Region("Water Temple MQ East Tower 1F Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM] = Region("Water Temple MQ East Tower 1F Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_LIZALFOS) && logic->CanKillEnemy(RE_SPIKE)),
|
LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_LIZALFOS) && logic->CanKillEnemy(RE_SPIKE)),
|
||||||
}, {
|
}, {
|
||||||
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return true;}),
|
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return true;}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -402,6 +423,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
EventAccess(&logic->MQWaterB1Switch, []{return ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS);}),
|
EventAccess(&logic->MQWaterB1Switch, []{return ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS);}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW);}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE);}),
|
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||||
//I don't know if this FW trick can ever matter but maybe it's needed to get child to CENTRAL_2F or something
|
//I don't know if this FW trick can ever matter but maybe it's needed to get child to CENTRAL_2F or something
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return logic->CanUse(RG_HOOKSHOT) || (logic->MQWaterLevel(WL_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE));}),
|
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return logic->CanUse(RG_HOOKSHOT) || (logic->MQWaterLevel(WL_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE));}),
|
||||||
|
@ -420,6 +442,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//EventAccess(&logic->MQWaterPillarSoTBlock, []{return logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME);}),
|
//EventAccess(&logic->MQWaterPillarSoTBlock, []{return logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||||
}, {}, {
|
}, {}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return true;}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_FARORES_WIND) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_FARORES_WIND) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}),
|
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}),
|
||||||
});
|
});
|
||||||
|
@ -531,6 +554,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()),
|
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE);}),
|
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE);}),
|
||||||
//this technically exists, but only complicates things, uncomment if some edge case/glitch can use RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY to reach RR_WATER_TEMPLE_MQ_3F_CENTRAL, or if a void warp goes here
|
//this technically exists, but only complicates things, uncomment if some edge case/glitch can use RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY to reach RR_WATER_TEMPLE_MQ_3F_CENTRAL, or if a void warp goes here
|
||||||
/*Entrance(RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE, []{return (logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOOKSHOT)) || logic->MQWaterLevel(WL_HIGH) && (logic->HasItem(RG_BRONZE_SCALE));}),
|
/*Entrance(RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE, []{return (logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOOKSHOT)) || logic->MQWaterLevel(WL_HIGH) && (logic->HasItem(RG_BRONZE_SCALE));}),
|
||||||
|
@ -556,8 +580,6 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_LONGSHOT);}),
|
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_LONGSHOT);}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}),
|
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return (logic->MQWaterStalfosPit && logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_HOVER_BOOTS);}),
|
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->MQWaterStalfosPit && logic->CanUse(RG_LONGSHOT);}),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT] = Region("Water Temple MQ Stalfos Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT] = Region("Water Temple MQ Stalfos Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {
|
||||||
|
@ -593,12 +615,20 @@ void RegionTable_Init_WaterTemple() {
|
||||||
//Locations
|
//Locations
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, logic->CanBreakPots()),
|
LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, logic->CanBreakPots()),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, logic->CanBreakPots()),
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return logic->IsAdult || logic->TakeDamage();}),
|
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return logic->IsAdult || logic->TakeDamage();}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return logic->IsAdult || logic->TakeDamage();}),
|
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return logic->IsAdult || logic->TakeDamage();}),
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, []{return true;}),
|
||||||
|
});
|
||||||
|
|
||||||
|
areaTable[RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM] = Region("Water Temple MQ Dark Link", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||||
|
//Locations
|
||||||
|
LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||||
|
LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||||
|
}, {
|
||||||
|
//Exits
|
||||||
|
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
Entrance(RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -611,7 +641,7 @@ void RegionTable_Init_WaterTemple() {
|
||||||
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()),
|
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()),
|
||||||
}, {
|
}, {
|
||||||
//Exits
|
//Exits
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
Entrance(RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||||
Entrance(RR_WATER_TEMPLE_MQ_RIVER_SKULL, []{return logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanUse(RG_LONGSHOT));}),
|
Entrance(RR_WATER_TEMPLE_MQ_RIVER_SKULL, []{return logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanUse(RG_LONGSHOT));}),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -991,14 +991,15 @@ bool Logic::MQWaterLevel(RandoWaterLevel level) {
|
||||||
// skipped if it was ever possible to play ZL underwater.
|
// skipped if it was ever possible to play ZL underwater.
|
||||||
case WL_MID:
|
case WL_MID:
|
||||||
return CanWaterTempleLowFromHigh && CanWaterTempleMiddle;
|
return CanWaterTempleLowFromHigh && CanWaterTempleMiddle;
|
||||||
// Despite being the initial state of water temple, WL_HIGH has the extra requirement of making sure that, if we
|
// Despite being the initial state of water temple, WL_HIGH has the extra requirement of making sure that,
|
||||||
// were to lower the water out of logic, we could put it back to WL_HIGH However because it is the default
|
// if we were to lower the water out of logic, we could put it back to WL_HIGH However because it is the
|
||||||
// state, we do not need to check if we can actually change the water level, only to make sure we can return to
|
// default state, we do not need to check if we can actually change the water level, only to make sure we
|
||||||
// WL_HIGH if we found the means to play ZL out of logic. There are 2 methods to lock yourself out after playing
|
// can return to WL_HIGH if we found the means to play ZL out of logic. There are 2 methods to lock yourself
|
||||||
// ZL already: Not being able to reach the High Emblem and being unable to replay ZL. (I will be ignoring
|
// out after playing ZL already: Not being able to reach the High Emblem and being unable to replay ZL. (I
|
||||||
// other-age-access shenanigains) The former check would simply be a check to see if we can reach High Emblem,
|
// will be ignoring other-age-access shenanigans) The former check would simply be a check to see if we can
|
||||||
// but we assume the water is WL_MID (as if we can set it to WL_LOW, we can set it to WL_MID, as Mid Emblem has
|
// reach High Emblem, but we assume the water is WL_MID (as if we can set it to WL_LOW, we can set it to
|
||||||
// no requirements) The latter check can be assumed for now but will want a revisit once OI tricks are added.
|
// WL_MID, as Mid Emblem has no requirements) The latter check can be assumed for now but will want a
|
||||||
|
// revisit once OI tricks are added.
|
||||||
case WL_HIGH:
|
case WL_HIGH:
|
||||||
return ReachedWaterHighEmblem;
|
return ReachedWaterHighEmblem;
|
||||||
case WL_HIGH_OR_MID:
|
case WL_HIGH_OR_MID:
|
||||||
|
@ -1383,38 +1384,51 @@ bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless
|
||||||
static_cast<uint8_t>(GlitchDifficulty::NOVICE) && GetDifficultyValueFromString(GlitchISG) >=
|
static_cast<uint8_t>(GlitchDifficulty::NOVICE) && GetDifficultyValueFromString(GlitchISG) >=
|
||||||
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE)))) { return ForestTempleKeys >= requiredAmountGlitched;
|
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE)))) { return ForestTempleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_FOREST_TEMPLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_FOREST_TEMPLE) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) ? ctx->GetDungeon(SCENE_FOREST_TEMPLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_FIRE_TEMPLE:
|
case RR_FIRE_TEMPLE:
|
||||||
/*if (IsGlitched && (GetDifficultyValueFromString(GlitchLedgeClip) >=
|
/*if (IsGlitched && (GetDifficultyValueFromString(GlitchLedgeClip) >=
|
||||||
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHover) >=
|
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE) || GetDifficultyValueFromString(GlitchHover) >=
|
||||||
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE))) { return FireTempleKeys >= requiredAmountGlitched;
|
static_cast<uint8_t>(GlitchDifficulty::INTERMEDIATE))) { return FireTempleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_FIRE_TEMPLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_FIRE_TEMPLE) >= (ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)
|
||||||
|
? ctx->GetDungeon(SCENE_FIRE_TEMPLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_WATER_TEMPLE:
|
case RR_WATER_TEMPLE:
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
return WaterTempleKeys >= requiredAmountGlitched;
|
return WaterTempleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_WATER_TEMPLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_WATER_TEMPLE) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) ? ctx->GetDungeon(SCENE_WATER_TEMPLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_SPIRIT_TEMPLE:
|
case RR_SPIRIT_TEMPLE:
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
return SpiritTempleKeys >= requiredAmountGlitched;
|
return SpiritTempleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_SPIRIT_TEMPLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_SPIRIT_TEMPLE) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) ? ctx->GetDungeon(SCENE_SPIRIT_TEMPLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_SHADOW_TEMPLE:
|
case RR_SHADOW_TEMPLE:
|
||||||
/*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotClip) >=
|
/*if (IsGlitched && (GetDifficultyValueFromString(GlitchHookshotClip) >=
|
||||||
static_cast<uint8_t>(GlitchDifficulty::NOVICE))) { return ShadowTempleKeys >= requiredAmountGlitched;
|
static_cast<uint8_t>(GlitchDifficulty::NOVICE))) { return ShadowTempleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_SHADOW_TEMPLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_SHADOW_TEMPLE) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS) ? ctx->GetDungeon(SCENE_SHADOW_TEMPLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_BOTTOM_OF_THE_WELL:
|
case RR_BOTTOM_OF_THE_WELL:
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
return BottomOfTheWellKeys >= requiredAmountGlitched;
|
return BottomOfTheWellKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_BOTTOM_OF_THE_WELL) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_BOTTOM_OF_THE_WELL) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)
|
||||||
|
? ctx->GetDungeon(SCENE_BOTTOM_OF_THE_WELL)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_GERUDO_TRAINING_GROUND:
|
case RR_GERUDO_TRAINING_GROUND:
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
|
@ -1426,7 +1440,10 @@ bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
return GanonsCastleKeys >= requiredAmountGlitched;
|
return GanonsCastleKeys >= requiredAmountGlitched;
|
||||||
}*/
|
}*/
|
||||||
return GetSmallKeyCount(SCENE_INSIDE_GANONS_CASTLE) >= requiredAmountGlitchless;
|
return GetSmallKeyCount(SCENE_INSIDE_GANONS_CASTLE) >=
|
||||||
|
(ctx->GetOption(RSK_SHUFFLE_DUNGEON_DOORS)
|
||||||
|
? ctx->GetDungeon(SCENE_INSIDE_GANONS_CASTLE)->GetSmallKeyCount()
|
||||||
|
: requiredAmountGlitchless);
|
||||||
|
|
||||||
case RR_MARKET_TREASURE_CHEST_GAME:
|
case RR_MARKET_TREASURE_CHEST_GAME:
|
||||||
/*if (IsGlitched && (false)) {
|
/*if (IsGlitched && (false)) {
|
||||||
|
@ -2485,6 +2502,7 @@ void Logic::Reset() {
|
||||||
OpenedWestRoomMQBotw = false;
|
OpenedWestRoomMQBotw = false;
|
||||||
OpenedMiddleHoleMQBotw = false;
|
OpenedMiddleHoleMQBotw = false;
|
||||||
BrokeDeku1FWeb = false;
|
BrokeDeku1FWeb = false;
|
||||||
|
MQDeku3FSwitch = false;
|
||||||
ClearedMQDekuSERoom = false;
|
ClearedMQDekuSERoom = false;
|
||||||
MQDekuWaterRoomTorches = false;
|
MQDekuWaterRoomTorches = false;
|
||||||
PushedDekuBasementBlock = false;
|
PushedDekuBasementBlock = false;
|
||||||
|
@ -2500,6 +2518,8 @@ void Logic::Reset() {
|
||||||
MQGTGMazeSwitch = false;
|
MQGTGMazeSwitch = false;
|
||||||
GTGPlatformSilverRupees = false;
|
GTGPlatformSilverRupees = false;
|
||||||
MQJabuHolesRoomDoor = false;
|
MQJabuHolesRoomDoor = false;
|
||||||
|
MQJabuWaterSwitchLiftAccess = false;
|
||||||
|
JabuRutoIn1F = false;
|
||||||
JabuWestTentacle = false;
|
JabuWestTentacle = false;
|
||||||
JabuEastTentacle = false;
|
JabuEastTentacle = false;
|
||||||
JabuNorthTentacle = false;
|
JabuNorthTentacle = false;
|
||||||
|
@ -2516,7 +2536,8 @@ void Logic::Reset() {
|
||||||
MQSpiritMapRoomEnemies = false;
|
MQSpiritMapRoomEnemies = false;
|
||||||
MQSpirit3SunsEnemies = false;
|
MQSpirit3SunsEnemies = false;
|
||||||
Spirit1FSilverRupees = false;
|
Spirit1FSilverRupees = false;
|
||||||
JabuRutoIn1F = false;
|
SpiritChildStalfosBridge = false;
|
||||||
|
SpiritChildTorchesBridge = false;
|
||||||
|
|
||||||
StopPerformanceTimer(PT_LOGIC_RESET);
|
StopPerformanceTimer(PT_LOGIC_RESET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -146,6 +146,7 @@ class Logic {
|
||||||
bool OpenedWestRoomMQBotw = false;
|
bool OpenedWestRoomMQBotw = false;
|
||||||
bool OpenedMiddleHoleMQBotw = false;
|
bool OpenedMiddleHoleMQBotw = false;
|
||||||
bool BrokeDeku1FWeb = false;
|
bool BrokeDeku1FWeb = false;
|
||||||
|
bool MQDeku3FSwitch = false;
|
||||||
bool ClearedMQDekuSERoom = false;
|
bool ClearedMQDekuSERoom = false;
|
||||||
bool MQDekuWaterRoomTorches = false;
|
bool MQDekuWaterRoomTorches = false;
|
||||||
bool PushedDekuBasementBlock = false;
|
bool PushedDekuBasementBlock = false;
|
||||||
|
@ -162,6 +163,8 @@ class Logic {
|
||||||
bool MQGTGRightSideSwitch = false;
|
bool MQGTGRightSideSwitch = false;
|
||||||
bool GTGPlatformSilverRupees = false;
|
bool GTGPlatformSilverRupees = false;
|
||||||
bool MQJabuHolesRoomDoor = false;
|
bool MQJabuHolesRoomDoor = false;
|
||||||
|
bool MQJabuWaterSwitchLiftAccess = false;
|
||||||
|
bool JabuRutoIn1F = false;
|
||||||
bool JabuWestTentacle = false;
|
bool JabuWestTentacle = false;
|
||||||
bool JabuEastTentacle = false;
|
bool JabuEastTentacle = false;
|
||||||
bool JabuNorthTentacle = false;
|
bool JabuNorthTentacle = false;
|
||||||
|
@ -179,7 +182,8 @@ class Logic {
|
||||||
bool MQSpiritTimeTravelChest = false;
|
bool MQSpiritTimeTravelChest = false;
|
||||||
bool MQSpirit3SunsEnemies = false;
|
bool MQSpirit3SunsEnemies = false;
|
||||||
bool Spirit1FSilverRupees = false;
|
bool Spirit1FSilverRupees = false;
|
||||||
bool JabuRutoIn1F = false;
|
bool SpiritChildStalfosBridge = false;
|
||||||
|
bool SpiritChildTorchesBridge = false;
|
||||||
|
|
||||||
/* --- END OF HELPERS AND LOCATION ACCESS --- */
|
/* --- END OF HELPERS AND LOCATION ACCESS --- */
|
||||||
|
|
||||||
|
|
|
@ -177,6 +177,7 @@ void Settings::CreateOptionDescriptions() {
|
||||||
"\n"
|
"\n"
|
||||||
"Keep in mind you may need to temporarily disable the \"Remember Save Location\" time saver to "
|
"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.";
|
"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] =
|
mOptionDescriptions[RSK_DECOUPLED_ENTRANCES] =
|
||||||
"Decouple entrances when shuffling them. This means you are no longer guaranteed "
|
"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"
|
"to end up back where you came from when you go back through an entrance.\n"
|
||||||
|
|
|
@ -552,6 +552,7 @@ typedef enum {
|
||||||
RR_DEKU_TREE_MQ_1F,
|
RR_DEKU_TREE_MQ_1F,
|
||||||
RR_DEKU_TREE_MQ_2F,
|
RR_DEKU_TREE_MQ_2F,
|
||||||
RR_DEKU_TREE_MQ_3F,
|
RR_DEKU_TREE_MQ_3F,
|
||||||
|
RR_DEKU_TREE_MQ_SLINGSHOT_ROOM,
|
||||||
RR_DEKU_TREE_MQ_EYE_TARGET_ROOM,
|
RR_DEKU_TREE_MQ_EYE_TARGET_ROOM,
|
||||||
RR_DEKU_TREE_MQ_COMPASS_ROOM,
|
RR_DEKU_TREE_MQ_COMPASS_ROOM,
|
||||||
RR_DEKU_TREE_MQ_PAST_BOULDER_VINES,
|
RR_DEKU_TREE_MQ_PAST_BOULDER_VINES,
|
||||||
|
@ -607,6 +608,7 @@ typedef enum {
|
||||||
RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM,
|
RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM,
|
||||||
RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER,
|
RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER,
|
||||||
RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE,
|
RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE,
|
||||||
|
RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE_SCRUB,
|
||||||
RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS,
|
RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS,
|
||||||
RR_DODONGOS_CAVERN_MQ_POES_ROOM,
|
RR_DODONGOS_CAVERN_MQ_POES_ROOM,
|
||||||
RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM,
|
RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM,
|
||||||
|
@ -617,15 +619,22 @@ typedef enum {
|
||||||
RR_DODONGOS_CAVERN_BOSS_ROOM,
|
RR_DODONGOS_CAVERN_BOSS_ROOM,
|
||||||
|
|
||||||
RR_JABU_JABUS_BELLY_BEGINNING,
|
RR_JABU_JABUS_BELLY_BEGINNING,
|
||||||
RR_JABU_JABUS_BELLY_MAIN,
|
RR_JABU_JABUS_BELLY_LIFT_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_B1_NORTH,
|
RR_JABU_JABUS_BELLY_HOLES_ROOM,
|
||||||
|
RR_JABU_JABUS_BELLY_B1_CUBE,
|
||||||
|
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_NORTH,
|
||||||
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH,
|
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH,
|
||||||
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE,
|
RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE,
|
||||||
RR_JABU_JABUS_BELLY_COMPASS_ROOM,
|
RR_JABU_JABUS_BELLY_FORKED_CORRIDOR,
|
||||||
RR_JABU_JABUS_BELLY_BLUE_TENTACLE,
|
RR_JABU_JABUS_BELLY_FORK_WEST,
|
||||||
RR_JABU_JABUS_BELLY_GREEN_TENTACLE,
|
RR_JABU_JABUS_BELLY_FORK_NORTH_WEST,
|
||||||
|
RR_JABU_JABUS_BELLY_FORK_NORTH,
|
||||||
|
RR_JABU_JABUS_BELLY_FORK_NORTH_EAST,
|
||||||
|
RR_JABU_JABUS_BELLY_FORK_EAST,
|
||||||
RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE,
|
RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE,
|
||||||
|
RR_JABU_JABUS_BELLY_BIGOCTO,
|
||||||
RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO,
|
RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO,
|
||||||
|
RR_JABU_JABUS_BELLY_CUBES_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_LIFT_UPPER,
|
RR_JABU_JABUS_BELLY_LIFT_UPPER,
|
||||||
RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM,
|
RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM,
|
||||||
|
|
||||||
|
@ -635,10 +644,18 @@ typedef enum {
|
||||||
RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE,
|
RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE,
|
||||||
RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM,
|
RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM,
|
RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM_PAST_GEYSER,
|
||||||
RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR,
|
RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR,
|
||||||
RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS,
|
RR_JABU_JABUS_BELLY_MQ_FORK_WEST,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_WEST,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_FORK_NORTH,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_FORK_NORTH_EAST,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_FORK_EAST,
|
||||||
RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM,
|
RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_MQ_PAST_OCTO,
|
RR_JABU_JABUS_BELLY_MQ_BIGOCTO,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_ABOVE_BIGOCTO,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_CUBES_ROOM,
|
||||||
|
RR_JABU_JABUS_BELLY_MQ_ABOVE_LIFT_ROOM,
|
||||||
RR_JABU_JABUS_BELLY_MQ_EAST_ROOM,
|
RR_JABU_JABUS_BELLY_MQ_EAST_ROOM,
|
||||||
|
|
||||||
RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY,
|
RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY,
|
||||||
|
@ -672,16 +689,22 @@ typedef enum {
|
||||||
RR_FOREST_TEMPLE_EAST_CORRIDOR,
|
RR_FOREST_TEMPLE_EAST_CORRIDOR,
|
||||||
RR_FOREST_TEMPLE_BOSS_REGION,
|
RR_FOREST_TEMPLE_BOSS_REGION,
|
||||||
|
|
||||||
|
RR_FOREST_TEMPLE_MQ_FIRST_ROOM,
|
||||||
|
RR_FOREST_TEMPLE_MQ_SOUTH_CORRIDOR,
|
||||||
RR_FOREST_TEMPLE_MQ_LOBBY,
|
RR_FOREST_TEMPLE_MQ_LOBBY,
|
||||||
RR_FOREST_TEMPLE_MQ_CENTRAL_AREA,
|
RR_FOREST_TEMPLE_MQ_NORTH_CORRIDOR,
|
||||||
RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM,
|
RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM,
|
||||||
|
RR_FOREST_TEMPLE_MQ_WEST_CORRIDOR,
|
||||||
RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE,
|
RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE,
|
||||||
RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE,
|
RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE,
|
||||||
RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE,
|
RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE,
|
||||||
RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY,
|
RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY,
|
||||||
RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM,
|
RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM,
|
||||||
|
RR_FOREST_TEMPLE_MQ_INDOOR_LEDGE,
|
||||||
RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE,
|
RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE,
|
||||||
|
RR_FOREST_TEMPLE_MQ_REDEAD_ROOM,
|
||||||
RR_FOREST_TEMPLE_MQ_NW_OUTDOORS,
|
RR_FOREST_TEMPLE_MQ_NW_OUTDOORS,
|
||||||
|
RR_FOREST_TEMPLE_MQ_NORTH_PASSAGE,
|
||||||
RR_FOREST_TEMPLE_MQ_NE_OUTDOORS,
|
RR_FOREST_TEMPLE_MQ_NE_OUTDOORS,
|
||||||
RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES,
|
RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES,
|
||||||
RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE,
|
RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE,
|
||||||
|
@ -691,6 +714,7 @@ typedef enum {
|
||||||
RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM,
|
RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM,
|
||||||
RR_FOREST_TEMPLE_MQ_FALLING_ROOM,
|
RR_FOREST_TEMPLE_MQ_FALLING_ROOM,
|
||||||
RR_FOREST_TEMPLE_MQ_AMY_ROOM,
|
RR_FOREST_TEMPLE_MQ_AMY_ROOM,
|
||||||
|
RR_FOREST_TEMPLE_MQ_EAST_CORRIDOR,
|
||||||
RR_FOREST_TEMPLE_MQ_BASEMENT,
|
RR_FOREST_TEMPLE_MQ_BASEMENT,
|
||||||
RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM,
|
RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM,
|
||||||
RR_FOREST_TEMPLE_MQ_BOSS_REGION,
|
RR_FOREST_TEMPLE_MQ_BOSS_REGION,
|
||||||
|
@ -745,26 +769,39 @@ typedef enum {
|
||||||
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM,
|
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH,
|
RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH,
|
||||||
RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM,
|
RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM,
|
||||||
|
RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_NORTH_GORON,
|
||||||
|
RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_SOUTH_GORON,
|
||||||
RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM,
|
RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM,
|
RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM,
|
RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_LOWER_MAZE,
|
RR_FIRE_TEMPLE_MQ_LOWER_MAZE,
|
||||||
RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE,
|
RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE,
|
||||||
|
RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON_DOOR,
|
||||||
|
RR_FIRE_TEMPLE_MQ_LOWER_MAZE_GORON,
|
||||||
RR_FIRE_TEMPLE_MQ_UPPER_MAZE,
|
RR_FIRE_TEMPLE_MQ_UPPER_MAZE,
|
||||||
RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE,
|
RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE,
|
||||||
RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT,
|
RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT,
|
||||||
RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE,
|
RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE,
|
||||||
RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB,
|
RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_LOWER,
|
||||||
|
RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB_UPPER,
|
||||||
|
RR_FIRE_TEMPLE_MQ_BURNING_BLOCK,
|
||||||
RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM,
|
RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM,
|
RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM,
|
||||||
|
RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM_CAGE,
|
||||||
|
RR_FIRE_TEMPLE_MQ_CORRIDOR,
|
||||||
RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE,
|
RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE,
|
||||||
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS,
|
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS,
|
||||||
|
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_UPPER,
|
||||||
|
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_INNER_LOWER,
|
||||||
RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE,
|
RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE,
|
||||||
RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE,
|
RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE,
|
||||||
|
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_SIDE_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL,
|
RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL,
|
||||||
RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER,
|
RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER,
|
||||||
|
RR_FIRE_TEMPLE_MQ_SCARECROW_CLIMB,
|
||||||
RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM,
|
RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM,
|
||||||
RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS,
|
RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS,
|
||||||
|
RR_FIRE_TEMPLE_MQ_ABOVE_FIRE_MAZE,
|
||||||
|
|
||||||
RR_FIRE_TEMPLE_BOSS_ENTRYWAY,
|
RR_FIRE_TEMPLE_BOSS_ENTRYWAY,
|
||||||
RR_FIRE_TEMPLE_BOSS_ROOM,
|
RR_FIRE_TEMPLE_BOSS_ROOM,
|
||||||
|
@ -796,6 +833,7 @@ typedef enum {
|
||||||
RR_WATER_TEMPLE_LONGSHOT_ROOM,
|
RR_WATER_TEMPLE_LONGSHOT_ROOM,
|
||||||
RR_WATER_TEMPLE_RIVER,
|
RR_WATER_TEMPLE_RIVER,
|
||||||
RR_WATER_TEMPLE_PRE_BOSS_ROOM,
|
RR_WATER_TEMPLE_PRE_BOSS_ROOM,
|
||||||
|
RR_WATER_TEMPLE_PRE_BOSS_ROOM_RAMP,
|
||||||
|
|
||||||
RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE,
|
RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE,
|
||||||
RR_WATER_TEMPLE_MQ_MAIN,
|
RR_WATER_TEMPLE_MQ_MAIN,
|
||||||
|
@ -804,8 +842,10 @@ typedef enum {
|
||||||
RR_WATER_TEMPLE_MQ_2F_CENTRAL_HIGH,
|
RR_WATER_TEMPLE_MQ_2F_CENTRAL_HIGH,
|
||||||
RR_WATER_TEMPLE_MQ_HIGH_EMBLEM,
|
RR_WATER_TEMPLE_MQ_HIGH_EMBLEM,
|
||||||
RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE,
|
RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE,
|
||||||
|
RR_WATER_TEMPLE_MQ_BOSS_DOOR_RAMP,
|
||||||
RR_WATER_TEMPLE_MQ_BOSS_DOOR,
|
RR_WATER_TEMPLE_MQ_BOSS_DOOR,
|
||||||
RR_WATER_TEMPLE_MQ_EAST_TOWER,
|
RR_WATER_TEMPLE_MQ_EAST_TOWER,
|
||||||
|
RR_WATER_TEMPLE_MQ_EAST_TOWER_3F_ROOM,
|
||||||
RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM,
|
RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM,
|
||||||
RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F,
|
RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F,
|
||||||
RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F,
|
RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F,
|
||||||
|
@ -822,6 +862,7 @@ typedef enum {
|
||||||
RR_WATER_TEMPLE_MQ_STALFOS_PIT,
|
RR_WATER_TEMPLE_MQ_STALFOS_PIT,
|
||||||
RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS,
|
RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS,
|
||||||
RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER,
|
RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER,
|
||||||
|
RR_WATER_TEMPLE_MQ_DARK_LINK_ROOM,
|
||||||
RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK,
|
RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK,
|
||||||
RR_WATER_TEMPLE_MQ_RIVER_SKULL,
|
RR_WATER_TEMPLE_MQ_RIVER_SKULL,
|
||||||
RR_WATER_TEMPLE_MQ_RIVER_POTS,
|
RR_WATER_TEMPLE_MQ_RIVER_POTS,
|
||||||
|
@ -844,13 +885,41 @@ typedef enum {
|
||||||
RR_WATER_TEMPLE_BOSS_ROOM,
|
RR_WATER_TEMPLE_BOSS_ROOM,
|
||||||
|
|
||||||
RR_SPIRIT_TEMPLE_LOBBY,
|
RR_SPIRIT_TEMPLE_LOBBY,
|
||||||
RR_SPIRIT_TEMPLE_CHILD,
|
RR_SPIRIT_TEMPLE_CHILD_LOBBY,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_STALFOS,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_STALFOS_ACROSS_BRIDGE,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_ANUBIS,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_TORCHES,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_TORCHES_ACROSS_BRIDGE,
|
||||||
|
RR_SPIRIT_TEMPLE_CHILD_BEFORE_CLIMB,
|
||||||
RR_SPIRIT_TEMPLE_CHILD_CLIMB,
|
RR_SPIRIT_TEMPLE_CHILD_CLIMB,
|
||||||
RR_SPIRIT_TEMPLE_EARLY_ADULT,
|
RR_SPIRIT_TEMPLE_ADULT_LOBBY,
|
||||||
RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER,
|
RR_SPIRIT_TEMPLE_ADULT_SAND_PIT,
|
||||||
RR_SPIRIT_TEMPLE_OUTDOOR_HANDS,
|
RR_SPIRIT_TEMPLE_ADULT_BOULDERS,
|
||||||
RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR,
|
RR_SPIRIT_TEMPLE_ADULT_PAST_BOULDERS,
|
||||||
RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR,
|
RR_SPIRIT_TEMPLE_ADULT_CLIMB,
|
||||||
|
RR_SPIRIT_TEMPLE_STATUE_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_STATUE_ROOM_EAST,
|
||||||
|
RR_SPIRIT_TEMPLE_STAIRS_TO_BLOCK_PUZZLE,
|
||||||
|
RR_SPIRIT_TEMPLE_BLOCK_PUZZLE,
|
||||||
|
RR_SPIRIT_TEMPLE_WEST_STAIRS_TO_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_WEST_IRON_KNUCKLE,
|
||||||
|
RR_SPIRIT_TEMPLE_EXIT_TO_SILVER_GAUNTLETS_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_SILVER_GAUNTLETS_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_STAIRS_TO_BEAMOS_PITS,
|
||||||
|
RR_SPIRIT_TEMPLE_BEAMOS_PITS,
|
||||||
|
RR_SPIRIT_TEMPLE_FOUR_ARMOS,
|
||||||
|
RR_SPIRIT_TEMPLE_FOUR_ARMOS_SIDE_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_EAST_STAIRS_TO_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_EAST_IRON_KNUCKLE,
|
||||||
|
RR_SPIRIT_TEMPLE_EXIT_TO_MIRROR_SHIELD_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_MIRROR_SHIELD_HAND,
|
||||||
|
RR_SPIRIT_TEMPLE_BIG_WALL,
|
||||||
|
RR_SPIRIT_TEMPLE_4F_CENTRAL,
|
||||||
|
RR_SPIRIT_TEMPLE_BOSS_KEY_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_BIG_MIRROR_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_BIG_MIRROR_CAVE,
|
||||||
|
RR_SPIRIT_TEMPLE_SHORTCUT,
|
||||||
RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD,
|
RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD,
|
||||||
|
|
||||||
RR_SPIRIT_TEMPLE_MQ_LOBBY,
|
RR_SPIRIT_TEMPLE_MQ_LOBBY,
|
||||||
|
@ -864,8 +933,11 @@ typedef enum {
|
||||||
RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE,
|
RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE,
|
||||||
RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_FLAMETHROWER_STAIRS,
|
||||||
RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_WEST_STAIRS_TO_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE,
|
RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_EXIT_TO_SILVER_GAUNTLETS_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND,
|
RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH,
|
RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH,
|
||||||
RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH,
|
RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH,
|
||||||
|
@ -876,10 +948,13 @@ typedef enum {
|
||||||
RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_LOWER,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_FIRE_WALL_STAIRS_UPPER,
|
||||||
RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND,
|
RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE,
|
RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE,
|
||||||
|
RR_SPIRIT_TEMPLE_MQ_EXIT_TO_MIRROR_SHIELD_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND,
|
RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND,
|
||||||
RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM,
|
RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM,
|
||||||
RR_SPIRIT_TEMPLE_MQ_BIG_WALL,
|
RR_SPIRIT_TEMPLE_MQ_BIG_WALL,
|
||||||
|
@ -893,16 +968,35 @@ typedef enum {
|
||||||
RR_SPIRIT_TEMPLE_BOSS_ROOM,
|
RR_SPIRIT_TEMPLE_BOSS_ROOM,
|
||||||
|
|
||||||
RR_SHADOW_TEMPLE_BEGINNING,
|
RR_SHADOW_TEMPLE_BEGINNING,
|
||||||
|
RR_SHADOW_TEMPLE_WHISPERING_WALLS,
|
||||||
|
RR_SHADOW_TEMPLE_MAP_ROOM,
|
||||||
|
RR_SHADOW_TEMPLE_DEAD_HAND,
|
||||||
RR_SHADOW_TEMPLE_FIRST_BEAMOS,
|
RR_SHADOW_TEMPLE_FIRST_BEAMOS,
|
||||||
|
RR_SHADOW_TEMPLE_COMPASS_ROOM,
|
||||||
|
RR_SHADOW_TEMPLE_SPINNING_BLADES,
|
||||||
RR_SHADOW_TEMPLE_HUGE_PIT,
|
RR_SHADOW_TEMPLE_HUGE_PIT,
|
||||||
|
RR_SHADOW_TEMPLE_INVISIBLE_SPINNING_BLADES,
|
||||||
|
RR_SHADOW_TEMPLE_INVISIBLE_SPIKES,
|
||||||
|
RR_SHADOW_TEMPLE_SKULL_JAR,
|
||||||
RR_SHADOW_TEMPLE_WIND_TUNNEL,
|
RR_SHADOW_TEMPLE_WIND_TUNNEL,
|
||||||
|
RR_SHADOW_TEMPLE_WIND_TUNNEL_HINT_ROOM,
|
||||||
|
RR_SHADOW_TEMPLE_ROOM_TO_BOAT,
|
||||||
|
RR_SHADOW_TEMPLE_DOCK,
|
||||||
RR_SHADOW_TEMPLE_BEYOND_BOAT,
|
RR_SHADOW_TEMPLE_BEYOND_BOAT,
|
||||||
|
RR_SHADOW_TEMPLE_MAZE,
|
||||||
|
RR_SHADOW_TEMPLE_X_CROSS,
|
||||||
|
RR_SHADOW_TEMPLE_THREE_SKULL_JARS,
|
||||||
|
RR_SHADOW_TEMPLE_WOODEN_SPIKES,
|
||||||
|
RR_SHADOW_TEMPLE_PRE_BOSS_ROOM,
|
||||||
|
|
||||||
RR_SHADOW_TEMPLE_MQ_ENTRYWAY,
|
RR_SHADOW_TEMPLE_MQ_ENTRYWAY,
|
||||||
RR_SHADOW_TEMPLE_MQ_BEGINNING,
|
RR_SHADOW_TEMPLE_MQ_BEGINNING,
|
||||||
RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM,
|
RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM,
|
||||||
RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA,
|
RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS,
|
||||||
|
RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_REDEADS,
|
||||||
|
RR_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_DEAD_HAND,
|
||||||
RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS,
|
RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS,
|
||||||
|
RR_SHADOW_TEMPLE_MQ_B2_GIBDO_ROOM,
|
||||||
RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM,
|
RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM,
|
||||||
RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH,
|
RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH,
|
||||||
RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR,
|
RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR,
|
||||||
|
@ -921,6 +1015,8 @@ typedef enum {
|
||||||
RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM,
|
RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM,
|
||||||
RR_SHADOW_TEMPLE_MQ_BOSS_DOOR,
|
RR_SHADOW_TEMPLE_MQ_BOSS_DOOR,
|
||||||
RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE,
|
RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE,
|
||||||
|
RR_SHADOW_TEMPLE_MQ_X_CROSS,
|
||||||
|
RR_SHADOW_TEMPLE_MQ_THREE_SKULL_JARS,
|
||||||
RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM,
|
RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM,
|
||||||
|
|
||||||
RR_SHADOW_TEMPLE_BOSS_ENTRYWAY,
|
RR_SHADOW_TEMPLE_BOSS_ENTRYWAY,
|
||||||
|
@ -931,7 +1027,8 @@ typedef enum {
|
||||||
RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM,
|
RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM,
|
RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE,
|
RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE,
|
||||||
RR_BOTTOM_OF_THE_WELL_INNER_ROOMS,
|
RR_BOTTOM_OF_THE_WELL_EAST_INNER_ROOM,
|
||||||
|
RR_BOTTOM_OF_THE_WELL_WEST_INNER_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM,
|
RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM,
|
RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_BASEMENT,
|
RR_BOTTOM_OF_THE_WELL_BASEMENT,
|
||||||
|
@ -941,14 +1038,18 @@ typedef enum {
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER,
|
RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH,
|
RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM,
|
RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM,
|
||||||
|
RR_BOTTOM_OF_THE_WELL_MQ_FLOORMASTER_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE,
|
RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM,
|
RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE,
|
RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE,
|
||||||
|
RR_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM,
|
||||||
|
RR_BOTTOM_OF_THE_WELL_MQ_WEST_INNER_ROOM,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT,
|
RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT,
|
||||||
RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM,
|
RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM,
|
||||||
|
|
||||||
RR_ICE_CAVERN_BEGINNING,
|
RR_ICE_CAVERN_BEGINNING,
|
||||||
RR_ICE_CAVERN_MAIN,
|
RR_ICE_CAVERN_MAIN,
|
||||||
|
RR_ICE_CAVERN_FINAL_ROOM,
|
||||||
|
|
||||||
RR_ICE_CAVERN_MQ_BEGINNING,
|
RR_ICE_CAVERN_MQ_BEGINNING,
|
||||||
RR_ICE_CAVERN_MQ_HUB,
|
RR_ICE_CAVERN_MQ_HUB,
|
||||||
|
@ -959,17 +1060,22 @@ typedef enum {
|
||||||
RR_ICE_CAVERN_MQ_COMPASS_ROOM,
|
RR_ICE_CAVERN_MQ_COMPASS_ROOM,
|
||||||
|
|
||||||
RR_GERUDO_TRAINING_GROUND_LOBBY,
|
RR_GERUDO_TRAINING_GROUND_LOBBY,
|
||||||
|
RR_GERUDO_TRAINING_GROUND_SAND_ROOM,
|
||||||
|
RR_GERUDO_TRAINING_GROUND_LEFT_SIDE,
|
||||||
RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE,
|
RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE,
|
||||||
RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT,
|
RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT,
|
||||||
|
RR_GERUDO_TRAINING_GROUND_DINALFOS,
|
||||||
RR_GERUDO_TRAINING_GROUND_LAVA_ROOM,
|
RR_GERUDO_TRAINING_GROUND_LAVA_ROOM,
|
||||||
|
RR_GERUDO_TRAINING_GROUND_UNDERWATER,
|
||||||
RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM,
|
RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM,
|
||||||
RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER,
|
RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER,
|
||||||
RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER,
|
RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER,
|
||||||
|
RR_GERUDO_TRAINING_GROUND_ABOVE_MAZE,
|
||||||
RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM,
|
RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM,
|
||||||
RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM,
|
RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM,
|
||||||
|
|
||||||
RR_GERUDO_TRAINING_GROUND_MQ_LOBBY,
|
RR_GERUDO_TRAINING_GROUND_MQ_LOBBY,
|
||||||
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM,
|
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_BY_LOBBY,
|
||||||
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK,
|
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK,
|
||||||
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER,
|
RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER,
|
||||||
RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM,
|
RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM,
|
||||||
|
@ -992,12 +1098,24 @@ typedef enum {
|
||||||
RR_GANONS_CASTLE_LOBBY,
|
RR_GANONS_CASTLE_LOBBY,
|
||||||
RR_GANONS_CASTLE_MAIN,
|
RR_GANONS_CASTLE_MAIN,
|
||||||
RR_GANONS_CASTLE_DEKU_SCRUBS,
|
RR_GANONS_CASTLE_DEKU_SCRUBS,
|
||||||
RR_GANONS_CASTLE_FOREST_TRIAL,
|
RR_GANONS_CASTLE_FOREST_TRIAL_WOLFOS_ROOM,
|
||||||
RR_GANONS_CASTLE_FIRE_TRIAL,
|
RR_GANONS_CASTLE_FOREST_TRIAL_BEAMOS_ROOM,
|
||||||
RR_GANONS_CASTLE_WATER_TRIAL,
|
RR_GANONS_CASTLE_FOREST_TRIAL_FINAL_ROOM,
|
||||||
RR_GANONS_CASTLE_SHADOW_TRIAL,
|
RR_GANONS_CASTLE_FIRE_TRIAL_MAIN_ROOM,
|
||||||
RR_GANONS_CASTLE_SPIRIT_TRIAL,
|
RR_GANONS_CASTLE_FIRE_TRIAL_FINAL_ROOM,
|
||||||
RR_GANONS_CASTLE_LIGHT_TRIAL,
|
RR_GANONS_CASTLE_WATER_TRIAL_BLUE_FIRE_ROOM,
|
||||||
|
RR_GANONS_CASTLE_WATER_TRIAL_BLOCK_ROOM,
|
||||||
|
RR_GANONS_CASTLE_WATER_TRIAL_FINAL_ROOM,
|
||||||
|
RR_GANONS_CASTLE_SHADOW_TRIAL_MAIN_ROOM,
|
||||||
|
RR_GANONS_CASTLE_SHADOW_TRIAL_FINAL_ROOM,
|
||||||
|
RR_GANONS_CASTLE_SPIRIT_TRIAL_BEAMOS_ROOM,
|
||||||
|
RR_GANONS_CASTLE_SPIRIT_TRIAL_BEFORE_SWITCH,
|
||||||
|
RR_GANONS_CASTLE_SPIRIT_TRIAL_AFTER_SWITCH,
|
||||||
|
RR_GANONS_CASTLE_SPIRIT_TRIAL_FINAL_ROOM,
|
||||||
|
RR_GANONS_CASTLE_LIGHT_TRIAL_CHESTS_ROOM,
|
||||||
|
RR_GANONS_CASTLE_LIGHT_TRIAL_TRIFORCE_ROOM,
|
||||||
|
RR_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_ROOM,
|
||||||
|
RR_GANONS_CASTLE_LIGHT_TRIAL_FINAL_ROOM,
|
||||||
|
|
||||||
RR_GANONS_CASTLE_MQ_LOBBY,
|
RR_GANONS_CASTLE_MQ_LOBBY,
|
||||||
RR_GANONS_CASTLE_MQ_MAIN,
|
RR_GANONS_CASTLE_MQ_MAIN,
|
||||||
|
@ -1027,9 +1145,13 @@ typedef enum {
|
||||||
RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM,
|
RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM,
|
||||||
|
|
||||||
RR_GANONS_TOWER_ENTRYWAY,
|
RR_GANONS_TOWER_ENTRYWAY,
|
||||||
|
RR_GANONS_TOWER_STAIRS_1,
|
||||||
RR_GANONS_TOWER_FLOOR_1,
|
RR_GANONS_TOWER_FLOOR_1,
|
||||||
|
RR_GANONS_TOWER_STAIRS_2,
|
||||||
RR_GANONS_TOWER_FLOOR_2,
|
RR_GANONS_TOWER_FLOOR_2,
|
||||||
|
RR_GANONS_TOWER_STAIRS_3,
|
||||||
RR_GANONS_TOWER_FLOOR_3,
|
RR_GANONS_TOWER_FLOOR_3,
|
||||||
|
RR_GANONS_TOWER_STAIRS_4,
|
||||||
RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR,
|
RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR,
|
||||||
RR_GANONS_TOWER_GANONDORF_LAIR,
|
RR_GANONS_TOWER_GANONDORF_LAIR,
|
||||||
RR_GANONS_CASTLE_ESCAPE,
|
RR_GANONS_CASTLE_ESCAPE,
|
||||||
|
@ -5856,6 +5978,7 @@ typedef enum {
|
||||||
RSK_SHUFFLE_OWL_DROPS,
|
RSK_SHUFFLE_OWL_DROPS,
|
||||||
RSK_SHUFFLE_WARP_SONGS,
|
RSK_SHUFFLE_WARP_SONGS,
|
||||||
RSK_SHUFFLE_OVERWORLD_SPAWNS,
|
RSK_SHUFFLE_OVERWORLD_SPAWNS,
|
||||||
|
RSK_SHUFFLE_DUNGEON_DOORS,
|
||||||
RSK_MIXED_ENTRANCE_POOLS,
|
RSK_MIXED_ENTRANCE_POOLS,
|
||||||
RSK_MIX_DUNGEON_ENTRANCES,
|
RSK_MIX_DUNGEON_ENTRANCES,
|
||||||
RSK_MIX_BOSS_ENTRANCES,
|
RSK_MIX_BOSS_ENTRANCES,
|
||||||
|
@ -6135,6 +6258,13 @@ typedef enum {
|
||||||
RO_INTERIOR_ENTRANCE_SHUFFLE_ALL,
|
RO_INTERIOR_ENTRANCE_SHUFFLE_ALL,
|
||||||
} RandoOptionInteriorEntranceShuffle;
|
} RandoOptionInteriorEntranceShuffle;
|
||||||
|
|
||||||
|
// Shuffle Dungeon Doors (Off, On, Mix)
|
||||||
|
typedef enum {
|
||||||
|
RO_SHUFFLE_DUNGEON_DOORS_OFF,
|
||||||
|
RO_SHUFFLE_DUNGEON_DOORS_ON,
|
||||||
|
RO_SHUFFLE_DUNGEON_DOORS_MIX,
|
||||||
|
} RandoOptionShuffleDungeonDoors;
|
||||||
|
|
||||||
// Song shuffle Settings (Song locations, Dungeon rewards, anywhere)
|
// Song shuffle Settings (Song locations, Dungeon rewards, anywhere)
|
||||||
typedef enum {
|
typedef enum {
|
||||||
RO_SONG_SHUFFLE_SONG_LOCATIONS,
|
RO_SONG_SHUFFLE_SONG_LOCATIONS,
|
||||||
|
@ -6472,9 +6602,11 @@ typedef enum {
|
||||||
|
|
||||||
#define ENTRANCE_GROTTO_LOAD_START 0x0700
|
#define ENTRANCE_GROTTO_LOAD_START 0x0700
|
||||||
#define ENTRANCE_GROTTO_EXIT_START 0x0800
|
#define ENTRANCE_GROTTO_EXIT_START 0x0800
|
||||||
|
#define ENTRANCE_DOOR_START 0x0900
|
||||||
|
|
||||||
#define ENTRANCE_GROTTO_LOAD(index) ENTRANCE_GROTTO_LOAD_START + index
|
#define ENTRANCE_GROTTO_LOAD(index) (ENTRANCE_GROTTO_LOAD_START + index)
|
||||||
#define ENTRANCE_GROTTO_EXIT(index) ENTRANCE_GROTTO_EXIT_START + index
|
#define ENTRANCE_GROTTO_EXIT(index) (ENTRANCE_GROTTO_EXIT_START + index)
|
||||||
|
#define ENTRANCE_DOOR(index) (ENTRANCE_DOOR_START + index)
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
/* 0x00 */ GROTTO_COLOSSUS_OFFSET,
|
/* 0x00 */ GROTTO_COLOSSUS_OFFSET,
|
||||||
|
|
|
@ -222,6 +222,10 @@ void Entrance_Init(void) {
|
||||||
continue;
|
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
|
// Overwrite the indices which we want to shuffle, leaving the rest as they are
|
||||||
entranceOverrideTable[originalIndex] = overrideIndex;
|
entranceOverrideTable[originalIndex] = overrideIndex;
|
||||||
|
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
#define ENTRANCE_TABLE_SIZE ENTR_MAX
|
#define ENTRANCE_TABLE_SIZE ENTR_MAX
|
||||||
|
|
||||||
#define MAX_ENTRANCE_RANDO_USED_INDEX 0x0820
|
#define MAX_ENTRANCE_RANDO_USED_INDEX 0x0820
|
||||||
#define ENTRANCE_OVERRIDES_MAX_COUNT 267 // 19 one-way entrances + 124 two-way entrances (x2)
|
#define ENTRANCE_OVERRIDES_MAX_COUNT 667 // 19 one-way entrances + 124 two-way entrances (x2) + 200? doors (x2)
|
||||||
#define SHUFFLEABLE_BOSS_COUNT 8
|
#define SHUFFLEABLE_BOSS_COUNT 8
|
||||||
|
|
||||||
#define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1
|
#define SAVEFILE_ENTRANCES_DISCOVERED_IDX_COUNT 66 // Max entrance rando index is 0x0820, (2080 / 32 == 65) + 1
|
||||||
|
|
|
@ -64,7 +64,7 @@ static std::string spoilerEntranceGroupNames[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static std::string groupTypeNames[] = {
|
static std::string groupTypeNames[] = {
|
||||||
"One Way", "Overworld", "Interior", "Grotto", "Dungeon",
|
"One Way", "Overworld", "Interior", "Grotto", "Dungeon", "Door",
|
||||||
};
|
};
|
||||||
|
|
||||||
// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and
|
// Entrance data for the tracker taken from the 3ds rando entrance tracker, and supplemented with scene/spawn info and
|
||||||
|
@ -376,10 +376,405 @@ const EntranceData entranceData[] = {
|
||||||
{ ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, ENTR_POTION_SHOP_KAKARIKO_1, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Behind Pillar", "OGC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle", 1},
|
{ ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, ENTR_POTION_SHOP_KAKARIKO_1, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Behind Pillar", "OGC Great Fairy Fountain", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle", 1},
|
||||||
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
{ ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, SINGLE_SCENE_INFO(SCENE_OUTSIDE_GANONS_CASTLE), "OGC Rainbow Bridge Exit", "Inside Ganon's Castle Entrance", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc", 1},
|
||||||
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
{ ENTR_POTION_SHOP_KAKARIKO_1, ENTR_GREAT_FAIRYS_FOUNTAIN_MAGIC_OGC_DD, {{ SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, 0x02 }}, "OGC Great Fairy Fountain", "OGC Behind Pillar", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_INTERIOR, "outside ganon's castle"},
|
||||||
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"}
|
{ ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE, SINGLE_SCENE_INFO(SCENE_INSIDE_GANONS_CASTLE), "Inside Ganon's Castle Entrance", "OGC Rainbow Bridge Exit", ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_GROUP_HYRULE_CASTLE, ENTRANCE_TYPE_DUNGEON, "outside ganon's castle,gc"},
|
||||||
|
|
||||||
// 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
|
// Check if Link is in the area and return that scene/entrance for tracking
|
||||||
s8 LinkIsInArea(const EntranceData* entrance) {
|
s8 LinkIsInArea(const EntranceData* entrance) {
|
||||||
|
|
|
@ -39,6 +39,7 @@ typedef enum {
|
||||||
ENTRANCE_TYPE_INTERIOR,
|
ENTRANCE_TYPE_INTERIOR,
|
||||||
ENTRANCE_TYPE_GROTTO,
|
ENTRANCE_TYPE_GROTTO,
|
||||||
ENTRANCE_TYPE_DUNGEON,
|
ENTRANCE_TYPE_DUNGEON,
|
||||||
|
ENTRANCE_TYPE_DOOR,
|
||||||
ENTRANCE_TYPE_COUNT,
|
ENTRANCE_TYPE_COUNT,
|
||||||
} TrackerEntranceType;
|
} TrackerEntranceType;
|
||||||
|
|
||||||
|
|
|
@ -147,6 +147,7 @@ void Settings::CreateOptions() {
|
||||||
OPT_BOOL(RSK_SHUFFLE_OWL_DROPS, "Owl Drops", CVAR_RANDOMIZER_SETTING("ShuffleOwlDrops"), mOptionDescriptions[RSK_SHUFFLE_OWL_DROPS]);
|
OPT_BOOL(RSK_SHUFFLE_OWL_DROPS, "Owl Drops", CVAR_RANDOMIZER_SETTING("ShuffleOwlDrops"), mOptionDescriptions[RSK_SHUFFLE_OWL_DROPS]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_WARP_SONGS, "Warp Songs", CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), mOptionDescriptions[RSK_SHUFFLE_WARP_SONGS]);
|
OPT_BOOL(RSK_SHUFFLE_WARP_SONGS, "Warp Songs", CVAR_RANDOMIZER_SETTING("ShuffleWarpSongs"), mOptionDescriptions[RSK_SHUFFLE_WARP_SONGS]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_OVERWORLD_SPAWNS, "Overworld Spawns", CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]);
|
OPT_BOOL(RSK_SHUFFLE_OVERWORLD_SPAWNS, "Overworld Spawns", CVAR_RANDOMIZER_SETTING("ShuffleOverworldSpawns"), mOptionDescriptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]);
|
||||||
|
OPT_U8(RSK_SHUFFLE_DUNGEON_DOORS, "Dungeon Doors", {"Off", "On", "Mix"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleDungeonDoors"), mOptionDescriptions[RSK_SHUFFLE_DUNGEON_DOORS], WidgetType::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_BOOL(RSK_MIXED_ENTRANCE_POOLS, "Mixed Entrance Pools", CVAR_RANDOMIZER_SETTING("MixedEntrances"), mOptionDescriptions[RSK_MIXED_ENTRANCE_POOLS]);
|
||||||
OPT_BOOL(RSK_MIX_DUNGEON_ENTRANCES, "Mix Dungeons", CVAR_RANDOMIZER_SETTING("MixDungeons"), mOptionDescriptions[RSK_MIX_DUNGEON_ENTRANCES], IMFLAG_NONE);
|
OPT_BOOL(RSK_MIX_DUNGEON_ENTRANCES, "Mix Dungeons", CVAR_RANDOMIZER_SETTING("MixDungeons"), mOptionDescriptions[RSK_MIX_DUNGEON_ENTRANCES], IMFLAG_NONE);
|
||||||
OPT_BOOL(RSK_MIX_BOSS_ENTRANCES, "Mix Bosses", CVAR_RANDOMIZER_SETTING("MixBosses"), mOptionDescriptions[RSK_MIX_BOSS_ENTRANCES], IMFLAG_NONE);
|
OPT_BOOL(RSK_MIX_BOSS_ENTRANCES, "Mix Bosses", CVAR_RANDOMIZER_SETTING("MixBosses"), mOptionDescriptions[RSK_MIX_BOSS_ENTRANCES], IMFLAG_NONE);
|
||||||
|
@ -1190,10 +1191,10 @@ void Settings::CreateOptions() {
|
||||||
{ &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
{ &mOptions[RSK_SHUFFLE_DUNGEON_ENTRANCES], &mOptions[RSK_SHUFFLE_BOSS_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
&mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES], &mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES],
|
||||||
&mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES], &mOptions[RSK_SHUFFLE_OWL_DROPS], &mOptions[RSK_SHUFFLE_WARP_SONGS],
|
&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_SHUFFLE_DUNGEON_DOORS], &mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS],
|
||||||
&mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES], &mOptions[RSK_MIX_BOSS_ENTRANCES],
|
&mOptions[RSK_DECOUPLED_ENTRANCES], &mOptions[RSK_MIXED_ENTRANCE_POOLS], &mOptions[RSK_MIX_DUNGEON_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_OVERWORLD_ENTRANCES], &mOptions[RSK_MIX_INTERIOR_ENTRANCES],
|
&mOptions[RSK_MIX_BOSS_ENTRANCES], &mOptions[RSK_MIX_OVERWORLD_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_GROTTO_ENTRANCES] },
|
&mOptions[RSK_MIX_INTERIOR_ENTRANCES], &mOptions[RSK_MIX_GROTTO_ENTRANCES] },
|
||||||
WidgetContainerType::COLUMN);
|
WidgetContainerType::COLUMN);
|
||||||
mOptionGroups[RSG_WORLD_IMGUI_TABLE] = OptionGroup::SubGroup("World",
|
mOptionGroups[RSG_WORLD_IMGUI_TABLE] = OptionGroup::SubGroup("World",
|
||||||
{
|
{
|
||||||
|
@ -1428,6 +1429,7 @@ void Settings::CreateOptions() {
|
||||||
&mOptions[RSK_SHUFFLE_OWL_DROPS],
|
&mOptions[RSK_SHUFFLE_OWL_DROPS],
|
||||||
&mOptions[RSK_SHUFFLE_WARP_SONGS],
|
&mOptions[RSK_SHUFFLE_WARP_SONGS],
|
||||||
&mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS],
|
&mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS],
|
||||||
|
&mOptions[RSK_SHUFFLE_DUNGEON_DOORS],
|
||||||
&mOptions[RSK_MIXED_ENTRANCE_POOLS],
|
&mOptions[RSK_MIXED_ENTRANCE_POOLS],
|
||||||
&mOptions[RSK_MIX_DUNGEON_ENTRANCES],
|
&mOptions[RSK_MIX_DUNGEON_ENTRANCES],
|
||||||
&mOptions[RSK_MIX_BOSS_ENTRANCES],
|
&mOptions[RSK_MIX_BOSS_ENTRANCES],
|
||||||
|
@ -2530,7 +2532,7 @@ void Context::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocation
|
||||||
mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] ||
|
mOptions[RSK_SHUFFLE_OVERWORLD_ENTRANCES] ||
|
||||||
mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].IsNot(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF) ||
|
mOptions[RSK_SHUFFLE_INTERIOR_ENTRANCES].IsNot(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF) ||
|
||||||
mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] ||
|
mOptions[RSK_SHUFFLE_GROTTO_ENTRANCES] || mOptions[RSK_SHUFFLE_OWL_DROPS] || mOptions[RSK_SHUFFLE_WARP_SONGS] ||
|
||||||
mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS]) {
|
mOptions[RSK_SHUFFLE_OVERWORLD_SPAWNS] || mOptions[RSK_SHUFFLE_DUNGEON_DOORS]) {
|
||||||
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_ON);
|
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_ON);
|
||||||
} else {
|
} else {
|
||||||
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF);
|
mOptions[RSK_SHUFFLE_ENTRANCES].Set(RO_GENERIC_OFF);
|
||||||
|
|
|
@ -958,10 +958,11 @@ void TimeSaverOnActorInitHandler(void* actorRef) {
|
||||||
// This is a bit of a hack, we can't effectively override the behavior of the torches
|
// This is a bit of a hack, we can't effectively override the behavior of the torches
|
||||||
// or poes from which the cutscene is triggered until we can have a "BeforeActorInit" hook.
|
// or poes from which the cutscene is triggered until we can have a "BeforeActorInit" hook.
|
||||||
// So for now we're just going to set the flag before they get to the room the cutscene is in
|
// 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_ST && !Flags_GetSwitch(gPlayState, 0x1B) &&
|
if (gPlayState->sceneNum == SCENE_FOREST_TEMPLE && actor->id == ACTOR_EN_DOOR &&
|
||||||
!Flags_GetSwitch(gPlayState, 0x1C)) {
|
!Flags_GetSwitch(gPlayState, 0x1B) && !Flags_GetSwitch(gPlayState, 0x1C)) {
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) &&
|
if ((IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_DOORS)) ||
|
||||||
!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0)) {
|
(CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO) &&
|
||||||
|
!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.GlitchAiding"), 0))) {
|
||||||
Flags_SetSwitch(gPlayState, 0x1B);
|
Flags_SetSwitch(gPlayState, 0x1B);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,10 +35,16 @@
|
||||||
#include "soh/resource/type/scenecommand/SetEchoSettings.h"
|
#include "soh/resource/type/scenecommand/SetEchoSettings.h"
|
||||||
#include "soh/resource/type/scenecommand/SetAlternateHeaders.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 Ship::IResource* OTRPlay_LoadFile(PlayState* play, const char* fileName);
|
||||||
extern "C" s32 Object_Spawn(ObjectContext* objectCtx, s16 objectId);
|
extern "C" s32 Object_Spawn(ObjectContext* objectCtx, s16 objectId);
|
||||||
extern "C" RomFile sNaviMsgFiles[];
|
extern "C" RomFile sNaviMsgFiles[];
|
||||||
s32 OTRScene_ExecuteCommands(PlayState* play, SOH::Scene* scene);
|
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) {
|
bool Scene_CommandSpawnList(PlayState* play, SOH::ISceneCommand* cmd) {
|
||||||
// SOH::SetStartPositionList* cmdStartPos = std::static_pointer_cast<SOH::SetStartPositionList>(cmd);
|
// SOH::SetStartPositionList* cmdStartPos = std::static_pointer_cast<SOH::SetStartPositionList>(cmd);
|
||||||
|
@ -485,7 +491,114 @@ extern "C" s32 OTRfunc_800973FC(PlayState* play, RoomContext* roomCtx) {
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" s32 OTRfunc_8009728C(PlayState* play, RoomContext* roomCtx, s32 roomNum) {
|
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.moveFlags = 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;
|
||||||
|
static bool hasRuto;
|
||||||
|
// TODO hasRuto = player->heldActor != NULL && player->heldActor->id == ACTOR_EN_RU1;
|
||||||
|
hookId = REGISTER_VB_SHOULD(VB_INFLICT_VOID_DAMAGE, {
|
||||||
|
*should = false;
|
||||||
|
if (hasRuto) {
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
EnRu1* ruto = (EnRu1*)Actor_SpawnAsChild(
|
||||||
|
&gPlayState->actorCtx, &player->actor, gPlayState, ACTOR_EN_RU1,
|
||||||
|
player->actor.world.pos.x, player->actor.world.pos.y, player->actor.world.pos.z, 0,
|
||||||
|
0, 0, 0x203);
|
||||||
|
ruto->unk_370 = 0;
|
||||||
|
Animation_Change(&ruto->skelAnime, (AnimationHeader*)&gRutoChildSittingAnim, 1.0f, 0,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildSittingAnim), ANIMMODE_LOOP,
|
||||||
|
-8.0f);
|
||||||
|
ruto->action = 0;
|
||||||
|
ruto->roomNum3 = gPlayState->roomCtx.curRoom.num;
|
||||||
|
ruto->drawConfig = 1;
|
||||||
|
player->stateFlags1 |= PLAYER_STATE1_CARRYING_ACTOR;
|
||||||
|
player->heldActor = &ruto->actor;
|
||||||
|
}
|
||||||
|
GameInteractor::Instance->UnregisterGameHookForID<GameInteractor::OnVanillaBehavior>(
|
||||||
|
hookId);
|
||||||
|
});
|
||||||
|
return 0;
|
||||||
|
} else if (play->interfaceCtx.mapRoomNum != roomNum) {
|
||||||
|
Map_InitRoomData(play, roomNum);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (roomCtx->status == 0) {
|
if (roomCtx->status == 0) {
|
||||||
roomCtx->prevRoom = roomCtx->curRoom;
|
roomCtx->prevRoom = roomCtx->curRoom;
|
||||||
|
@ -498,7 +611,7 @@ extern "C" s32 OTRfunc_8009728C(PlayState* play, RoomContext* roomCtx, s32 roomN
|
||||||
if (roomNum >= play->numRooms)
|
if (roomNum >= play->numRooms)
|
||||||
return 0; // UH OH
|
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 =
|
roomCtx->unk_34 =
|
||||||
(void*)ALIGN16((uintptr_t)roomCtx->bufPtrs[roomCtx->unk_30] - ((size + 8) * roomCtx->unk_30 + 7));
|
(void*)ALIGN16((uintptr_t)roomCtx->bufPtrs[roomCtx->unk_30] - ((size + 8) * roomCtx->unk_30 + 7));
|
||||||
|
|
||||||
|
|
|
@ -557,7 +557,8 @@ void func_80997220(DoorShutter* this, PlayState* play) {
|
||||||
Vec3f vec;
|
Vec3f vec;
|
||||||
|
|
||||||
Actor_WorldToActorCoords(&this->dyna.actor, &vec, &player->actor.world.pos);
|
Actor_WorldToActorCoords(&this->dyna.actor, &vec, &player->actor.world.pos);
|
||||||
this->dyna.actor.room =
|
this->dyna.actor.room = play->roomCtx.curRoom.num;
|
||||||
|
/*
|
||||||
play->transiActorCtx.list[(u16)this->dyna.actor.params >> 0xA].sides[(vec.z < 0.0f) ? 0 : 1].room;
|
play->transiActorCtx.list[(u16)this->dyna.actor.params >> 0xA].sides[(vec.z < 0.0f) ? 0 : 1].room;
|
||||||
if (room != this->dyna.actor.room) {
|
if (room != this->dyna.actor.room) {
|
||||||
Room tempRoom = play->roomCtx.curRoom;
|
Room tempRoom = play->roomCtx.curRoom;
|
||||||
|
@ -566,14 +567,17 @@ void func_80997220(DoorShutter* this, PlayState* play) {
|
||||||
play->roomCtx.prevRoom = tempRoom;
|
play->roomCtx.prevRoom = tempRoom;
|
||||||
play->roomCtx.unk_30 ^= 1;
|
play->roomCtx.unk_30 ^= 1;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
func_80097534(play, &play->roomCtx);
|
func_80097534(play, &play->roomCtx);
|
||||||
Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0x0EFF);
|
Play_SetupRespawnPoint(play, RESPAWN_MODE_DOWN, 0x0EFF);
|
||||||
}
|
}
|
||||||
this->unk_164 = 0;
|
this->unk_164 = 0;
|
||||||
this->dyna.actor.velocity.y = 0.0f;
|
this->dyna.actor.velocity.y = 0.0f;
|
||||||
if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) {
|
if (DoorShutter_SetupDoor(this, play) && !(player->stateFlags1 & PLAYER_STATE1_CARRYING_ACTOR)) {
|
||||||
DoorShutter_SetupAction(this, func_80997568);
|
// DoorShutter_SetupAction(this, func_80997568);
|
||||||
Player_SetCsActionWithHaltedActors(play, NULL, 2);
|
// Player_SetCsActionWithHaltedActors(play, NULL, 2);
|
||||||
|
Player_SetCsActionWithHaltedActors(play, NULL, 7);
|
||||||
|
DoorShutter_SetupDoor(this, play);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue