mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 06:13:45 -07:00
Merge 7042e59307
into 7ecefa8f90
This commit is contained in:
commit
2a29985fe4
43 changed files with 1189 additions and 1163 deletions
|
@ -862,7 +862,8 @@ static void AssumedFill(const std::vector<RandomizerGet>& items, const std::vect
|
|||
return;
|
||||
}
|
||||
|
||||
if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC)) {
|
||||
if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) ||
|
||||
(logic->IsNNL() && !ctx->GetOption(RSK_ALL_LOCATIONS_REACHABLE))) {
|
||||
FastFill(items, GetEmptyLocations(allowedLocations), true);
|
||||
return;
|
||||
}
|
||||
|
@ -878,6 +879,7 @@ static void AssumedFill(const std::vector<RandomizerGet>& items, const std::vect
|
|||
return;
|
||||
}
|
||||
unsuccessfulPlacement = false;
|
||||
|
||||
std::vector<RandomizerGet> itemsToPlace = items;
|
||||
|
||||
// copy all not yet placed advancement items so that we can apply their effects for the fill algorithm
|
||||
|
|
|
@ -125,7 +125,7 @@ void Context::PlaceItemInLocation(const RandomizerCheck locKey, const Randomizer
|
|||
StaticData::GetLocation(locKey)->GetName() + "\n");
|
||||
|
||||
if (applyEffectImmediately || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_GLITCHLESS) ||
|
||||
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_VANILLA)) {
|
||||
mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_NEARLY_NO_LOGIC) || mOptions[RSK_LOGIC_RULES].Is(RO_LOGIC_VANILLA)) {
|
||||
StaticData::RetrieveItem(item).ApplyEffect();
|
||||
}
|
||||
|
||||
|
|
|
@ -10,8 +10,9 @@
|
|||
namespace Rando {
|
||||
EntranceLinkInfo NO_RETURN_ENTRANCE = { EntranceType::None, RR_NONE, RR_NONE, -1 };
|
||||
|
||||
Entrance::Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool spreadsAreasWithPriority_)
|
||||
: connectedRegion(connectedRegion_), condition_function(condition_function_),
|
||||
Entrance::Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool force_logic_,
|
||||
bool spreadsAreasWithPriority_)
|
||||
: connectedRegion(connectedRegion_), condition_function(condition_function_), force_logic(force_logic_),
|
||||
spreadsAreasWithPriority(spreadsAreasWithPriority_) {
|
||||
originalConnectedRegion = connectedRegion_;
|
||||
}
|
||||
|
@ -24,6 +25,8 @@ bool Entrance::GetConditionsMet() const {
|
|||
auto ctx = Rando::Context::GetInstance();
|
||||
if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) {
|
||||
return condition_function();
|
||||
} else if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NEARLY_NO_LOGIC)) {
|
||||
return !force_logic || condition_function();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -38,7 +38,8 @@ enum class EntranceType {
|
|||
|
||||
class Entrance {
|
||||
public:
|
||||
Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool spreadsAreasWithPriority_ = true);
|
||||
Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool force_logic = false,
|
||||
bool spreadsAreasWithPriority_ = true);
|
||||
void SetCondition(ConditionFn newCondition);
|
||||
bool GetConditionsMet() const;
|
||||
std::string to_string() const;
|
||||
|
@ -84,6 +85,7 @@ class Entrance {
|
|||
RandomizerRegion connectedRegion;
|
||||
RandomizerRegion originalConnectedRegion;
|
||||
ConditionFn condition_function;
|
||||
bool force_logic;
|
||||
|
||||
EntranceType type = EntranceType::None;
|
||||
Entrance* target = nullptr;
|
||||
|
|
|
@ -22,14 +22,16 @@ class Region;
|
|||
|
||||
class EventAccess {
|
||||
public:
|
||||
explicit EventAccess(bool* event_, ConditionFn condition_function_)
|
||||
: event(event_), condition_function(condition_function_) {
|
||||
explicit EventAccess(bool* event_, ConditionFn condition_function_, bool force_logic_ = false)
|
||||
: event(event_), condition_function(condition_function_), force_logic(force_logic_) {
|
||||
}
|
||||
|
||||
bool ConditionsMet() const {
|
||||
auto ctx = Rando::Context::GetInstance();
|
||||
if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) {
|
||||
return condition_function();
|
||||
} else if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NEARLY_NO_LOGIC)) {
|
||||
return !force_logic || condition_function();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -57,30 +59,38 @@ class EventAccess {
|
|||
private:
|
||||
bool* event;
|
||||
ConditionFn condition_function;
|
||||
bool force_logic;
|
||||
};
|
||||
|
||||
std::string CleanCheckConditionString(std::string condition);
|
||||
|
||||
#define LOCATION(check, condition) \
|
||||
LocationAccess( \
|
||||
check, [] { return condition; }, CleanCheckConditionString(#condition))
|
||||
check, [] { return condition; }, false, CleanCheckConditionString(#condition))
|
||||
#define LOCATION_NNL(check, condition) \
|
||||
LocationAccess( \
|
||||
check, [] { return condition; }, true, CleanCheckConditionString(#condition))
|
||||
|
||||
// this class is meant to hold an item location with a boolean function to determine its accessibility from a specific
|
||||
// area
|
||||
class LocationAccess {
|
||||
public:
|
||||
explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_)
|
||||
: location(location_), condition_function(condition_function_), condition_str("") {
|
||||
: location(location_), condition_function(condition_function_), force_logic(false), condition_str("") {
|
||||
}
|
||||
|
||||
explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_, std::string condition_str_)
|
||||
: location(location_), condition_function(condition_function_), condition_str(condition_str_) {
|
||||
explicit LocationAccess(RandomizerCheck location_, ConditionFn condition_function_, bool force_logic_,
|
||||
std::string condition_str_)
|
||||
: location(location_), condition_function(condition_function_), force_logic(force_logic_),
|
||||
condition_str(condition_str_) {
|
||||
}
|
||||
|
||||
bool GetConditionsMet() const {
|
||||
auto ctx = Rando::Context::GetInstance();
|
||||
if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_GLITCHLESS)) {
|
||||
return condition_function();
|
||||
} else if (ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NEARLY_NO_LOGIC)) {
|
||||
return !force_logic || condition_function();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
@ -100,6 +110,7 @@ class LocationAccess {
|
|||
protected:
|
||||
RandomizerCheck location;
|
||||
ConditionFn condition_function;
|
||||
bool force_logic;
|
||||
std::string condition_str;
|
||||
|
||||
// Makes sure shop locations are buyable
|
||||
|
|
|
@ -10,8 +10,8 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
areaTable[RR_BOTTOM_OF_THE_WELL_ENTRYWAY] = Region("Bottom of the Well Entryway", SCENE_BOTTOM_OF_THE_WELL, {}, {}, {
|
||||
//Exits
|
||||
//Technically involves an fake wall, but passing it lensless is intended in vanilla and it is well telegraphed
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && logic->IsChild;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}, true),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && logic->IsChild;}, true),
|
||||
Entrance(RR_KAK_WELL, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -21,23 +21,24 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
//Events
|
||||
EventAccess(&logic->StickPot, []{return true;}),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->LoweredWaterInsideBotw, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
EventAccess(&logic->LoweredWaterInsideBotw, []{return logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, logic->HasExplosives()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, (logic->HasItem(RG_BRONZE_SCALE) || logic->LoweredWaterInsideBotw) && (logic->IsNNL() || logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, logic->LoweredWaterInsideBotw),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, logic->LoweredWaterInsideBotw),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, (logic->CanBreakPots() && logic->LoweredWaterInsideBotw) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, (logic->CanBreakPots() && logic->LoweredWaterInsideBotw) || logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM, []{return logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM, []{return logic->LoweredWaterInsideBotw && logic->IsChild;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM, []{return logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE);}, true),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM, []{return logic->LoweredWaterInsideBotw && logic->IsChild;}, true),
|
||||
//Falling down into basement requires nothing, but falling down somewhere specific requires lens or lens trick
|
||||
//kinda questionable given several drops are blocked by rocks, but that's how it was handled before and on N64
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}),
|
||||
|
@ -143,7 +144,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, logic->CanBreakPots()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_GRASS_3, logic->CanCutShrubs()),
|
||||
|
@ -246,10 +247,10 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
//Locations
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_DEAD_HAND)),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, logic->HasExplosives() || (ctx->GetTrickOption(RT_BOTW_MQ_DEADHAND_KEY) && logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
//This assumes we spawned in dead hand's room, if whatever trick made this relevant instead puts us in the previous room, remove the kill Dead Hand check.
|
||||
|
@ -275,7 +276,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
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)),
|
||||
LOCATION_NNL(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
|
||||
|
@ -290,7 +291,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, true),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, true),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, true),
|
||||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return true;}),
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_DekuTree() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_DEKU_TREE_ENTRYWAY] = Region("Deku Tree Entryway", SCENE_DEKU_TREE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return ctx->GetDungeon(DEKU_TREE)->IsVanilla();}),
|
||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return ctx->GetDungeon(DEKU_TREE)->IsMQ();}),
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return ctx->GetDungeon(DEKU_TREE)->IsVanilla();}, true),
|
||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return ctx->GetDungeon(DEKU_TREE)->IsMQ();}, true),
|
||||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -173,12 +173,12 @@ void RegionTable_Init_DekuTree() {
|
|||
|
||||
areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Region("Deku Tree Outside Boss Room", SCENE_DEKU_TREE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return true;}),
|
||||
|
@ -407,9 +407,9 @@ void RegionTable_Init_DekuTree() {
|
|||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DEKU_TREE_MQ_DEKU_SCRUB, logic->CanStunDeku()),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}),
|
||||
|
@ -421,12 +421,12 @@ void RegionTable_Init_DekuTree() {
|
|||
|
||||
areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = Region("Deku Tree MQ Outside Boss Room", SCENE_DEKU_TREE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_MQ_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
|
@ -443,8 +443,8 @@ void RegionTable_Init_DekuTree() {
|
|||
|
||||
areaTable[RR_DEKU_TREE_BOSS_EXIT] = Region("Deku Tree Boss Exit", SCENE_DEKU_TREE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(DEKU_TREE)->IsVanilla();}),
|
||||
Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(DEKU_TREE)->IsMQ();}),
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(DEKU_TREE)->IsVanilla();}, true),
|
||||
Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return ctx->GetDungeon(DEKU_TREE)->IsMQ();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", SCENE_DEKU_TREE_BOSS, {
|
||||
|
@ -452,20 +452,20 @@ void RegionTable_Init_DekuTree() {
|
|||
EventAccess(&logic->DekuTreeClear, []{return logic->CanKillEnemy(RE_GOHMA);}),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_QUEEN_GOHMA, logic->DekuTreeClear),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_QUEEN_GOHMA, logic->DekuTreeClear),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_HEART, logic->DekuTreeClear),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DEKU_TREE_QUEEN_GOHMA_GRASS_8, logic->CanCutShrubs()),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_DEKU_TREE_BOSS_EXIT, []{return true;}),
|
||||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, false),
|
||||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return logic->DekuTreeClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_DODONGOS_CAVERN_ENTRYWAY] = Region("Dodongos Cavern Entryway", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}, true),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}, true),
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -28,9 +28,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_MAP_CHEST, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, logic->CanStunDeku() || logic->HasItem(RG_GORONS_BRACELET)),
|
||||
LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CallGossipFairy()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, logic->CanStunDeku() || logic->HasItem(RG_GORONS_BRACELET)),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, logic->CallGossipFairy() || (logic->IsNNL() || Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}))),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) || (logic->IsNNL() || Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}))),
|
||||
LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -108,7 +108,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Region("Dodongos Cavern Near Dodongo Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return true;}),
|
||||
|
@ -165,8 +165,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_2F_SIDE_ROOM] = Region("Dodongos Cavern 2F Side Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
|
@ -264,8 +264,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Region("Dodongos Cavern MQ Lobby", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_MAP_CHEST, logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return true;}),
|
||||
|
@ -279,12 +279,12 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE] = Region("Dodongos Cavern MQ Gossip Stone", SCENE_DODONGOS_CAVERN, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, true),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
|
@ -336,7 +336,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, logic->CanBreakCrates()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, logic->CanBreakCrates()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, logic->CanBreakCrates()),
|
||||
|
@ -456,7 +456,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", SCENE_DODONGOS_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)) && logic->CanStunDeku()),
|
||||
LOCATION_NNL(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_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, logic->CanBreakPots()),
|
||||
|
@ -566,8 +566,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_EXIT] = Region("Dodongos Cavern Boss Exit", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla();}, true),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", SCENE_DODONGOS_CAVERN_BOSS, {
|
||||
|
@ -576,16 +576,16 @@ void RegionTable_Init_DodongosCavern() {
|
|||
EventAccess(&logic->DodongosCavernClear, []{return Here(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return logic->HasExplosives() ||
|
||||
(ctx->GetTrickOption(RT_DC_HAMMER_FLOOR) ? logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->BlueFire()) :
|
||||
ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE));})
|
||||
&& logic->CanKillEnemy(RE_KING_DODONGO);}),
|
||||
&& logic->CanKillEnemy(RE_KING_DODONGO);}, true),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, true),
|
||||
LOCATION(RC_DODONGOS_CAVERN_KING_DODONGO_HEART, logic->DodongosCavernClear),
|
||||
LOCATION(RC_KING_DODONGO, logic->DodongosCavernClear),
|
||||
LOCATION_NNL(RC_DODONGOS_CAVERN_KING_DODONGO_HEART, logic->DodongosCavernClear),
|
||||
LOCATION_NNL(RC_KING_DODONGO, logic->DodongosCavernClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_EXIT, []{return true;}),
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, false),
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->DodongosCavernClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_FireTemple() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_FIRE_TEMPLE_ENTRYWAY] = Region("Fire Temple Entryway", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla();}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ();}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla();}, true),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ();}, true),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -67,7 +67,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH] = Region("Fire Temple Loop Hammer Switch", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FireLoopSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
EventAccess(&logic->FireLoopSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return true;}),
|
||||
|
@ -378,7 +378,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_STALFOS_ROOM] = Region("Fire Temple MQ Stalfos Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return true;}),
|
||||
|
@ -390,7 +390,7 @@ void RegionTable_Init_FireTemple() {
|
|||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, logic->CanBreakPots()),
|
||||
|
@ -416,7 +416,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH] = Region("Fire Temple MQ Map Room North", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->OpenedLowestGoronCage, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
EventAccess(&logic->OpenedLowestGoronCage, []{return logic->CanUse(RG_MEGATON_HAMMER);}, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return true;}),
|
||||
|
@ -576,7 +576,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT] = Region("Fire Temple MQ Maze Shortcut", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->OpenedUpperFireShortcut, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
EventAccess(&logic->OpenedUpperFireShortcut, []{return logic->CanUse(RG_MEGATON_HAMMER);}, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||
|
@ -601,7 +601,7 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB] = Region("Fire Temple MQ Burning Block Climb", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
//EventAccess(&WallFairy, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
//EventAccess(&WallFairy, []{return logic->CanUse(RG_HOOKSHOT);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
//There's definitely ways to do this hammerless, but with one points on it's a trick
|
||||
|
@ -665,8 +665,8 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS] = Region("Fire Temple MQ Fire Maze Platforms", SCENE_FIRE_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->HitFireTemplePlatform, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
EventAccess(&logic->OpenedFireMQFireMazeDoor, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
EventAccess(&logic->HitFireTemplePlatform, []{return logic->CanUse(RG_MEGATON_HAMMER);}, true),
|
||||
EventAccess(&logic->OpenedFireMQFireMazeDoor, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}, 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);}),
|
||||
|
@ -737,22 +737,22 @@ void RegionTable_Init_FireTemple() {
|
|||
// Boss Room
|
||||
areaTable[RR_FIRE_TEMPLE_BOSS_ENTRYWAY] = Region("Fire Temple Boss Entryway", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY);}),
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false;}, true),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false;}, true),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", SCENE_FIRE_TEMPLE_BOSS, {
|
||||
// Events
|
||||
EventAccess(&logic->FireTempleClear, []{return logic->FireTimer() >= 64 && logic->CanKillEnemy(RE_VOLVAGIA);}),
|
||||
EventAccess(&logic->FireTempleClear, []{return logic->FireTimer() >= 64 && logic->CanKillEnemy(RE_VOLVAGIA);}, true),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleClear),
|
||||
LOCATION(RC_VOLVAGIA, logic->FireTempleClear),
|
||||
LOCATION_NNL(RC_FIRE_TEMPLE_VOLVAGIA_HEART, logic->FireTempleClear),
|
||||
LOCATION_NNL(RC_VOLVAGIA, logic->FireTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_FOREST_TEMPLE_ENTRYWAY] = Region("Forest Temple Entryway", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla();}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsMQ();}),
|
||||
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla();}, true),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsMQ();}, true),
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -34,7 +34,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_LOBBY] = Region("Forest Temple Lobby", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTempleMeg, []{return logic->ForestTempleJoelle && logic->ForestTempleBeth && logic->ForestTempleAmy && logic->CanUse(RG_FAIRY_BOW);}),
|
||||
EventAccess(&logic->ForestTempleMeg, []{return logic->ForestTempleJoelle && logic->ForestTempleBeth && logic->ForestTempleAmy && logic->CanUse(RG_FAIRY_BOW);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_GS_LOBBY, logic->HookshotOrBoomerang()),
|
||||
|
@ -67,7 +67,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||
LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
|
@ -203,10 +203,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_RED_POE_ROOM] = Region("Forest Temple Red Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTempleJoelle, []{return logic->CanUse(RG_FAIRY_BOW);}),
|
||||
EventAccess(&logic->ForestTempleJoelle, []{return logic->CanUse(RG_FAIRY_BOW);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_RED_POE_CHEST, logic->ForestTempleJoelle),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_RED_POE_CHEST, logic->ForestTempleJoelle),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
||||
|
@ -215,7 +215,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Region("Forest Temple Upper Stalfos", SCENE_FOREST_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_BOW_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_BOW_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, logic->CanBreakPots()),
|
||||
|
@ -228,10 +228,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Region("Forest Temple Blue Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTempleBeth, []{return logic->CanUse(RG_FAIRY_BOW);}),
|
||||
EventAccess(&logic->ForestTempleBeth, []{return logic->CanUse(RG_FAIRY_BOW);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_BLUE_POE_CHEST, logic->ForestTempleBeth),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_BLUE_POE_CHEST, logic->ForestTempleBeth),
|
||||
LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_3, logic->CanBreakPots()),
|
||||
|
@ -274,7 +274,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Region("Forest Temple Green Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW);}),
|
||||
EventAccess(&logic->ForestTempleAmy, []{return logic->CanUse(RG_FAIRY_BOW);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_GREEN_POE_POT_1, logic->CanBreakPots()),
|
||||
|
@ -282,7 +282,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return logic->ForestTempleAmy;}),
|
||||
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return logic->ForestTempleAmy;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_EAST_CORRIDOR] = Region("Forest Temple East Corridor", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
|
@ -318,7 +318,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Region("Forest Temple MQ Central Region", SCENE_FOREST_TEMPLE, {
|
||||
//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);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, logic->CanBreakPots()),
|
||||
|
@ -340,10 +340,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPot, []{return true;}),
|
||||
EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}),
|
||||
EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, logic->ForestClearBelowBowChest),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, logic->ForestClearBelowBowChest),
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
|
@ -496,10 +496,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
areaTable[RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM] = Region("Forest Temple MQ 3 Stalfos Room", SCENE_FOREST_TEMPLE, {
|
||||
//Events
|
||||
//technically happens in RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, but the way this room blocks the hole means it cannot be logical to do anything else there.
|
||||
EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}),
|
||||
EventAccess(&logic->ForestClearBelowBowChest, []{return logic->CanKillEnemy(RE_WOLFOS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_BOW_CHEST, logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_MQ_BOW_CHEST, logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, logic->CanBreakPots()),
|
||||
|
@ -599,9 +599,9 @@ void RegionTable_Init_ForestTemple() {
|
|||
// Boss Room
|
||||
areaTable[RR_FOREST_TEMPLE_BOSS_ENTRYWAY] = Region("Forest Temple Boss Entryway", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_REGION, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FOREST_TEMPLE_BOSS_KEY);}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_REGION, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && false;}, true),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return ctx->GetDungeon(FOREST_TEMPLE)->IsMQ() && false;}, true),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_FOREST_TEMPLE_BOSS_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", SCENE_FOREST_TEMPLE_BOSS, {
|
||||
|
@ -609,12 +609,12 @@ void RegionTable_Init_ForestTemple() {
|
|||
EventAccess(&logic->ForestTempleClear, []{return logic->CanKillEnemy(RE_PHANTOM_GANON);}),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleClear),
|
||||
LOCATION(RC_PHANTOM_GANON, logic->ForestTempleClear),
|
||||
LOCATION_NNL(RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, logic->ForestTempleClear),
|
||||
LOCATION_NNL(RC_PHANTOM_GANON, logic->ForestTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, false),
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->ForestTempleClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -10,8 +10,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_GANONS_CASTLE_ENTRYWAY] = Region("Ganon's Castle Entryway", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsVanilla();}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsMQ();}),
|
||||
Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsVanilla();}, true),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsMQ();}, true),
|
||||
Entrance(RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -38,10 +38,10 @@ void RegionTable_Init_GanonsCastle() {
|
|||
EventAccess(&logic->FreeFairies, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, true),
|
||||
LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, true),
|
||||
LOCATION(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, true),
|
||||
|
@ -76,7 +76,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
//Events
|
||||
EventAccess(&logic->BlueFireAccess, []{return true;}),
|
||||
EventAccess(&logic->FairyPot, []{return logic->BlueFire() && logic->CanKillEnemy(RE_FREEZARD);}),
|
||||
EventAccess(&logic->WaterTrialClear, []{return logic->BlueFire() && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->WaterTrialClear, []{return logic->BlueFire() && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, true),
|
||||
|
@ -88,7 +88,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_SHADOW_TRIAL] = Region("Ganon's Castle Shadow Trial", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//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))))));}),
|
||||
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))))));}, true),
|
||||
}, {
|
||||
//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),
|
||||
|
@ -104,21 +104,21 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_SPIRIT_TRIAL] = Region("Ganon's Castle Spirit Trial", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return ((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->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));}),
|
||||
EventAccess(&logic->NutPot, []{return ((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)));}, true),
|
||||
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));}, true),
|
||||
}, {
|
||||
//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_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_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)))),
|
||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(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_NNL(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)))),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true),
|
||||
}, {});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//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));}),
|
||||
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));}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, true),
|
||||
|
@ -128,7 +128,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
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_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_NNL(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)),
|
||||
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))),
|
||||
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))),
|
||||
|
@ -166,11 +166,11 @@ void RegionTable_Init_GanonsCastle() {
|
|||
EventAccess(&logic->FreeFairies, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, true),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, true),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, true),
|
||||
|
@ -206,7 +206,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Forest Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ForestTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->ForestTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, logic->CanBreakPots()),
|
||||
|
@ -225,7 +225,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Fire Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->FireTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->FireTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
//There's no way back across the lava without glitches
|
||||
}, {
|
||||
//Locations
|
||||
|
@ -255,7 +255,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Water Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->WaterTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->WaterTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, logic->CanBreakPots()),
|
||||
|
@ -323,7 +323,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Shadow Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->ShadowTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->ShadowTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, logic->CanBreakPots()),
|
||||
|
@ -352,20 +352,20 @@ void RegionTable_Init_GanonsCastle() {
|
|||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
//better names for these would be nice.
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);});}),
|
||||
//Sunlight arrows are bugged, should set a perm flag like mirror shield
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD));}) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return (logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_MIRROR_SHIELD));}) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Spirit Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->SpiritTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
|
@ -384,7 +384,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM] = Region("Ganon's Castle MQ Light Trial Triforce Room", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return true;}),
|
||||
|
@ -410,7 +410,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Light Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->LightTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}),
|
||||
EventAccess(&logic->LightTrialClear, []{return logic->CanUse(RG_LIGHT_ARROWS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, logic->CanBreakPots()),
|
||||
|
@ -478,15 +478,15 @@ void RegionTable_Init_GanonsCastle() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_3, []{return Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return true;});}),
|
||||
Entrance(RR_GANONS_TOWER_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return logic->HasItem(RG_GANONS_CASTLE_BOSS_KEY);});}),
|
||||
Entrance(RR_GANONS_TOWER_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return logic->HasItem(RG_GANONS_CASTLE_BOSS_KEY);});}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_GANONDORF_LAIR] = Region("Ganondorf's Lair", SCENE_GANONDORF_BOSS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
|
||||
LOCATION_NNL(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}),
|
||||
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, {}, {
|
||||
|
@ -503,7 +503,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_GANON_ARENA] = Region("Ganon's Arena", SCENE_GANON_BOSS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GANON, logic->CanKillEnemy(RE_GANON)),
|
||||
LOCATION_NNL(RC_GANON, logic->CanKillEnemy(RE_GANON)),
|
||||
}, {});
|
||||
|
||||
#pragma endregion
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsVanilla();}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsMQ();}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsVanilla();}, true),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsMQ();}, true),
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -22,7 +22,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
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_NNL(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),
|
||||
}, {
|
||||
|
@ -77,7 +77,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER] = Region("Gerudo Training Ground Eye Statue Lower", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
LOCATION_NNL(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return true;}),
|
||||
|
@ -85,7 +85,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
LOCATION_NNL(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return true;}),
|
||||
|
@ -151,7 +151,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER] = Region("Gerudo Training Ground MQ Center", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
//Events
|
||||
EventAccess(&logic->MQGTGMazeSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
EventAccess(&logic->MQGTGMazeSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}, true),
|
||||
},
|
||||
{ //Locations
|
||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, logic->CanBreakCrates()),
|
||||
|
@ -213,7 +213,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM] = Region("Gerudo Training Ground MQ Statue ROom", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
LOCATION_NNL(RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_IceCavern() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_ICE_CAVERN_ENTRYWAY] = Region("Ice Cavern Entryway", SCENE_ICE_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_BEGINNING, []{return ctx->GetDungeon(ICE_CAVERN)->IsVanilla();}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return ctx->GetDungeon(ICE_CAVERN)->IsMQ() && logic->CanUseProjectile();}),
|
||||
Entrance(RR_ICE_CAVERN_BEGINNING, []{return ctx->GetDungeon(ICE_CAVERN)->IsVanilla();}, true),
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return ctx->GetDungeon(ICE_CAVERN)->IsMQ() && (logic->IsNNL() || logic->CanUseProjectile());}, true),
|
||||
Entrance(RR_ZF_LEDGE, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -18,7 +18,7 @@ void RegionTable_Init_IceCavern() {
|
|||
|
||||
areaTable[RR_ICE_CAVERN_BEGINNING] = Region("Ice Cavern Beginning", SCENE_ICE_CAVERN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
|
@ -93,7 +93,7 @@ void RegionTable_Init_IceCavern() {
|
|||
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", SCENE_ICE_CAVERN, {
|
||||
//Events
|
||||
//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
|
||||
LOCATION(RC_ICE_CAVERN_MQ_MAP_CHEST, logic->BlueFire() && Here(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return logic->CanHitSwitch();})),
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_JABU_JABUS_BELLY_ENTRYWAY] = Region("Jabu Jabus Belly Entryway", SCENE_JABU_JABU, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}, true),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}, true),
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -28,7 +28,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
EventAccess(&logic->JabuWestTentacle, []{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}),
|
||||
}, {
|
||||
//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_NNL(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),
|
||||
|
@ -212,9 +212,9 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, logic->CanBreakPots()),
|
||||
//Getting the ones closest to the ledge with rang may be a trick due to the awkward angle without blind shooting through the flesh
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, logic->HasItem(logic->IsNNL() ? RG_BRONZE_SCALE : RG_GOLDEN_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, logic->HasItem(logic->IsNNL() ? RG_BRONZE_SCALE : RG_SILVER_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
|
@ -311,10 +311,10 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
EventAccess(&logic->LoweredJabuPath, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_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_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_COW, logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_GRASS, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_MQ_AFTER_BIG_OCTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_1, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
|
@ -359,13 +359,13 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_EXIT] = Region("Jabu Jabus Belly Boss Exit", SCENE_JABU_JABU, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla();}, true),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", SCENE_JABU_JABU_BOSS, {
|
||||
// Events //todo: add pot kill trick
|
||||
EventAccess(&logic->JabuJabusBellyClear, []{return logic->CanKillEnemy(RE_BARINADE);}),
|
||||
EventAccess(&logic->JabuJabusBellyClear, []{return logic->CanKillEnemy(RE_BARINADE);}, true),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_1, logic->CanBreakPots()),
|
||||
|
@ -374,12 +374,12 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_4, logic->CanBreakPots()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_5, logic->CanBreakPots()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_POT_6, logic->CanBreakPots()),
|
||||
LOCATION(RC_JABU_JABUS_BELLY_BARINADE_HEART, logic->JabuJabusBellyClear),
|
||||
LOCATION(RC_BARINADE, logic->JabuJabusBellyClear),
|
||||
LOCATION_NNL(RC_JABU_JABUS_BELLY_BARINADE_HEART, logic->JabuJabusBellyClear),
|
||||
LOCATION_NNL(RC_BARINADE, logic->JabuJabusBellyClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_EXIT, []{return false;}),
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, false),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_EXIT, []{return false;}, true),
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->JabuJabusBellyClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_SHADOW_TEMPLE_ENTRYWAY] = Region("Shadow Temple Entryway", SCENE_SHADOW_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_BEGINNING, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEGINNING, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ();}),
|
||||
Entrance(RR_SHADOW_TEMPLE_BEGINNING, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && (ctx->GetTrickOption(RT_LENS_SHADOW) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->IsNNL() || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}, true),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEGINNING, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ();}, true),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -45,7 +45,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
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_NNL(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return logic->HasExplosives() && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2);}),
|
||||
|
@ -71,7 +71,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
//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_NNL(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
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);}),
|
||||
|
@ -83,7 +83,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
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_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_NNL(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_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||
|
@ -161,7 +161,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
//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
|
||||
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_NNL(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return logic->HasExplosives() && logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}),
|
||||
|
@ -197,7 +197,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT] = Region("Shadow Temple MQ Upper Huge Pit", SCENE_SHADOW_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//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);}),
|
||||
|
@ -296,7 +296,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
//Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanPassEnemy(RE_REDEAD)),
|
||||
LOCATION(RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return true;}),
|
||||
|
@ -402,22 +402,22 @@ void RegionTable_Init_ShadowTemple() {
|
|||
// Boss Room
|
||||
areaTable[RR_SHADOW_TEMPLE_BOSS_ENTRYWAY] = Region("Shadow Temple Boss Entryway", SCENE_SHADOW_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && false;}, true),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ() && false;}, true),
|
||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] = Region("Shadow Temple Boss Room", SCENE_SHADOW_TEMPLE_BOSS, {
|
||||
// Events
|
||||
EventAccess(&logic->ShadowTempleClear, []{return logic->CanKillEnemy(RE_BONGO_BONGO);}),
|
||||
EventAccess(&logic->ShadowTempleClear, []{return logic->CanKillEnemy(RE_BONGO_BONGO);}, true),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleClear),
|
||||
LOCATION(RC_BONGO_BONGO, logic->ShadowTempleClear),
|
||||
LOCATION_NNL(RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, logic->ShadowTempleClear),
|
||||
LOCATION_NNL(RC_BONGO_BONGO, logic->ShadowTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, false),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return logic->ShadowTempleClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_SPIRIT_TEMPLE_ENTRYWAY] = Region("Spirit Temple Entryway", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_LOBBY, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla();}, true),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ();}, true),
|
||||
Entrance(RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -62,12 +62,12 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Region("Early Adult Spirit Temple", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//Locations
|
||||
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_NNL(RC_SPIRIT_TEMPLE_COMPASS_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && (logic->IsNNL() || logic->CanUse(RG_HOOKSHOT))),
|
||||
LOCATION_NNL(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())),
|
||||
LOCATION_NNL(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
|
||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
||||
|
@ -83,8 +83,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
(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_NNL(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && (logic->IsNNL() || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS)))),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && (logic->IsNNL() || (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_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) &&
|
||||
|
@ -121,11 +121,11 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Central Locked Door", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//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_NNL(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_NNL(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, logic->HasExplosives() && logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//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))));}),
|
||||
|
@ -133,8 +133,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Final Locked Door", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//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_NNL(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_NNL(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_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
||||
}, {
|
||||
|
@ -267,7 +267,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
areaTable[RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM] = Region("Spirit Temple MQ Broken Wall Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//Locations
|
||||
//Implies CanKillEnemy(RE_LIKE_LIKE)
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, MQSpiritSharedBrokenWallRoom(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->CanKillEnemy(RE_BEAMOS);})),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, MQSpiritSharedBrokenWallRoom(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->CanKillEnemy(RE_BEAMOS);})),
|
||||
//Sunlights only temp spawn this chest, which is unintuitive/a bug.
|
||||
//chest is only reachable as adult glitchlessly, so we can skip the shared in favour of IsAdult as adult access is always Certain
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, logic->IsAdult && (logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))) && logic->CanUse(RG_HOOKSHOT)),
|
||||
|
@ -351,7 +351,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST] = Region("Spirit Temple MQ Statue Room East", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, logic->CanUse(RG_HOOKSHOT) & logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, logic->CanUse(RG_ZELDAS_LULLABY) && (logic->IsNNL() || (logic->CanUse(RG_HOOKSHOT) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))))),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, (ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -408,14 +408,14 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM] = Region("Spirit Temple MQ Symphony Room", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
//Implies CanPassEnemy(RE_MOBLIN_CHIEF)
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_SONG_OF_STORMS) && logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_SONG_OF_STORMS) && logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM] = Region("Spirit Temple MQ After Symphony Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -429,8 +429,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//Locations
|
||||
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_NNL(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, logic->CanKillEnemy(RE_BEAMOS) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//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);}),
|
||||
|
@ -441,7 +441,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
areaTable[RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM] = Region("Spirit Temple MQ SoT Sun Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, true),
|
||||
LOCATION(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}),
|
||||
|
@ -499,7 +499,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM] = Region("Spirit Temple MQ Nine Chairs Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -549,22 +549,22 @@ void RegionTable_Init_SpiritTemple() {
|
|||
// Boss Room
|
||||
areaTable[RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY] = Region("Spirit Temple Boss Entryway", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla() && false;}, true),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ() && false;}, true),
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", SCENE_SPIRIT_TEMPLE_BOSS, {
|
||||
// Events
|
||||
EventAccess(&logic->SpiritTempleClear, []{return logic->CanKillEnemy(RE_TWINROVA);}),
|
||||
EventAccess(&logic->SpiritTempleClear, []{return logic->CanKillEnemy(RE_TWINROVA);}, true),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleClear),
|
||||
LOCATION(RC_TWINROVA, logic->SpiritTempleClear),
|
||||
LOCATION_NNL(RC_SPIRIT_TEMPLE_TWINROVA_HEART, logic->SpiritTempleClear),
|
||||
LOCATION_NNL(RC_TWINROVA, logic->SpiritTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,8 +9,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
// Vanilla/MQ Decider
|
||||
areaTable[RR_WATER_TEMPLE_ENTRYWAY] = Region("Water Temple Entryway", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsVanilla();}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsMQ();}),
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsVanilla();}, true),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsMQ();}, true),
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
});
|
||||
|
||||
|
@ -258,10 +258,10 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_GS_RIVER, (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_WATER_RIVER_GS) && logic->CanUse(RG_LONGSHOT))),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_HEART_1, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_HEART_2, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_HEART_3, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_WATER_TEMPLE_RIVER_HEART_4, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_RIVER_HEART_1, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_RIVER_HEART_2, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_RIVER_HEART_3, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_RIVER_HEART_4, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24) || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, []{return (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT));}),
|
||||
|
@ -380,7 +380,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
//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
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_HOOKSHOT)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, (logic->MQWaterLevel(WL_MID) || logic->IsNNL()) && 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_2, (logic->MQWaterLevel(WL_LOW) && logic->CanBreakPots()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->WaterTimer() >= 16)),
|
||||
}, {
|
||||
|
@ -447,7 +447,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", SCENE_WATER_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, logic->CanBreakCrates()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, logic->CanBreakCrates()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, logic->CanBreakCrates()),
|
||||
|
@ -580,7 +580,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, logic->CanBreakPots()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, logic->CanBreakPots()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, logic->CanBreakPots()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return logic->MQWaterStalfosPit && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT));}),
|
||||
|
@ -593,13 +593,13 @@ void RegionTable_Init_WaterTemple() {
|
|||
//Locations
|
||||
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_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)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
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_AFTER_DARK_LINK, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK, []{return logic->CanKillEnemy(RE_DARK_LINK);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK] = Region("Water Temple MQ After Dark Link", SCENE_WATER_TEMPLE, {
|
||||
|
@ -611,7 +611,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->CanKillEnemy(RE_DARK_LINK);}, true),
|
||||
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));}),
|
||||
});
|
||||
|
||||
|
@ -841,9 +841,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
// Boss Room
|
||||
areaTable[RR_WATER_TEMPLE_BOSS_ENTRYWAY] = Region("Water Temple Boss Entryway", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return ctx->GetDungeon(WATER_TEMPLE)->IsVanilla() && false;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return ctx->GetDungeon(WATER_TEMPLE)->IsMQ() && false;}),
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}),
|
||||
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return ctx->GetDungeon(WATER_TEMPLE)->IsVanilla() && false;}, true),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return ctx->GetDungeon(WATER_TEMPLE)->IsMQ() && false;}, true),
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ROOM, []{return logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Region("Water Temple Boss Room", SCENE_WATER_TEMPLE_BOSS, {
|
||||
|
@ -851,12 +851,12 @@ void RegionTable_Init_WaterTemple() {
|
|||
EventAccess(&logic->WaterTempleClear, []{return logic->CanKillEnemy(RE_MORPHA);}),
|
||||
}, {
|
||||
// Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MORPHA_HEART, logic->WaterTempleClear),
|
||||
LOCATION(RC_MORPHA, logic->WaterTempleClear),
|
||||
LOCATION_NNL(RC_WATER_TEMPLE_MORPHA_HEART, logic->WaterTempleClear),
|
||||
LOCATION_NNL(RC_MORPHA, logic->WaterTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false),
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, true, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -12,19 +12,19 @@ void RegionTable_Init_GerudoFortress() {
|
|||
// clang-format off
|
||||
areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", SCENE_GERUDOS_FORTRESS, {
|
||||
//Events
|
||||
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}),
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
|
||||
EventAccess(&logic->GtG_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET);}),
|
||||
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}, true),
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}, true),
|
||||
EventAccess(&logic->GtG_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GF_CHEST, logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_SCARECROW)) || logic->CanUse(RG_LONGSHOT)),
|
||||
LOCATION(RC_GF_HBA_1000_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION(RC_GF_HBA_1500_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION_NNL(RC_GF_HBA_1000_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION_NNL(RC_GF_HBA_1500_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_NORTH_F2_CARPENTER, (logic->CanKillEnemy(RE_GERUDO_WARRIOR)) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN))),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_GERUDO_MEMBERSHIP_CARD, logic->CanFinishGerudoFortress()),
|
||||
LOCATION_NNL(RC_GF_GERUDO_MEMBERSHIP_CARD, logic->CanFinishGerudoFortress()),
|
||||
LOCATION(RC_GF_GS_ARCHERY_RANGE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && (logic->CanJumpslashExceptHammer() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_DINS_FIRE)) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN) || ctx->GetTrickOption(RT_GF_JUMP)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_POT_1, (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_SCARECROW)) || (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_GF_JUMP) && (ctx->GetTrickOption(RT_GF_KITCHEN) || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT))))) && logic->CanBreakPots()),
|
||||
|
@ -80,21 +80,21 @@ void RegionTable_Init_GerudoFortress() {
|
|||
|
||||
|
||||
//RANDOTODO doublecheck when GF isn't a blob
|
||||
LOCATION(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES));}),
|
||||
Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_OUTSIDE_GATE] = Region("GF Outside Gate", SCENE_GERUDOS_FORTRESS, {
|
||||
//Events
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/);}),
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/);}, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || !ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES))) || logic->GF_GateOpen;}),
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || !ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES))) || logic->GF_GateOpen;}, true),
|
||||
Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return true;}),
|
||||
});
|
||||
|
||||
|
|
|
@ -12,23 +12,23 @@ void RegionTable_Init_CastleGrounds() {
|
|||
areaTable[RR_CASTLE_GROUNDS] = Region("Castle Grounds", SCENE_OUTSIDE_GANONS_CASTLE, TIME_DOESNT_PASS, {RA_CASTLE_GROUNDS}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}),
|
||||
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->IsAdult;}),
|
||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}, true),
|
||||
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->IsAdult;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HYRULE_CASTLE_GROUNDS] = Region("Hyrule Castle Grounds", SCENE_HYRULE_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}, true),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_HC_MALON_EGG, true),
|
||||
LOCATION(RC_HC_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||
LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HC_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||
LOCATION_NNL(RC_HC_MALON_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HC_MALON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HC_ROCK_WALL_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HC_MALON_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HC_ROCK_WALL_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HC_GRASS_1, logic->CanCutShrubs()),
|
||||
|
@ -36,9 +36,9 @@ void RegionTable_Init_CastleGrounds() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
Entrance(RR_HC_GARDEN, []{return logic->CanUse(RG_WEIRD_EGG) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}),
|
||||
Entrance(RR_HC_GARDEN, []{return logic->CanUse(RG_WEIRD_EGG) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}, true),
|
||||
Entrance(RR_HC_GREAT_FAIRY_FOUNTAIN, []{return logic->BlastOrSmash();}),
|
||||
Entrance(RR_HC_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_HC_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HC_GARDEN] = Region("HC Garden", SCENE_CASTLE_COURTYARD_ZELDA, {}, {
|
||||
|
@ -52,7 +52,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
|
||||
areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Region("HC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_HC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_HC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
|
@ -70,13 +70,13 @@ void RegionTable_Init_CastleGrounds() {
|
|||
areaTable[RR_HC_STORMS_GROTTO_BEHIND_WALLS] = Region("HC Storms Grotto Behind Walls", SCENE_GROTTOS, {
|
||||
//Events
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
EventAccess(&logic->WanderingBugs, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_HC_GS_STORMS_GROTTO, logic->HookshotOrBoomerang()),
|
||||
LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HC_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HC_STORMS_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HC_STORMS_GROTTO_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_HC_STORMS_GROTTO_POT_2, logic->CanBreakPots()),
|
||||
|
@ -89,7 +89,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_GROUNDS] = Region("Ganon's Castle Grounds", SCENE_OUTSIDE_GANONS_CASTLE, {
|
||||
//Events
|
||||
EventAccess(&logic->BuiltRainbowBridge, []{return logic->CanBuildRainbowBridge();}),
|
||||
EventAccess(&logic->BuiltRainbowBridge, []{return logic->CanBuildRainbowBridge();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_OGC_GS, logic->CanJumpslashExceptHammer() || logic->CanUseProjectile() || (logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE)),
|
||||
|
@ -102,7 +102,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
|
||||
areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Region("OGC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_OGC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_OGC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
|
@ -110,14 +110,14 @@ void RegionTable_Init_CastleGrounds() {
|
|||
|
||||
areaTable[RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE] = Region("Castle Grounds From Ganon's Castle", SCENE_OUTSIDE_GANONS_CASTLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}),
|
||||
Entrance(RR_GANONS_CASTLE_LEDGE, []{return logic->IsAdult;}),
|
||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return logic->IsChild;}, true),
|
||||
Entrance(RR_GANONS_CASTLE_LEDGE, []{return logic->IsAdult;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_LEDGE] = Region("Ganon's Castle Ledge", SCENE_OUTSIDE_GANONS_CASTLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_GANONS_CASTLE_GROUNDS, []{return logic->BuiltRainbowBridge;}),
|
||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->IsAdult;}, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -23,19 +23,18 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanBreakCrates()),
|
||||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_NEARBY, []{return true;}),
|
||||
Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return logic->FireTimer() >= 16 || logic->Hearts() >= 3;}),
|
||||
Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return logic->FireTimer() >= 16 || logic->Hearts() >= 3;}, true),
|
||||
Entrance(RR_DMC_CENTRAL_NEARBY, []{return logic->IsAdult && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_DISTANT_SCARECROW) && ((logic->EffectiveHealth() > 2) || (logic->CanUse(RG_BOTTLE_WITH_FAIRY) && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || logic->CanUse(RG_NAYRUS_LOVE));}),
|
||||
Entrance(RR_DMC_LOWER_NEARBY, []{return false;}),
|
||||
Entrance(RR_DMC_DISTANT_PLATFORM, []{return (logic->FireTimer() >= 48 && logic->Hearts() >= 2) || logic->Hearts() >= 3;}),
|
||||
Entrance(RR_DMC_DISTANT_PLATFORM, []{return (logic->FireTimer() >= 48 && logic->Hearts() >= 2) || logic->Hearts() >= 3;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_LADDER_AREA_NEARBY] = Region("DMC Ladder Region Nearby", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_DEKU_SCRUB, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DMC_DEKU_SCRUB, logic->IsChild && logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_NEARBY, []{return logic->Hearts() >= 3;}),
|
||||
|
@ -78,18 +77,18 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_GS_BEAN_PATCH, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION(RC_DMC_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_GS_BEAN_PATCH, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_DMC_NEAR_PLATFORM_RED_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_RED_RUPEE, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_1, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_2, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_3, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_4, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_5, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_MIDDLE_PLATFORM_BLUE_RUPEE_6, logic->IsChild && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
LOCATION_NNL(RC_DMC_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_NEARBY, []{return true;}),
|
||||
|
@ -101,7 +100,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
|
||||
areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Region("DMC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_DMC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return true;}),
|
||||
|
@ -110,16 +109,16 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
areaTable[RR_DMC_UPPER_GROTTO] = Region("DMC Upper Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_CHEST, true),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_LOCAL, []{return true;}),
|
||||
|
@ -127,9 +126,9 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
|
||||
areaTable[RR_DMC_HAMMER_GROTTO] = Region("DMC Hammer Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION(RC_DMC_HAMMER_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -138,13 +137,13 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
|
||||
areaTable[RR_DMC_DISTANT_PLATFORM] = Region("DMC Distant Platform", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, logic->IsAdult),
|
||||
LOCATION(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_1, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_2, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_3, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_4, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_5, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_GREEN_RUPEE_6, logic->IsAdult),
|
||||
LOCATION_NNL(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
||||
|
|
|
@ -7,27 +7,27 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
// clang-format off
|
||||
areaTable[RR_DEATH_MOUNTAIN_TRAIL] = Region("Death Mountain", SCENE_DEATH_MOUNTAIN_TRAIL, {
|
||||
//Events
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET));}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET));}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_CHEST, logic->BlastOrSmash() || (ctx->GetTrickOption(RT_DMT_BOMBABLE) && logic->IsChild && logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION(RC_DMT_FREESTANDING_POH, logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)))),
|
||||
LOCATION(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
|
||||
LOCATION_NNL(RC_DMT_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DMT_SOIL_GS) && (logic->TakeDamage() || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_BOOMERANG)))),
|
||||
LOCATION(RC_DMT_GS_NEAR_KAK, logic->BlastOrSmash()),
|
||||
LOCATION(RC_DMT_GS_ABOVE_DODONGOS_CAVERN, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || (ctx->GetTrickOption(RT_DMT_HOOKSHOT_LOWER_GS) && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_DMT_BEAN_LOWER_GS) && CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL)) || (ctx->GetTrickOption(RT_DMT_HOVERS_LOWER_GS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_DMT_JS_LOWER_GS)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_DMT_BLUE_RUPEE, logic->IsChild && logic->BlastOrSmash()),
|
||||
LOCATION(RC_DMT_RED_RUPEE, logic->IsChild && logic->BlastOrSmash()),
|
||||
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_DMT_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION_NNL(RC_DMT_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION_NNL(RC_DMT_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION_NNL(RC_DMT_FLAG_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_BEHIND_GATE, []{return true;}),
|
||||
Entrance(RR_GORON_CITY, []{return true;}),
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return Here(RR_DEATH_MOUNTAIN_TRAIL, []{return logic->BlastOrSmash();}) || (logic->IsAdult && ((CanPlantBean(RR_DEATH_MOUNTAIN_TRAIL) && logic->HasItem(RG_GORONS_BRACELET)) || (logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_DMT_CLIMB_HOVERS))));}),
|
||||
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->IsAdult;}),
|
||||
Entrance(RR_DMT_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_DMT_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Region("Death Mountain Summit", SCENE_DEATH_MOUNTAIN_TRAIL, {
|
||||
|
@ -36,18 +36,18 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
EventAccess(&logic->BugRock, []{return logic->IsChild;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_TRADE_BROKEN_SWORD, logic->IsAdult && logic->CanUse(RG_BROKEN_SWORD)),
|
||||
LOCATION(RC_DMT_TRADE_EYEDROPS, logic->IsAdult && logic->CanUse(RG_EYEDROPS)),
|
||||
LOCATION(RC_DMT_TRADE_CLAIM_CHECK, logic->IsAdult && logic->CanUse(RG_CLAIM_CHECK)),
|
||||
LOCATION(RC_DMT_GS_FALLING_ROCKS_PATH, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || ctx->GetTrickOption(RT_DMT_UPPER_GS)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_DMT_TRADE_BROKEN_SWORD, logic->IsAdult && logic->CanUse(RG_BROKEN_SWORD)),
|
||||
LOCATION_NNL(RC_DMT_TRADE_EYEDROPS, logic->IsAdult && logic->CanUse(RG_EYEDROPS)),
|
||||
LOCATION_NNL(RC_DMT_TRADE_CLAIM_CHECK, logic->IsAdult && logic->CanUse(RG_CLAIM_CHECK)),
|
||||
LOCATION_NNL(RC_DMT_GS_FALLING_ROCKS_PATH, logic->IsAdult && logic->AtNight && (logic->CanUse(RG_MEGATON_HAMMER) || ctx->GetTrickOption(RT_DMT_UPPER_GS)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_DMT_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_DMT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_DMT_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
Entrance(RR_DMC_UPPER_LOCAL, []{return true;}),
|
||||
Entrance(RR_DMT_OWL_FLIGHT, []{return logic->IsChild;}, false),
|
||||
Entrance(RR_DMT_OWL_FLIGHT, []{return logic->IsChild;}, true, false),
|
||||
Entrance(RR_DMT_COW_GROTTO, []{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_DMT_GREAT_FAIRY_FOUNTAIN, []{return Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();});}),
|
||||
});
|
||||
|
@ -59,7 +59,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
|
||||
areaTable[RR_DMT_COW_GROTTO] = Region("DMT Cow Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_DMT_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_DMT_COW_GROTTO_BEEHIVE, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_DMT_COW_GROTTO_LEFT_HEART, true),
|
||||
LOCATION(RC_DMT_COW_GROTTO_MIDDLE_LEFT_HEART, true),
|
||||
|
@ -83,16 +83,16 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
areaTable[RR_DMT_STORMS_GROTTO] = Region("DMT Storms Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_CHEST, true),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
|
@ -100,7 +100,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
|
||||
areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Region("DMT Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DMT_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_DMT_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||
|
|
|
@ -7,19 +7,19 @@ void RegionTable_Init_DesertColossus() {
|
|||
// clang-format off
|
||||
areaTable[RR_DESERT_COLOSSUS] = Region("Desert Colossus", SCENE_DESERT_COLOSSUS, {
|
||||
//Events
|
||||
EventAccess(&logic->FairyPond, []{return logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->FairyPond, []{return logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_COLOSSUS_FREESTANDING_POH, logic->IsAdult && CanPlantBean(RR_DESERT_COLOSSUS)),
|
||||
LOCATION(RC_COLOSSUS_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_COLOSSUS_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_COLOSSUS_GS_TREE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_COLOSSUS_GS_HILL, logic->IsAdult && ((CanPlantBean(RR_DESERT_COLOSSUS) && logic->CanAttack()) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_COLOSSUS_GS) && logic->CanUse(RG_HOOKSHOT))) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_COLOSSUS_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_COLOSSUS_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_COLOSSUS_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_COLOSSUS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_COLOSSUS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_COLOSSUS_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -60,7 +60,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
|
||||
areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Region("Colossus Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_COLOSSUS_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
|
@ -68,8 +68,8 @@ void RegionTable_Init_DesertColossus() {
|
|||
|
||||
areaTable[RR_COLOSSUS_GROTTO] = Region("Colossus Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION(RC_COLOSSUS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -23,18 +23,18 @@ void RegionTable_Init_GerudoValley() {
|
|||
|
||||
areaTable[RR_GV_UPPER_STREAM] = Region("GV Upper Stream", SCENE_GERUDO_VALLEY, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_WATERFALL_FREESTANDING_POH, logic->IsChild || logic->HasItem(RG_BRONZE_SCALE)),//can use cucco as child
|
||||
LOCATION(RC_GV_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_GV_COW, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GV_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_GV_COW, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_GV_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GV_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GV_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GV_GOSSIP_STONE, true),
|
||||
LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
|
@ -69,7 +69,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
areaTable[RR_GV_FORTRESS_SIDE] = Region("GV Fortress Side", SCENE_GERUDO_VALLEY, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_CHEST, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)),
|
||||
LOCATION_NNL(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)),
|
||||
LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GV_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()),
|
||||
|
@ -82,7 +82,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
Entrance(RR_GV_UPPER_STREAM, []{return true;}),
|
||||
Entrance(RR_GERUDO_VALLEY, []{return logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->CarpenterRescue;}),
|
||||
Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}, true),
|
||||
Entrance(RR_GV_CRATE_LEDGE, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),
|
||||
});
|
||||
|
||||
|
@ -93,14 +93,14 @@ void RegionTable_Init_GerudoValley() {
|
|||
|
||||
areaTable[RR_GV_OCTOROK_GROTTO] = Region("GV Octorok Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION(RC_GV_OCTOROK_GROTTO_RED_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_BACK_BLUE_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_FRONT_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_FRONT_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_BACK_LEFT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_BACK_RIGHT_GREEN_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
LOCATION_NNL(RC_GV_OCTOROK_GROTTO_RED_RUPEE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_GROTTO_LEDGE, []{return true;}),
|
||||
|
@ -108,8 +108,8 @@ void RegionTable_Init_GerudoValley() {
|
|||
|
||||
areaTable[RR_GV_STORMS_GROTTO] = Region("GV Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GV_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_GV_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GV_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GV_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -7,15 +7,15 @@ void RegionTable_Init_GoronCity() {
|
|||
// clang-format off
|
||||
areaTable[RR_GORON_CITY] = Region("Goron City", SCENE_GORON_CITY, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}, true),
|
||||
EventAccess(&logic->BugRock, []{return logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
EventAccess(&logic->GoronCityChildFire, []{return logic->IsChild && logic->CanUse(RG_DINS_FIRE);}),
|
||||
EventAccess(&logic->GCWoodsWarpOpen, []{return logic->CanDetonateUprightBombFlower() || logic->CanUse(RG_MEGATON_HAMMER) || logic->GoronCityChildFire;}),
|
||||
EventAccess(&logic->GCDaruniasDoorOpenChild, []{return logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
EventAccess(&logic->GCWoodsWarpOpen, []{return logic->CanDetonateUprightBombFlower() || logic->CanUse(RG_MEGATON_HAMMER) || logic->GoronCityChildFire;}, true),
|
||||
EventAccess(&logic->GCDaruniasDoorOpenChild, []{return logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
// bottle animation causes similar complications as stopping goron with Din's Fire, only put in logic when both din's & blue fire tricks enabled
|
||||
EventAccess(&logic->StopGCRollingGoronAsAdult, []{return logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) ||
|
||||
(ctx->GetTrickOption(RT_GC_LINK_GORON_DINS) && (logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE)))));}),
|
||||
(ctx->GetTrickOption(RT_GC_LINK_GORON_DINS) && (logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_BLUE_FIRE_MUD_WALLS) && logic->CanUse(RG_BOTTLE_WITH_BLUE_FIRE)))));}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GC_MAZE_LEFT_CHEST, logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_SILVER_GAUNTLETS) || (ctx->GetTrickOption(RT_GC_LEFTMOST) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
|
@ -27,8 +27,8 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_GS_BOULDER_MAZE, logic->IsChild && logic->BlastOrSmash()),
|
||||
LOCATION(RC_GC_GS_CENTER_PLATFORM, logic->IsAdult && logic->CanAttack()),
|
||||
LOCATION(RC_GC_MEDIGORON, logic->IsAdult && (logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET))),
|
||||
LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GC_MAZE_GOSSIP_STONE_FAIRY, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_GC_MAZE_GOSSIP_STONE_FAIRY_BIG, (logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GC_MAZE_GOSSIP_STONE, logic->BlastOrSmash() || logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
LOCATION(RC_GC_LOWER_STAIRCASE_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GC_LOWER_STAIRCASE_POT_2, logic->CanBreakPots()),
|
||||
|
@ -36,7 +36,6 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_GC_MAZE_CRATE, logic->BlastOrSmash() || (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBreakCrates())),
|
||||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
|
@ -49,8 +48,8 @@ void RegionTable_Init_GoronCity() {
|
|||
|
||||
areaTable[RR_GC_MEDIGORON] = Region("GC Medigoron", SCENE_GORON_CITY, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_GC_MEDIGORON_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GC_MEDIGORON_GOSSIP_STONE, true),
|
||||
LOCATION(RC_GC_MEDIGORON_POT_1, logic->CanBreakPots()),
|
||||
}, {
|
||||
|
@ -72,7 +71,7 @@ void RegionTable_Init_GoronCity() {
|
|||
EventAccess(&logic->GoronCityChildFire, []{return logic->IsChild && logic->CanUse(RG_STICKS);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GC_DARUNIAS_JOY, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION_NNL(RC_GC_DARUNIAS_JOY, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION(RC_GC_DARUNIA_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GC_DARUNIA_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GC_DARUNIA_POT_3, logic->CanBreakPots()),
|
||||
|
@ -105,9 +104,9 @@ void RegionTable_Init_GoronCity() {
|
|||
|
||||
areaTable[RR_GC_GROTTO] = Region("GC Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_GC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GC_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_GC_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION(RC_GC_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -7,38 +7,38 @@ void RegionTable_Init_Graveyard() {
|
|||
// clang-format off
|
||||
areaTable[RR_THE_GRAVEYARD] = Region("The Graveyard", SCENE_GRAVEYARD, {
|
||||
//Events
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}, true),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->BugRock, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GRAVEYARD_FREESTANDING_POH, (((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()) || (ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtNight), //TODO: This needs to change
|
||||
LOCATION_NNL(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtNight), //TODO: This needs to change
|
||||
LOCATION(RC_GRAVEYARD_GS_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->AtNight && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GRAVEYARD_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GY_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GY_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GRAVEYARD_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GY_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_GY_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION(RC_GRAVEYARD_CRATE, ((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}),
|
||||
Entrance(RR_GRAVEYARD_COMPOSERS_GRAVE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_GRAVEYARD_COMPOSERS_GRAVE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}, true),
|
||||
Entrance(RR_GRAVEYARD_HEART_PIECE_GRAVE, []{return logic->IsAdult || logic->AtNight;}),
|
||||
Entrance(RR_GRAVEYARD_DAMPES_GRAVE, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GRAVEYARD_DAMPES_HOUSE, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/;}), //TODO: This needs to be handled in ToD rework
|
||||
Entrance(RR_GRAVEYARD_DAMPES_HOUSE, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/;}, true), //TODO: This needs to be handled in ToD rework
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return false;}),
|
||||
});
|
||||
|
@ -69,7 +69,7 @@ void RegionTable_Init_Graveyard() {
|
|||
|
||||
areaTable[RR_GRAVEYARD_HEART_PIECE_GRAVE] = Region("Graveyard Heart Piece Grave", SCENE_REDEAD_GRAVE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
|
@ -110,7 +110,7 @@ void RegionTable_Init_Graveyard() {
|
|||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_KAK_WINDMILL, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}, false),
|
||||
Entrance(RR_KAK_WINDMILL, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}, false, false),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Region("Graveyard Dampes House", SCENE_GRAVEKEEPERS_HUT, {}, {
|
||||
|
@ -123,11 +123,11 @@ void RegionTable_Init_Graveyard() {
|
|||
|
||||
areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Region("Graveyard Warp Pad Region", SCENE_GRAVEYARD, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_GRAVEYARD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_GRAVEYARD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_GRAVEYARD_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -7,60 +7,60 @@ void RegionTable_Init_HyruleField() {
|
|||
// clang-format off
|
||||
areaTable[RR_HYRULE_FIELD] = Region("Hyrule Field", SCENE_HYRULE_FIELD, {
|
||||
//Events
|
||||
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}),
|
||||
EventAccess(&logic->BigPoeKill, []{return logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_EPONA) && logic->HasBottle();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_SONG_FROM_OCARINA_OF_TIME, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_CENTRAL_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTH_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_OCARINA_OF_TIME_ITEM, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_SONG_FROM_OCARINA_OF_TIME, logic->IsChild && logic->StoneCount() == 3 && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_HF_POND_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_CENTRAL_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTH_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BRIDGE, []{return true;}),
|
||||
|
@ -72,27 +72,27 @@ void RegionTable_Init_HyruleField() {
|
|||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
Entrance(RR_HF_SOUTHEAST_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_HF_OPEN_GROTTO, []{return true;}),
|
||||
Entrance(RR_HF_INSIDE_FENCE_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_HF_COW_GROTTO, []{return (logic->CanUse(RG_MEGATON_HAMMER) || logic->IsChild) && logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_HF_NEAR_MARKET_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_HF_FAIRY_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_HF_NEAR_KAK_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_HF_TEKTITE_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_HF_INSIDE_FENCE_GROTTO, []{return logic->CanOpenBombGrotto();}, true),
|
||||
Entrance(RR_HF_COW_GROTTO, []{return (logic->CanUse(RG_MEGATON_HAMMER) || logic->IsChild) && logic->CanOpenBombGrotto();}, true),
|
||||
Entrance(RR_HF_NEAR_MARKET_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}, true),
|
||||
Entrance(RR_HF_FAIRY_GROTTO, []{return Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();});}, true),
|
||||
Entrance(RR_HF_NEAR_KAK_GROTTO, []{return logic->CanOpenBombGrotto();}, true),
|
||||
Entrance(RR_HF_TEKTITE_GROTTO, []{return logic->CanOpenBombGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_SOUTHEAST_GROTTO] = Region("HF Southeast Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_CHEST, true),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
|
@ -101,16 +101,16 @@ void RegionTable_Init_HyruleField() {
|
|||
areaTable[RR_HF_OPEN_GROTTO] = Region("HF Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_OPEN_GROTTO_CHEST, true),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
|
@ -118,9 +118,9 @@ void RegionTable_Init_HyruleField() {
|
|||
|
||||
areaTable[RR_HF_INSIDE_FENCE_GROTTO] = Region("HF Inside Fence Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_DEKU_SCRUB_GROTTO, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_HF_DEKU_SCRUB_GROTTO, logic->CanStunDeku()),
|
||||
LOCATION(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_FENCE_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_FENCE_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
|
@ -134,19 +134,19 @@ void RegionTable_Init_HyruleField() {
|
|||
|
||||
areaTable[RR_HF_COW_GROTTO_BEHIND_WEBS] = Region("HF Cow Grotto Behind Webs", SCENE_GROTTOS, {
|
||||
//Events
|
||||
EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}, true),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_GS_COW_GROTTO, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
LOCATION(RC_HF_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_COW_GROTTO_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HF_COW_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HF_COW_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HF_COW_GROTTO_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_HF_COW_GROTTO_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_HF_COW_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_COW_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HF_COW_GROTTO, []{return true;}),
|
||||
|
@ -155,16 +155,16 @@ void RegionTable_Init_HyruleField() {
|
|||
areaTable[RR_HF_NEAR_MARKET_GROTTO] = Region("HF Near Market Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_CHEST, true),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
|
@ -198,7 +198,7 @@ void RegionTable_Init_HyruleField() {
|
|||
|
||||
areaTable[RR_HF_TEKTITE_GROTTO] = Region("HF Tektite Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
LOCATION(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, logic->HasItem(logic->IsNNL() ? RG_BRONZE_SCALE : RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
|
|
|
@ -12,63 +12,63 @@ void RegionTable_Init_Kakariko() {
|
|||
EventAccess(&logic->KakarikoVillageGateOpen, []{return logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)),
|
||||
LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay),
|
||||
LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay),
|
||||
LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)),
|
||||
LOCATION_NNL(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)),
|
||||
LOCATION_NNL(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay),
|
||||
LOCATION_NNL(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay),
|
||||
LOCATION_NNL(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)),
|
||||
//Can kill lower kak skulls with pots
|
||||
LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_GY_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_FENCE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_KAK_CARPENTER_BOSS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY);}),
|
||||
Entrance(RR_KAK_HOUSE_OF_SKULLTULA, []{return logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY);}),
|
||||
Entrance(RR_KAK_IMPAS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY);}),
|
||||
Entrance(RR_KAK_WINDMILL, []{return logic->CanOpenOverworldDoor(RG_WINDMILL_KEY);}),
|
||||
Entrance(RR_KAK_BAZAAR, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY);}),
|
||||
Entrance(RR_KAK_SHOOTING_GALLERY, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY);}),
|
||||
Entrance(RR_KAK_CARPENTER_BOSS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY);}, true),
|
||||
Entrance(RR_KAK_HOUSE_OF_SKULLTULA, []{return logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY);}, true),
|
||||
Entrance(RR_KAK_IMPAS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY);}, true),
|
||||
Entrance(RR_KAK_WINDMILL, []{return logic->CanOpenOverworldDoor(RG_WINDMILL_KEY);}, true),
|
||||
Entrance(RR_KAK_BAZAAR, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY);}, true),
|
||||
Entrance(RR_KAK_SHOOTING_GALLERY, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY);}, true),
|
||||
Entrance(RR_KAK_WELL, []{return logic->IsAdult || logic->DrainWell || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash());}),
|
||||
Entrance(RR_KAK_POTION_SHOP_FRONT, []{return (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}),
|
||||
Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_KAK_POTION_SHOP_FRONT, []{return (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}, true),
|
||||
Entrance(RR_KAK_REDEAD_GROTTO, []{return logic->CanOpenBombGrotto();}, true),
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return (logic->IsChild && logic->AtDay) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION));}),
|
||||
Entrance(RR_KAK_WATCHTOWER, []{return logic->IsAdult || logic->AtDay || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer());}),
|
||||
Entrance(RR_KAK_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsAdult);}),
|
||||
|
@ -116,19 +116,19 @@ void RegionTable_Init_Kakariko() {
|
|||
areaTable[RR_KAK_BACKYARD] = Region("Kak Backyard", SCENE_KAKARIKO_VILLAGE, {}, {
|
||||
//Locations
|
||||
//There's probably a trick to get these with rang from the main region
|
||||
LOCATION(RC_KAK_NEAR_MEDICINE_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_KAK_NEAR_MEDICINE_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_MEDICINE_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_KAK_NEAR_MEDICINE_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_KAK_OPEN_GROTTO, []{return true;}),
|
||||
Entrance(RR_KAK_ODD_POTION_BUILDING, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY);}),
|
||||
Entrance(RR_KAK_POTION_SHOP_BACK, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}),
|
||||
Entrance(RR_KAK_ODD_POTION_BUILDING, []{return logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY);}, true),
|
||||
Entrance(RR_KAK_POTION_SHOP_BACK, []{return logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_CARPENTER_BOSS_HOUSE] = Region("Kak Carpenter Boss House", SCENE_KAKARIKO_CENTER_GUEST_HOUSE, {
|
||||
//Events
|
||||
EventAccess(&logic->WakeUpAdultTalon, []{return logic->IsAdult && logic->CanUse(RG_POCKET_EGG);}),
|
||||
EventAccess(&logic->WakeUpAdultTalon, []{return logic->IsAdult && logic->CanUse(RG_POCKET_EGG);}, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
|
@ -136,12 +136,12 @@ void RegionTable_Init_Kakariko() {
|
|||
|
||||
areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Region("Kak House of Skulltula", SCENE_HOUSE_OF_SKULLTULA, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_10_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 10),
|
||||
LOCATION(RC_KAK_20_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 20),
|
||||
LOCATION(RC_KAK_30_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 30),
|
||||
LOCATION(RC_KAK_40_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 40),
|
||||
LOCATION(RC_KAK_50_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 50),
|
||||
LOCATION(RC_KAK_100_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 100),
|
||||
LOCATION_NNL(RC_KAK_10_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 10),
|
||||
LOCATION_NNL(RC_KAK_20_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 20),
|
||||
LOCATION_NNL(RC_KAK_30_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 30),
|
||||
LOCATION_NNL(RC_KAK_40_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 40),
|
||||
LOCATION_NNL(RC_KAK_50_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 50),
|
||||
LOCATION_NNL(RC_KAK_100_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 100),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
|
@ -149,7 +149,7 @@ void RegionTable_Init_Kakariko() {
|
|||
|
||||
areaTable[RR_KAK_IMPAS_HOUSE] = Region("Kak Impas House", SCENE_IMPAS_HOUSE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
|
@ -158,7 +158,7 @@ void RegionTable_Init_Kakariko() {
|
|||
areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Region("Kak Impas House Back", SCENE_IMPAS_HOUSE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_IMPAS_HOUSE_FREESTANDING_POH, true),
|
||||
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return true;}),
|
||||
|
@ -166,11 +166,11 @@ void RegionTable_Init_Kakariko() {
|
|||
|
||||
areaTable[RR_KAK_WINDMILL] = Region("Kak Windmill", SCENE_WINDMILL_AND_DAMPES_GRAVE, {
|
||||
//Events
|
||||
EventAccess(&logic->DrainWell, []{return logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->DrainWell, []{return logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_WINDMILL_FREESTANDING_POH, logic->CanUse(RG_BOOMERANG) || logic->DampesWindmillAccess || (logic->IsAdult && ctx->GetTrickOption(RT_KAK_ADULT_WINDMILL_POH)) || (logic->IsChild && logic->CanJumpslashExceptHammer() && ctx->GetTrickOption(RT_KAK_CHILD_WINDMILL_POH))),
|
||||
LOCATION(RC_SONG_FROM_WINDMILL, logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA)),
|
||||
LOCATION_NNL(RC_SONG_FROM_WINDMILL, logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
|
@ -193,7 +193,7 @@ void RegionTable_Init_Kakariko() {
|
|||
|
||||
areaTable[RR_KAK_SHOOTING_GALLERY] = Region("Kak Shooting Gallery", SCENE_SHOOTING_GALLERY, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_SHOOTING_GALLERY_REWARD, logic->HasItem(RG_CHILD_WALLET) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)),
|
||||
LOCATION_NNL(RC_KAK_SHOOTING_GALLERY_REWARD, logic->HasItem(RG_CHILD_WALLET) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
|
@ -226,8 +226,8 @@ void RegionTable_Init_Kakariko() {
|
|||
// RANDOTODO blue pot access
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_TRADE_ODD_MUSHROOM, logic->IsAdult && logic->CanUse(RG_ODD_MUSHROOM)),
|
||||
LOCATION(RC_KAK_GRANNYS_SHOP, logic->IsAdult && (logic->CanUse(RG_ODD_MUSHROOM) || logic->TradeQuestStep(RG_ODD_MUSHROOM))),
|
||||
LOCATION_NNL(RC_KAK_TRADE_ODD_MUSHROOM, logic->IsAdult && logic->CanUse(RG_ODD_MUSHROOM)),
|
||||
LOCATION_NNL(RC_KAK_GRANNYS_SHOP, logic->IsAdult && (logic->CanUse(RG_ODD_MUSHROOM) || logic->TradeQuestStep(RG_ODD_MUSHROOM))),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return true;}),
|
||||
|
@ -244,16 +244,16 @@ void RegionTable_Init_Kakariko() {
|
|||
areaTable[RR_KAK_OPEN_GROTTO] = Region("Kak Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_CHEST, true),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return true;}),
|
||||
|
|
|
@ -7,74 +7,74 @@ void RegionTable_Init_KokiriForest() {
|
|||
// clang-format off
|
||||
areaTable[RR_KOKIRI_FOREST] = Region("Kokiri Forest", SCENE_KOKIRI_FOREST, {
|
||||
//Events
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->ShowedMidoSwordAndShield, []{return logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD);}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
EventAccess(&logic->ShowedMidoSwordAndShield, []{return logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_KF_KOKIRI_SWORD_CHEST, logic->IsChild),
|
||||
LOCATION(RC_KF_GS_KNOW_IT_ALL_HOUSE, logic->IsChild && logic->CanAttack() && (/*TODO: HasNightStart ||*/ logic->CanLeaveForest() || logic->CanUse(RG_SUNS_SONG)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KF_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_KF_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION(RC_KF_GS_HOUSE_OF_TWINS, logic->IsAdult && (logic->HookshotOrBoomerang() || (ctx->GetTrickOption(RT_KF_ADULT_GS) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_KF_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_KF_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_BRIDGE_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_BEHIND_MIDOS_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_SOUTH_GRASS_WEST_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_SOUTH_GRASS_EAST_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_NORTH_GRASS_WEST_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_NORTH_GRASS_EAST_RUPEE, logic->IsChild),
|
||||
LOCATION(RC_KF_BOULDER_RUPEE_1, logic->IsChild),
|
||||
LOCATION(RC_KF_BOULDER_RUPEE_2, logic->IsChild),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_1, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_2, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_3, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_4, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_5, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RUPEE_6, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_BEAN_RED_RUPEE, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_KF_SARIAS_ROOF_WEST_HEART, logic->IsChild),
|
||||
LOCATION(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild),
|
||||
LOCATION(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_BRIDGE_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_BEHIND_MIDOS_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_SOUTH_GRASS_WEST_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_SOUTH_GRASS_EAST_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_NORTH_GRASS_WEST_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_NORTH_GRASS_EAST_RUPEE, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_BOULDER_RUPEE_1, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_BOULDER_RUPEE_2, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_1, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_2, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_3, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_4, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_5, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RUPEE_6, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_BEAN_RED_RUPEE, logic->IsAdult && (CanPlantBean(RR_KOKIRI_FOREST) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_KF_SARIAS_ROOF_WEST_HEART, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_SARIAS_ROOF_EAST_HEART, logic->IsChild),
|
||||
LOCATION_NNL(RC_KF_SARIAS_ROOF_NORTH_HEART, logic->IsChild),
|
||||
LOCATION(RC_KF_GOSSIP_STONE, true),
|
||||
LOCATION(RC_KF_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_5, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_6, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_7, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_8, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_9, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_10, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_11, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_12, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_5, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_6, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_7, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_8, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_9, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_10, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_11, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_CHILD_GRASS_12, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_MAZE_1, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_MAZE_2, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_CHILD_GRASS_MAZE_3, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_1, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_2, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_3, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_4, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_5, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_6, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_7, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_8, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_9, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_10, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_11, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_12, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_13, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_14, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_15, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_16, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_17, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_18, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_19, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_1, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_2, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_3, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_4, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_5, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_6, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_7, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_8, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_9, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_10, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_11, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_12, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_13, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_14, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_15, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_16, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_17, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_18, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_19, logic->IsAdult && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KF_LINKS_HOUSE, []{return true;}),
|
||||
|
@ -86,20 +86,20 @@ void RegionTable_Init_KokiriForest() {
|
|||
Entrance(RR_KF_OUTSIDE_DEKU_TREE, []{return (logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->ForestTempleClear)) || ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield;}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return true;}),
|
||||
Entrance(RR_LW_BRIDGE_FROM_FOREST, []{return logic->IsAdult || ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || logic->DekuTreeClear;}),
|
||||
Entrance(RR_KF_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_KF_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_OUTSIDE_DEKU_TREE] = Region("KF Outside Deku Tree", SCENE_KOKIRI_FOREST, {
|
||||
//Events
|
||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}),
|
||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}),
|
||||
EventAccess(&logic->ShowedMidoSwordAndShield, []{return logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD);}),
|
||||
EventAccess(&logic->DekuBabaSticks, []{return logic->CanGetDekuBabaSticks();}, true),
|
||||
EventAccess(&logic->DekuBabaNuts, []{return logic->CanGetDekuBabaNuts();}, true),
|
||||
EventAccess(&logic->ShowedMidoSwordAndShield, []{return logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD) && logic->CanUse(RG_DEKU_SHIELD);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_DEKU_TREE_LEFT_GOSSIP_STONE, true),
|
||||
LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, true),
|
||||
}, {
|
||||
|
@ -110,7 +110,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
|
||||
areaTable[RR_KF_LINKS_HOUSE] = Region("KF Link's House", SCENE_LINKS_HOUSE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_KF_LINKS_HOUSE_COW, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && logic->LinksCow),
|
||||
LOCATION_NNL(RC_KF_LINKS_HOUSE_COW, logic->IsAdult && logic->CanUse(RG_EPONAS_SONG) && logic->LinksCow),
|
||||
LOCATION(RC_KF_LINKS_HOUSE_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -175,16 +175,16 @@ void RegionTable_Init_KokiriForest() {
|
|||
areaTable[RR_KF_STORMS_GROTTO] = Region("KF Storms Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_KF_STORMS_GROTTO_CHEST, true),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
|
|
|
@ -7,87 +7,89 @@ void RegionTable_Init_LakeHylia() {
|
|||
// clang-format off
|
||||
areaTable[RR_LAKE_HYLIA] = Region("Lake Hylia", SCENE_LAKE_HYLIA, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}),
|
||||
EventAccess(&logic->BugShrub, []{return logic->IsChild && logic->CanCutShrubs();}),
|
||||
EventAccess(&logic->ChildScarecrow, []{return logic->IsChild && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 2;}),
|
||||
EventAccess(&logic->AdultScarecrow, []{return logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 2;}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}, true),
|
||||
EventAccess(&logic->BugShrub, []{return logic->IsChild && logic->CanCutShrubs();}, true),
|
||||
EventAccess(&logic->ChildScarecrow, []{return logic->IsChild && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 2;}, true),
|
||||
EventAccess(&logic->AdultScarecrow, []{return logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 2;}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_LH_UNDERWATER_ITEM, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)),
|
||||
LOCATION(RC_LH_SUN, logic->IsAdult && ((logic->WaterTempleClear && logic->HasItem(RG_BRONZE_SCALE)) || logic->CanUse(RG_DISTANT_SCARECROW)) && logic->CanUse(RG_FAIRY_BOW)),
|
||||
LOCATION_NNL(RC_LH_UNDERWATER_ITEM, logic->IsChild && logic->HasItem(RG_SILVER_SCALE)),
|
||||
LOCATION_NNL(RC_LH_SUN, logic->IsAdult && logic->CanUse(RG_FAIRY_BOW) && (logic->IsNNL() || (logic->WaterTempleClear && logic->HasItem(RG_BRONZE_SCALE)) || logic->CanUse(RG_DISTANT_SCARECROW))),
|
||||
LOCATION(RC_LH_FREESTANDING_POH, logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA))),
|
||||
LOCATION(RC_LH_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
LOCATION_NNL(RC_LH_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
LOCATION(RC_LH_GS_LAB_WALL, logic->IsChild && (logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) || (ctx->GetTrickOption(RT_LH_LAB_WALL_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LH_GS_SMALL_ISLAND, logic->IsChild && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) && logic->CanGetNightTimeGS() && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_LH_GS_TREE, logic->IsAdult && logic->CanUse(RG_LONGSHOT) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LH_FRONT_RUPEE, logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION(RC_LH_MIDDLE_RUPEE, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LH_BACK_RUPEE, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LH_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LH_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LH_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_FRONT_RUPEE, logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
LOCATION_NNL(RC_LH_MIDDLE_RUPEE, logic->IsChild && (logic->HasItem(logic->IsNNL() ? RG_BRONZE_SCALE : RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION_NNL(RC_LH_BACK_RUPEE, logic->IsChild && (logic->HasItem(logic->IsNNL() ? RG_BRONZE_SCALE : RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION_NNL(RC_LH_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_LAB_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_LH_LAB_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
//You can walk along the edge of the lake to get these without swimming, the fairy is created going backwards, which is convenient here
|
||||
LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LH_ISLAND_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && ((logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->WaterTempleClear)) || logic->CanUse(RG_DISTANT_SCARECROW))),
|
||||
LOCATION_NNL(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_LH_SOUTHEAST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_LH_SOUTHWEST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LH_ISLAND_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && ((logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->WaterTempleClear)) || logic->CanUse(RG_DISTANT_SCARECROW))),
|
||||
LOCATION(RC_LH_LAB_GOSSIP_STONE, true),
|
||||
LOCATION(RC_LH_SOUTHEAST_GOSSIP_STONE, true),
|
||||
LOCATION(RC_LH_SOUTHWEST_GOSSIP_STONE, true),
|
||||
LOCATION(RC_LH_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_13, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_14, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_15, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_16, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_17, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_18, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_19, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_20, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_21, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_22, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_23, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_24, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_25, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_26, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_27, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_28, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_29, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_30, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_31, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_32, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_33, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_34, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_35, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_GRASS_36, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_WARP_PAD_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LH_WARP_PAD_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_13, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_14, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_15, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_16, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_17, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_18, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_19, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_20, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_21, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_22, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_23, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_24, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_25, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_26, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_27, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_28, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_29, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_30, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_31, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_32, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_33, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_34, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_35, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_GRASS_36, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_CHILD_GRASS_1, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_CHILD_GRASS_2, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_CHILD_GRASS_3, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_CHILD_GRASS_4, logic->IsChild && logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_WARP_PAD_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LH_WARP_PAD_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_LH_FROM_SHORTCUT, []{return true;}),
|
||||
Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}),
|
||||
Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}, true),
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_LH_OWL_FLIGHT, []{return logic->IsChild;}, true),
|
||||
Entrance(RR_LH_FISHING_ISLAND, []{return ((logic->IsChild || logic->WaterTempleClear) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA)));}),
|
||||
Entrance(RR_LH_LAB, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}),
|
||||
Entrance(RR_LH_LAB, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}, true),
|
||||
Entrance(RR_LH_FROM_WATER_TEMPLE, []{return true;}),
|
||||
Entrance(RR_LH_GROTTO, []{return true;}),
|
||||
});
|
||||
|
@ -107,23 +109,23 @@ void RegionTable_Init_LakeHylia() {
|
|||
areaTable[RR_LH_FISHING_ISLAND] = Region("LH Fishing Island", SCENE_LAKE_HYLIA, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_LH_FISHING_POND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}),
|
||||
Entrance(RR_LH_FISHING_POND, []{return logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_OWL_FLIGHT] = Region("LH Owl Flight", SCENE_LAKE_HYLIA, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}, false),
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}, true, false),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_LAB] = Region("LH Lab", SCENE_LAKESIDE_LABORATORY, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LH_LAB_DIVE, logic->HasItem(RG_GOLDEN_SCALE) || (ctx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE))),
|
||||
LOCATION(RC_LH_TRADE_FROG, logic->IsAdult && logic->CanUse(RG_EYEBALL_FROG)),
|
||||
LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_LH_LAB_DIVE, logic->HasItem(RG_GOLDEN_SCALE) || (ctx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE))),
|
||||
LOCATION_NNL(RC_LH_TRADE_FROG, logic->IsAdult && logic->CanUse(RG_EYEBALL_FROG)),
|
||||
LOCATION_NNL(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION_NNL(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION_NNL(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)),
|
||||
LOCATION_NNL(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
|
@ -132,42 +134,42 @@ void RegionTable_Init_LakeHylia() {
|
|||
// TODO: should some of these helpers be done via events instead?
|
||||
areaTable[RR_LH_FISHING_POND] = Region("LH Fishing Hole", SCENE_FISHING_POND, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LH_CHILD_FISHING, logic->CanUse(RG_FISHING_POLE) && logic->IsChild),
|
||||
LOCATION(RC_LH_CHILD_FISH_1, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_2, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_3, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_4, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_5, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_6, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_7, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_8, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_9, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_10, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_11, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_12, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_13, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_14, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_FISH_15, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_LOACH_1, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_CHILD_LOACH_2, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION(RC_LH_ADULT_FISHING, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult),
|
||||
LOCATION(RC_LH_ADULT_FISH_1, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_2, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_3, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_4, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_5, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_6, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_7, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_8, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_9, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_10, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_11, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_12, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_13, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_14, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_FISH_15, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_ADULT_LOACH, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION(RC_LH_HYRULE_LOACH, logic->CanUse(RG_FISHING_POLE)),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISHING, logic->CanUse(RG_FISHING_POLE) && logic->IsChild),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_1, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_2, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_3, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_4, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_5, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_6, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_7, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_8, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_9, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_10, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_11, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_12, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_13, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_14, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_FISH_15, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_LOACH_1, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_CHILD_LOACH_2, logic->CanUse(RG_FISHING_POLE) && (logic->IsChild || !ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT))),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISHING, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_1, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_2, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_3, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_4, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_5, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_6, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_7, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_8, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_9, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_10, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_11, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_12, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_13, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_14, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_FISH_15, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_ADULT_LOACH, logic->CanUse(RG_FISHING_POLE) && logic->IsAdult && ctx->GetOption(RSK_FISHSANITY_AGE_SPLIT)),
|
||||
LOCATION_NNL(RC_LH_HYRULE_LOACH, logic->CanUse(RG_FISHING_POLE)),
|
||||
LOCATION(RC_FISHING_POLE_HINT, true),
|
||||
}, {
|
||||
//Exits
|
||||
|
@ -176,9 +178,9 @@ void RegionTable_Init_LakeHylia() {
|
|||
|
||||
areaTable[RR_LH_GROTTO] = Region("LH Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LH_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_LH_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LH_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LH_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION(RC_LH_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -8,34 +8,34 @@ void RegionTable_Init_LonLonRanch() {
|
|||
areaTable[RR_LON_LON_RANCH] = Region("Lon Lon Ranch", SCENE_LON_LON_RANCH, {
|
||||
//Events
|
||||
EventAccess(&logic->FreedEpona, []{return (logic->HasItem(RG_CHILD_WALLET) || ctx->GetOption(RSK_SKIP_EPONA_RACE)) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay;}),
|
||||
EventAccess(&logic->LinksCow, []{return logic->HasItem(RG_CHILD_WALLET) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay;}),
|
||||
EventAccess(&logic->LinksCow, []{return logic->HasItem(RG_CHILD_WALLET) && logic->CanUse(RG_EPONAS_SONG) && logic->IsAdult && logic->AtDay;}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SONG_FROM_MALON, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
|
||||
LOCATION(RC_LLR_GS_TREE, logic->IsChild),
|
||||
LOCATION(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_SONG_FROM_MALON, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER) && logic->HasItem(RG_FAIRY_OCARINA) && logic->AtDay),
|
||||
LOCATION_NNL(RC_LLR_GS_TREE, logic->IsChild),
|
||||
LOCATION_NNL(RC_LLR_GS_RAIN_SHED, logic->IsChild && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_LLR_GS_HOUSE_WINDOW, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_LLR_GS_BACK_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_LLR_FRONT_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_FRONT_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_FRONT_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_FRONT_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_LLR_TALONS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY);}),
|
||||
Entrance(RR_LLR_STABLES, []{return logic->CanOpenOverworldDoor(RG_STABLES_KEY);}),
|
||||
Entrance(RR_LLR_TOWER, []{return logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY);}),
|
||||
Entrance(RR_LLR_GROTTO, []{return logic->IsChild;}),
|
||||
Entrance(RR_LLR_TALONS_HOUSE, []{return logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY);}, true),
|
||||
Entrance(RR_LLR_STABLES, []{return logic->CanOpenOverworldDoor(RG_STABLES_KEY);}, true),
|
||||
Entrance(RR_LLR_TOWER, []{return logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY);}, true),
|
||||
Entrance(RR_LLR_GROTTO, []{return logic->IsChild;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LLR_TALONS_HOUSE] = Region("LLR Talons House", SCENE_LON_LON_BUILDINGS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LLR_TALONS_CHICKENS, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtDay && logic->HasItem(RG_ZELDAS_LETTER)),
|
||||
LOCATION_NNL(RC_LLR_TALONS_CHICKENS, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtDay && logic->HasItem(RG_ZELDAS_LETTER)),
|
||||
LOCATION(RC_LLR_TALONS_HOUSE_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_TALONS_HOUSE_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_LLR_TALONS_HOUSE_POT_3, logic->CanBreakPots()),
|
||||
|
@ -46,8 +46,8 @@ void RegionTable_Init_LonLonRanch() {
|
|||
|
||||
areaTable[RR_LLR_STABLES] = Region("LLR Stables", SCENE_STABLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LLR_STABLES_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_LLR_STABLES_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_LLR_STABLES_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_LLR_STABLES_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
|
@ -55,9 +55,9 @@ void RegionTable_Init_LonLonRanch() {
|
|||
|
||||
areaTable[RR_LLR_TOWER] = Region("LLR Tower", SCENE_LON_LON_BUILDINGS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LLR_FREESTANDING_POH, logic->IsChild),
|
||||
LOCATION(RC_LLR_TOWER_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_LLR_FREESTANDING_POH, logic->IsChild),
|
||||
LOCATION_NNL(RC_LLR_TOWER_LEFT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
|
@ -65,9 +65,9 @@ void RegionTable_Init_LonLonRanch() {
|
|||
|
||||
areaTable[RR_LLR_GROTTO] = Region("LLR Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, logic->CanStunDeku()),
|
||||
LOCATION(RC_LLR_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -12,15 +12,15 @@ void RegionTable_Init_LostWoods() {
|
|||
|
||||
areaTable[RR_THE_LOST_WOODS] = Region("Lost Woods", SCENE_LOST_WOODS, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->BugShrub, []{return logic->IsChild && logic->CanCutShrubs();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->BugShrub, []{return logic->BugShrub || (logic->IsChild && logic->CanCutShrubs());}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_LW_SKULL_KID, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION(RC_LW_TRADE_COJIRO, logic->IsAdult && logic->CanUse(RG_COJIRO)),
|
||||
LOCATION_NNL(RC_LW_SKULL_KID, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION_NNL(RC_LW_TRADE_COJIRO, logic->IsAdult && logic->CanUse(RG_COJIRO)),
|
||||
//I cannot think of a case where you can use Odd pot but not Cojiro to reset the quadrant should you have both. If one exists, add it to logic
|
||||
LOCATION(RC_LW_TRADE_ODD_POTION, logic->IsAdult && logic->CanUse(RG_ODD_POTION)),
|
||||
LOCATION_NNL(RC_LW_TRADE_ODD_POTION, logic->IsAdult && logic->CanUse(RG_ODD_POTION)),
|
||||
//all 5 buttons are logically required for memory game
|
||||
//because the chances of being able to beat it
|
||||
//every time you attempt it are as follows:
|
||||
|
@ -29,10 +29,10 @@ void RegionTable_Init_LostWoods() {
|
|||
//3 buttons => 3.75%
|
||||
//4 buttons => 25.3125%
|
||||
//5 buttons => 100%
|
||||
LOCATION(RC_LW_OCARINA_MEMORY_GAME, logic->IsChild && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 5),
|
||||
LOCATION(RC_LW_TARGET_IN_WOODS, logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
LOCATION(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
LOCATION_NNL(RC_LW_OCARINA_MEMORY_GAME, logic->IsChild && logic->HasItem(RG_FAIRY_OCARINA) && logic->OcarinaButtons() >= 5),
|
||||
LOCATION_NNL(RC_LW_TARGET_IN_WOODS, logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LW_GS_BEAN_PATCH_NEAR_BRIDGE, logic->CanSpawnSoilSkull() && logic->CanAttack()),
|
||||
//RANDOTODO handle collecting some of these as you leave the shortcut from the other side
|
||||
LOCATION(RC_LW_SHORTCUT_RUPEE_1, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LW_SHORTCUT_RUPEE_2, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
|
@ -42,16 +42,16 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_SHORTCUT_RUPEE_6, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LW_SHORTCUT_RUPEE_7, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LW_SHORTCUT_RUPEE_8, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_BRIDGE_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_LW_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_SHORTCUT_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_GOSSIP_STONE, true),
|
||||
LOCATION(RC_LW_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_FOREST_EXIT, []{return true;}),
|
||||
|
@ -64,23 +64,23 @@ void RegionTable_Init_LostWoods() {
|
|||
|
||||
areaTable[RR_LW_BEYOND_MIDO] = Region("LW Beyond Mido", SCENE_LOST_WOODS, {
|
||||
//Events
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION(RC_LW_GS_ABOVE_THEATER, logic->IsAdult && ((CanPlantBean(RR_LW_BEYOND_MIDO) && logic->CanAttack()) || (ctx->GetTrickOption(RT_LW_GS_BEAN) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE)))) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_LW_GS_BEAN_PATCH_NEAR_THEATER, logic->CanSpawnSoilSkull() && (logic->CanAttack() || (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF) && logic->CanReflectNuts()))),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, logic->IsChild && logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LW_GS_ABOVE_THEATER, logic->IsAdult && ((CanPlantBean(RR_LW_BEYOND_MIDO) && logic->CanAttack()) || (ctx->GetTrickOption(RT_LW_GS_BEAN) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE)))) && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_LW_GS_BEAN_PATCH_NEAR_THEATER, logic->CanSpawnSoilSkull() && (logic->CanAttack() || (ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF) && logic->CanReflectNuts()))),
|
||||
LOCATION(RC_LW_BOULDER_RUPEE, logic->BlastOrSmash()),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_1, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_2, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_BEAN_SPROUT_NEAR_THEATER_FAIRY_3, logic->IsChild && logic->HasItem(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_GRASS_9, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_FOREST_EXIT, []{return true;}),
|
||||
|
@ -93,16 +93,16 @@ void RegionTable_Init_LostWoods() {
|
|||
areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Region("LW Near Shortcuts Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_CHEST, true),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_LOST_WOODS, []{return true;}),
|
||||
|
@ -110,8 +110,8 @@ void RegionTable_Init_LostWoods() {
|
|||
|
||||
areaTable[RR_DEKU_THEATER] = Region("Deku Theater", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_DEKU_THEATER_SKULL_MASK, logic->IsChild && logic->SkullMask),
|
||||
LOCATION(RC_DEKU_THEATER_MASK_OF_TRUTH, logic->IsChild && logic->MaskOfTruth),
|
||||
LOCATION_NNL(RC_DEKU_THEATER_SKULL_MASK, logic->IsChild && logic->SkullMask),
|
||||
LOCATION_NNL(RC_DEKU_THEATER_MASK_OF_TRUTH, logic->IsChild && logic->MaskOfTruth),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
|
@ -119,10 +119,10 @@ void RegionTable_Init_LostWoods() {
|
|||
|
||||
areaTable[RR_LW_SCRUBS_GROTTO] = Region("LW Scrubs Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_LW_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_LW_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
LOCATION(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
|
|
|
@ -7,9 +7,9 @@ void RegionTable_Init_Market() {
|
|||
// clang-format off
|
||||
areaTable[RR_MARKET_ENTRANCE] = Region("Market Entrance", SCENE_MARKET_ENTRANCE_DAY, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}),
|
||||
Entrance(RR_HYRULE_FIELD, []{return logic->IsAdult || logic->AtDay;}, true),
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}),
|
||||
Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_THE_MARKET] = Region("Market", SCENE_MARKET_DAY, {}, {
|
||||
|
@ -32,90 +32,90 @@ void RegionTable_Init_Market() {
|
|||
Entrance(RR_MARKET_ENTRANCE, []{return true;}),
|
||||
Entrance(RR_TOT_ENTRANCE, []{return true;}),
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
Entrance(RR_MARKET_BAZAAR, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY);}),
|
||||
Entrance(RR_MARKET_MASK_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY);}),
|
||||
Entrance(RR_MARKET_SHOOTING_GALLERY, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY);}),
|
||||
Entrance(RR_MARKET_BOMBCHU_BOWLING, []{return logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY);}),
|
||||
Entrance(RR_MARKET_TREASURE_CHEST_GAME, []{return logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY);}),
|
||||
Entrance(RR_MARKET_POTION_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY);}),
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return logic->IsChild;}),
|
||||
Entrance(RR_MARKET_BAZAAR, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY);}, true),
|
||||
Entrance(RR_MARKET_MASK_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY);}, true),
|
||||
Entrance(RR_MARKET_SHOOTING_GALLERY, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY);}, true),
|
||||
Entrance(RR_MARKET_BOMBCHU_BOWLING, []{return logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY);}, true),
|
||||
Entrance(RR_MARKET_TREASURE_CHEST_GAME, []{return logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY);}, true),
|
||||
Entrance(RR_MARKET_POTION_SHOP, []{return logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY);}, true),
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return logic->IsChild;}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_BACK_ALLEY] = Region("Market Back Alley", SCENE_BACK_ALLEY_DAY, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
Entrance(RR_MARKET_BOMBCHU_SHOP, []{return logic->AtNight && logic->CanOpenOverworldDoor(RG_BOMBCHU_SHOP_KEY);}),
|
||||
Entrance(RR_MARKET_DOG_LADY_HOUSE, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}),
|
||||
Entrance(RR_MARKET_MAN_IN_GREEN_HOUSE, []{return logic->AtNight && logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY);}),
|
||||
Entrance(RR_MARKET_BOMBCHU_SHOP, []{return logic->AtNight && logic->CanOpenOverworldDoor(RG_BOMBCHU_SHOP_KEY);}, true),
|
||||
Entrance(RR_MARKET_DOG_LADY_HOUSE, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}, true),
|
||||
Entrance(RR_MARKET_MAN_IN_GREEN_HOUSE, []{return logic->AtNight && logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY);}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_GUARD_HOUSE] = Region("Market Guard House", SCENE_MARKET_GUARD_HOUSE, {
|
||||
//Events
|
||||
EventAccess(&logic->CanEmptyBigPoes, []{return logic->IsAdult;}),
|
||||
EventAccess(&logic->CanEmptyBigPoes, []{return logic->IsAdult;}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_MARKET_10_BIG_POES, logic->IsAdult && (logic->BigPoeKill || logic->BigPoes >= ctx->GetOption(RSK_BIG_POE_COUNT).Get())),
|
||||
LOCATION(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_5, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_6, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_7, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_8, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_9, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_10, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_11, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_12, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_13, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_14, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_15, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_16, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_17, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_18, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_19, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_20, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_21, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_22, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_23, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_24, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_25, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_26, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_27, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_28, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_29, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_30, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_31, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_32, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_33, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_34, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_35, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_36, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_37, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_38, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_39, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_40, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_41, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_42, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_43, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CHILD_POT_44, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_1, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_2, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_3, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_4, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_5, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_6, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_7, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_8, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_9, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_10, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_MARKET_10_BIG_POES, logic->IsAdult && (logic->BigPoeKill || logic->BigPoes >= ctx->GetOption(RSK_BIG_POE_COUNT).Get())),
|
||||
LOCATION_NNL(RC_MARKET_GS_GUARD_HOUSE, logic->IsChild),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_5, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_6, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_7, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_8, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_9, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_10, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_11, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_12, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_13, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_14, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_15, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_16, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_17, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_18, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_19, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_20, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_21, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_22, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_23, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_24, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_25, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_26, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_27, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_28, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_29, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_30, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_31, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_32, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_33, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_34, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_35, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_36, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_37, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_38, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_39, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_40, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_41, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_42, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_43, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CHILD_POT_44, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_1, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_2, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_3, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_4, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_5, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_6, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_7, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_8, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_9, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_10, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CRATE_1, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CRATE_2, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CRATE_3, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CRATE_4, logic->IsChild && logic->CanBreakCrates()),
|
||||
LOCATION_NNL(RC_MK_GUARD_HOUSE_CRATE_5, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_MARKET_ENTRANCE, []{return true;}),
|
||||
|
@ -138,8 +138,8 @@ void RegionTable_Init_Market() {
|
|||
|
||||
areaTable[RR_MARKET_MASK_SHOP] = Region("Market Mask Shop", SCENE_HAPPY_MASK_SHOP, {
|
||||
//Events
|
||||
EventAccess(&logic->SkullMask, []{return logic->HasItem(RG_ZELDAS_LETTER) && (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) || ChildCanAccess(RR_KAKARIKO_VILLAGE));}), //RANDOTODO Complete mask quest does not need this location, so should be tied to link's pocket
|
||||
EventAccess(&logic->MaskOfTruth, []{return logic->SkullMask && (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) || (ChildCanAccess(RR_THE_LOST_WOODS) && logic->CanUse(RG_SARIAS_SONG) && RegionTable(RR_THE_GRAVEYARD)->childDay && ChildCanAccess(RR_HYRULE_FIELD) && logic->StoneCount() == 3));}),
|
||||
EventAccess(&logic->SkullMask, []{return logic->HasItem(RG_ZELDAS_LETTER) && (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) || ChildCanAccess(RR_KAKARIKO_VILLAGE));}, true), //RANDOTODO Complete mask quest does not need this location, so should be tied to link's pocket
|
||||
EventAccess(&logic->MaskOfTruth, []{return logic->SkullMask && (ctx->GetOption(RSK_COMPLETE_MASK_QUEST) || (ChildCanAccess(RR_THE_LOST_WOODS) && logic->CanUse(RG_SARIAS_SONG) && RegionTable(RR_THE_GRAVEYARD)->childDay && ChildCanAccess(RR_HYRULE_FIELD) && logic->StoneCount() == 3));}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_MASK_SHOP_HINT, true),
|
||||
|
@ -150,7 +150,7 @@ void RegionTable_Init_Market() {
|
|||
|
||||
areaTable[RR_MARKET_SHOOTING_GALLERY] = Region("Market Shooting Gallery", SCENE_SHOOTING_GALLERY, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_MARKET_SHOOTING_GALLERY_REWARD, logic->IsChild && logic->HasItem(RG_CHILD_WALLET)),
|
||||
LOCATION_NNL(RC_MARKET_SHOOTING_GALLERY_REWARD, logic->IsChild && logic->HasItem(RG_CHILD_WALLET)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
|
@ -158,11 +158,11 @@ void RegionTable_Init_Market() {
|
|||
|
||||
areaTable[RR_MARKET_BOMBCHU_BOWLING] = Region("Market Bombchu Bowling", SCENE_BOMBCHU_BOWLING_ALLEY, {
|
||||
//Events
|
||||
EventAccess(&logic->CouldPlayBowling, []{return (logic->HasItem(RG_CHILD_WALLET));}),
|
||||
EventAccess(&logic->CouldPlayBowling, []{return logic->HasItem(RG_CHILD_WALLET);}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()),
|
||||
LOCATION(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()),
|
||||
LOCATION_NNL(RC_MARKET_BOMBCHU_BOWLING_FIRST_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()),
|
||||
LOCATION_NNL(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
|
@ -185,18 +185,18 @@ void RegionTable_Init_Market() {
|
|||
|
||||
areaTable[RR_MARKET_TREASURE_CHEST_GAME] = Region("Market Treasure Chest Game", SCENE_TREASURE_BOX_SHOP, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GREG_HINT, logic->HasItem(RG_CHILD_WALLET)),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_REWARD, logic->HasItem(RG_CHILD_WALLET) && ((logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_GREG_HINT, logic->HasItem(RG_CHILD_WALLET)),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_REWARD, logic->HasItem(RG_CHILD_WALLET) && ((logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 6)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_KEY_1, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_ITEM_1, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_KEY_2, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_ITEM_2, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 2)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_KEY_3, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_ITEM_3, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 3)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_KEY_4, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_ITEM_4, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 4)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_KEY_5, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
LOCATION_NNL(RC_MARKET_TREASURE_CHEST_GAME_ITEM_5, logic->HasItem(RG_CHILD_WALLET) && ((ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_SINGLE_KEYS) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 5)) || (ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME).Is(RO_CHEST_GAME_PACK) && logic->SmallKeys(RR_MARKET_TREASURE_CHEST_GAME, 1)) || (logic->CanUse(RG_LENS_OF_TRUTH) && !ctx->GetOption(RSK_SHUFFLE_CHEST_MINIGAME)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
|
@ -219,7 +219,7 @@ void RegionTable_Init_Market() {
|
|||
|
||||
areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", SCENE_DOG_LADY_HOUSE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight),
|
||||
LOCATION_NNL(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight),
|
||||
LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -9,23 +9,23 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return logic->IsAdult || logic->CanKillEnemy(RE_WOLFOS);}),
|
||||
Entrance(RR_SFM_WOLFOS_GROTTO, []{return logic->CanOpenBombGrotto();}),
|
||||
Entrance(RR_SFM_WOLFOS_GROTTO, []{return logic->CanOpenBombGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SACRED_FOREST_MEADOW] = Region("Sacred Forest Meadow", SCENE_SACRED_FOREST_MEADOW, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_SONG_FROM_SARIA, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER)),
|
||||
LOCATION(RC_SHEIK_IN_FOREST, logic->IsAdult),
|
||||
LOCATION_NNL(RC_SONG_FROM_SARIA, logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER)),
|
||||
LOCATION_NNL(RC_SHEIK_IN_FOREST, logic->IsAdult),
|
||||
LOCATION(RC_SFM_GS, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_SFM_MAZE_LOWER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_SFM_MAZE_UPPER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_SFM_SARIA_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_SFM_SARIA_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_SFM_MAZE_LOWER_GOSSIP_STONE, true),
|
||||
LOCATION(RC_SFM_MAZE_UPPER_GOSSIP_STONE, true),
|
||||
LOCATION(RC_SFM_SARIA_GOSSIP_STONE, true),
|
||||
|
@ -34,7 +34,7 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
Entrance(RR_SFM_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_SFM_FAIRY_GROTTO, []{return true;}),
|
||||
Entrance(RR_SFM_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_SFM_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SFM_FAIRY_GROTTO] = Region("SFM Fairy Grotto", SCENE_GROTTOS, {
|
||||
|
@ -65,8 +65,8 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
|
||||
areaTable[RR_SFM_STORMS_GROTTO] = Region("SFM Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_SFM_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_SFM_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION(RC_SFM_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -7,17 +7,17 @@ void RegionTable_Init_TempleOfTime() {
|
|||
// clang-format off
|
||||
areaTable[RR_TOT_ENTRANCE] = Region("ToT Entrance", SCENE_TEMPLE_OF_TIME_EXTERIOR_DAY, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION_NNL(RC_TOT_LEFTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION_NNL(RC_TOT_LEFT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION_NNL(RC_TOT_RIGHT_CENTER_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() || (logic->CanUse(RG_SUNS_SONG) && logic->IsAdult)),
|
||||
LOCATION_NNL(RC_TOT_RIGHTMOST_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_TOT_LEFTMOST_GOSSIP_STONE, true),
|
||||
LOCATION(RC_TOT_LEFT_CENTER_GOSSIP_STONE, true),
|
||||
LOCATION(RC_TOT_RIGHT_CENTER_GOSSIP_STONE, true),
|
||||
|
@ -30,10 +30,10 @@ void RegionTable_Init_TempleOfTime() {
|
|||
|
||||
areaTable[RR_TEMPLE_OF_TIME] = Region("Temple of Time", SCENE_TEMPLE_OF_TIME, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_TOT_LIGHT_ARROWS_CUTSCENE, logic->IsAdult && logic->CanTriggerLACS()),
|
||||
LOCATION(RC_ALTAR_HINT_CHILD, logic->IsChild),
|
||||
LOCATION(RC_ALTAR_HINT_ADULT, logic->IsAdult),
|
||||
LOCATION(RC_TOT_SHEIK_HINT, logic->IsAdult),
|
||||
LOCATION_NNL(RC_TOT_LIGHT_ARROWS_CUTSCENE, logic->IsAdult && logic->CanTriggerLACS()),
|
||||
LOCATION_NNL(RC_ALTAR_HINT_CHILD, logic->IsChild),
|
||||
LOCATION_NNL(RC_ALTAR_HINT_ADULT, logic->IsAdult),
|
||||
LOCATION_NNL(RC_TOT_SHEIK_HINT, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_TOT_ENTRANCE, []{return true;}),
|
||||
|
@ -45,9 +45,9 @@ void RegionTable_Init_TempleOfTime() {
|
|||
//EventAccess(&logic->TimeTravel, []{return true;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TOT_MASTER_SWORD, logic->IsAdult),
|
||||
LOCATION(RC_GIFT_FROM_RAURU, logic->IsAdult),
|
||||
LOCATION(RC_SHEIK_AT_TEMPLE, logic->HasItem(RG_FOREST_MEDALLION) && logic->IsAdult),
|
||||
LOCATION_NNL(RC_TOT_MASTER_SWORD, logic->IsAdult),
|
||||
LOCATION_NNL(RC_GIFT_FROM_RAURU, logic->IsAdult),
|
||||
LOCATION_NNL(RC_SHEIK_AT_TEMPLE, logic->HasItem(RG_FOREST_MEDALLION) && logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
|
|
|
@ -7,29 +7,29 @@ void RegionTable_Init_ZorasDomain() {
|
|||
// clang-format off
|
||||
areaTable[RR_ZORAS_DOMAIN] = Region("Zoras Domain", SCENE_ZORAS_DOMAIN, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
EventAccess(&logic->NutPot, []{return true;}),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->FishGroup, []{return logic->IsChild;}),
|
||||
EventAccess(&logic->KingZoraThawed, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
EventAccess(&logic->DeliverLetter, []{return logic->CanUse(RG_RUTOS_LETTER) && logic->IsChild && ctx->GetOption(RSK_ZORAS_FOUNTAIN).IsNot(RO_ZF_OPEN);}),
|
||||
EventAccess(&logic->StickPot, []{return logic->IsChild;}, true),
|
||||
EventAccess(&logic->FishGroup, []{return logic->IsChild;}, true),
|
||||
EventAccess(&logic->KingZoraThawed, []{return logic->IsAdult && (logic->IsNNL() || logic->BlueFire());}),
|
||||
EventAccess(&logic->DeliverLetter, []{return logic->IsChild && (logic->IsNNL() || logic->CanUse(RG_RUTOS_LETTER)) && ctx->GetOption(RSK_ZORAS_FOUNTAIN).IsNot(RO_ZF_OPEN);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZD_DIVING_MINIGAME, logic->HasItem(RG_BRONZE_SCALE) && logic->HasItem(RG_CHILD_WALLET) && logic->IsChild),
|
||||
LOCATION(RC_ZD_CHEST, logic->IsChild && logic->CanUse(RG_STICKS)),
|
||||
LOCATION(RC_ZD_KING_ZORA_THAWED, logic->IsAdult && logic->KingZoraThawed),
|
||||
LOCATION(RC_ZD_TRADE_PRESCRIPTION, logic->IsAdult && logic->KingZoraThawed && logic->CanUse(RG_PRESCRIPTION)),
|
||||
LOCATION(RC_ZD_GS_FROZEN_WATERFALL, logic->IsAdult && (logic->HookshotOrBoomerang() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_MAGIC_SINGLE) && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))) || (ctx->GetTrickOption(RT_ZD_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZD_FISH_1, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION(RC_ZD_FISH_2, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION(RC_ZD_FISH_3, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION(RC_ZD_FISH_4, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION(RC_ZD_FISH_5, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION(RC_ZD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_ZD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZD_DIVING_MINIGAME, logic->HasItem(RG_BRONZE_SCALE) && logic->HasItem(RG_CHILD_WALLET) && logic->IsChild),
|
||||
LOCATION_NNL(RC_ZD_CHEST, logic->IsChild && (logic->IsNNL() || logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))),
|
||||
LOCATION_NNL(RC_ZD_KING_ZORA_THAWED, logic->IsAdult && logic->KingZoraThawed),
|
||||
LOCATION_NNL(RC_ZD_TRADE_PRESCRIPTION, logic->IsAdult && logic->KingZoraThawed && logic->CanUse(RG_PRESCRIPTION)),
|
||||
LOCATION_NNL(RC_ZD_GS_FROZEN_WATERFALL, logic->IsAdult && (logic->IsNNL() || logic->HookshotOrBoomerang() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || (logic->CanUse(RG_MAGIC_SINGLE) && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_BIGGORON_SWORD))) || (ctx->GetTrickOption(RT_ZD_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_ZD_FISH_1, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZD_FISH_2, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZD_FISH_3, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZD_FISH_4, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZD_FISH_5, logic->IsChild && logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZD_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_ZD_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZD_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, logic->IsChild && logic->CanBreakUpperBeehives()),
|
||||
LOCATION(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, logic->IsChild && logic->CanBreakUpperBeehives()),
|
||||
LOCATION_NNL(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, logic->IsChild && logic->CanBreakUpperBeehives()),
|
||||
LOCATION_NNL(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, logic->IsChild && logic->CanBreakUpperBeehives()),
|
||||
LOCATION(RC_ZD_NEAR_SHOP_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_ZD_NEAR_SHOP_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_ZD_NEAR_SHOP_POT_3, logic->CanBreakPots()),
|
||||
|
@ -47,18 +47,18 @@ void RegionTable_Init_ZorasDomain() {
|
|||
areaTable[RR_ZORAS_DOMAIN_ISLAND] = Region("Zoras Domain Island", SCENE_ZORAS_DOMAIN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_ZD_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_ZD_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZD_BEHIND_KING_ZORA] = Region("ZD Behind King Zora", SCENE_ZORAS_DOMAIN, {
|
||||
//Events
|
||||
EventAccess(&logic->KingZoraThawed, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
EventAccess(&logic->KingZoraThawed, []{return logic->IsAdult && logic->BlueFire();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZD_BEHIND_KING_ZORA_BEEHIVE, logic->IsChild && logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return logic->DeliverLetter || ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult);}),
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return logic->DeliverLetter || ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult);}, true),
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
});
|
||||
|
||||
|
|
|
@ -7,22 +7,22 @@ void RegionTable_Init_ZorasFountain() {
|
|||
// clang-format off
|
||||
areaTable[RR_ZORAS_FOUNTAIN] = Region("Zoras Fountain", SCENE_ZORAS_FOUNTAIN, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairyExceptSuns();}, true),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS) && logic->AtDay;}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZF_GS_TREE, logic->IsChild),
|
||||
LOCATION(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZF_GS_TREE, logic->IsChild),
|
||||
LOCATION_NNL(RC_ZF_GS_ABOVE_THE_LOG, logic->IsChild && (logic->IsNNL() || logic->HookshotOrBoomerang()) && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_ZF_FAIRY_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZF_JABU_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns()),
|
||||
LOCATION_NNL(RC_ZF_JABU_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZF_FAIRY_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZF_JABU_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZF_NEAR_JABU_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_ZF_NEAR_JABU_POT_1, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_ZF_NEAR_JABU_POT_2, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_ZF_NEAR_JABU_POT_3, logic->IsChild && logic->CanBreakPots()),
|
||||
LOCATION_NNL(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZD_BEHIND_KING_ZORA, []{return true;}),
|
||||
|
@ -37,7 +37,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
|
||||
areaTable[RR_ZF_ICEBERGS] = Region("ZF Icebergs", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZF_ICEBERG_FREESTANDING_POH, logic->IsAdult),
|
||||
LOCATION_NNL(RC_ZF_ICEBERG_FREESTANDING_POH, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
//This hover is pretty tight, come at it with momentum and aim for the small corner polygon of the big iceburg while spamming roll
|
||||
|
@ -48,7 +48,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
|
||||
areaTable[RR_ZF_LAKEBED] = Region("ZF Lakebed", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZF_BOTTOM_FREESTANDING_POH, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
LOCATION_NNL(RC_ZF_BOTTOM_FREESTANDING_POH, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
LOCATION(RC_ZF_BOTTOM_NORTH_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
LOCATION(RC_ZF_BOTTOM_NORTHEAST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
LOCATION(RC_ZF_BOTTOM_SOUTHEAST_INNER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
|
@ -112,7 +112,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
|
||||
areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Region("ZF Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZF_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_ZF_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
|
|
|
@ -7,19 +7,19 @@ void RegionTable_Init_ZoraRiver() {
|
|||
// clang-format off
|
||||
areaTable[RR_ZR_FRONT] = Region("ZR Front", SCENE_ZORAS_RIVER, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||
LOCATION(RC_ZR_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GS_TREE, logic->IsChild && logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_CLOSE)),
|
||||
LOCATION_NNL(RC_ZR_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_5, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_6, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_7, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_8, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_9, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_10, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_11, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_GRASS_12, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return logic->IsAdult || logic->BlastOrSmash();}),
|
||||
|
@ -28,36 +28,36 @@ void RegionTable_Init_ZoraRiver() {
|
|||
|
||||
areaTable[RR_ZORAS_RIVER] = Region("Zora River", SCENE_ZORAS_RIVER, {
|
||||
//Events
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}),
|
||||
EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}),
|
||||
EventAccess(&logic->GossipStoneFairy, []{return logic->CallGossipFairy();}, true),
|
||||
EventAccess(&logic->BeanPlantFairy, []{return logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS);}, true),
|
||||
EventAccess(&logic->ButterflyFairy, []{return logic->CanUse(RG_STICKS);}, true),
|
||||
EventAccess(&logic->BugShrub, []{return logic->CanCutShrubs();}, true),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZR_MAGIC_BEAN_SALESMAN, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild),
|
||||
LOCATION(RC_ZR_FROGS_OCARINA_GAME, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY) && logic->CanUse(RG_SARIAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_FROGS_IN_THE_RAIN, logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_FROGS_ZELDAS_LULLABY, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION(RC_ZR_FROGS_EPONAS_SONG, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION(RC_ZR_FROGS_SARIAS_SONG, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION(RC_ZR_FROGS_SUNS_SONG, logic->IsChild && logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION(RC_ZR_FROGS_SONG_OF_TIME, logic->IsChild && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
LOCATION_NNL(RC_ZR_MAGIC_BEAN_SALESMAN, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild),
|
||||
LOCATION_NNL(RC_ZR_FROGS_OCARINA_GAME, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY) && logic->CanUse(RG_SARIAS_SONG) && logic->CanUse(RG_SUNS_SONG) && logic->CanUse(RG_EPONAS_SONG) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_IN_THE_RAIN, logic->IsChild && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_ZELDAS_LULLABY, logic->IsChild && logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_EPONAS_SONG, logic->IsChild && logic->CanUse(RG_EPONAS_SONG)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_SARIAS_SONG, logic->IsChild && logic->CanUse(RG_SARIAS_SONG)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_SUNS_SONG, logic->IsChild && logic->CanUse(RG_SUNS_SONG)),
|
||||
LOCATION_NNL(RC_ZR_FROGS_SONG_OF_TIME, logic->IsChild && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
LOCATION(RC_ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH, logic->IsChild || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_ZR_LOWER))),
|
||||
LOCATION(RC_ZR_NEAR_DOMAIN_FREESTANDING_POH, logic->IsChild || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_ZR_UPPER))),
|
||||
LOCATION(RC_ZR_GS_LADDER, logic->IsChild && logic->CanAttack() && logic->CanGetNightTimeGS()),
|
||||
LOCATION_NNL(RC_ZR_GS_LADDER, logic->IsChild && logic->CanAttack() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZR_GS_NEAR_RAISED_GROTTOS, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZR_GS_ABOVE_BRIDGE, logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_ZR_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_BENEATH_WATERFALL_LEFT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_ZR_BENEATH_WATERFALL_MIDDLE_LEFT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_ZR_BENEATH_WATERFALL_MIDDLE_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION_NNL(RC_ZR_BENEATH_WATERFALL_RIGHT_RUPEE, logic->IsAdult && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_BOOMERANG))),
|
||||
LOCATION(RC_ZR_NEAR_GROTTOS_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZR_NEAR_DOMAIN_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()),
|
||||
|
@ -65,9 +65,9 @@ void RegionTable_Init_ZoraRiver() {
|
|||
//Exits
|
||||
Entrance(RR_ZR_FRONT, []{return true;}),
|
||||
Entrance(RR_ZR_OPEN_GROTTO, []{return true;}),
|
||||
Entrance(RR_ZR_FAIRY_GROTTO, []{return Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_ZR_FAIRY_GROTTO, []{return Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();});}, true),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ZR_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_ZR_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}, true),
|
||||
Entrance(RR_ZR_BEHIND_WATERFALL, []{return ctx->GetOption(RSK_SLEEPING_WATERFALL).Is(RO_WATERFALL_OPEN) || Here(RR_ZORAS_RIVER, []{return logic->CanUse(RG_ZELDAS_LULLABY);}) || (logic->IsChild && ctx->GetTrickOption(RT_ZR_CUCCO)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_ZR_HOVERS));}),
|
||||
});
|
||||
|
||||
|
@ -86,16 +86,16 @@ void RegionTable_Init_ZoraRiver() {
|
|||
areaTable[RR_ZR_OPEN_GROTTO] = Region("ZR Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
//Locations
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_CHEST, true),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_FISH, logic->HasBottle()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GOSSIP_STONE, true),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, logic->CanBreakLowerBeehives()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GRASS_1, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GRASS_3, logic->CanCutShrubs()),
|
||||
LOCATION_NNL(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||
|
@ -121,8 +121,8 @@ void RegionTable_Init_ZoraRiver() {
|
|||
|
||||
areaTable[RR_ZR_STORMS_GROTTO] = Region("ZR Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_ZR_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_ZR_DEKU_SCRUB_GROTTO_REAR, logic->CanStunDeku()),
|
||||
LOCATION_NNL(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, logic->CanStunDeku()),
|
||||
LOCATION(RC_ZR_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
|
|
|
@ -20,6 +20,9 @@
|
|||
#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
|
||||
|
||||
namespace Rando {
|
||||
bool Logic::IsNNL() {
|
||||
return ctx->GetOption(RSK_LOGIC_RULES).Is(RO_LOGIC_NEARLY_NO_LOGIC);
|
||||
}
|
||||
|
||||
bool Logic::HasItem(RandomizerGet itemName) {
|
||||
switch (itemName) {
|
||||
|
|
|
@ -182,6 +182,7 @@ class Logic {
|
|||
|
||||
SaveContext* mSaveContext = nullptr;
|
||||
Logic();
|
||||
bool IsNNL();
|
||||
bool CanUse(RandomizerGet itemName);
|
||||
bool HasProjectile(HasProjectileAge age);
|
||||
bool HasItem(RandomizerGet itemName);
|
||||
|
|
|
@ -744,8 +744,8 @@ void Settings::CreateOptionDescriptions() {
|
|||
"Glitchless - No glitches are required, but may require some minor tricks. Additional tricks may be enabled "
|
||||
"and disabled below.\n"
|
||||
"\n"
|
||||
//"Glitched - Glitches may be required to beat the game. You can disable and enable glitches below.\n"
|
||||
//"\n"
|
||||
"Nearly No Logic - Minimal logic, like no Lullaby on Great Fairies. MYA BE IMPOSSIBLE TO BEAT.\n"
|
||||
"\n"
|
||||
"No logic - Item placement is completely random. MAY BE IMPOSSIBLE TO BEAT.\n"
|
||||
"\n"
|
||||
"Vanilla - Places all items and dungeon rewards in their vanilla locations.";
|
||||
|
|
|
@ -4040,8 +4040,10 @@ void RandomizerSettingsWindow::DrawElement() {
|
|||
if (mSettings->GetOption(RSK_LOGIC_RULES).RenderImGui()) {
|
||||
mNeedsUpdate = true;
|
||||
}
|
||||
// RANDOTODO: Implement Disalbling of Options for Vanilla Logic
|
||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) == RO_LOGIC_GLITCHLESS) {
|
||||
// RANDOTODO: Implement Disabling of Options for Vanilla Logic
|
||||
if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_GLITCHLESS ||
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) !=
|
||||
RO_LOGIC_NEARLY_NO_LOGIC) {
|
||||
ImGui::SameLine();
|
||||
if (mSettings->GetOption(RSK_ALL_LOCATIONS_REACHABLE).RenderImGui()) {
|
||||
mNeedsUpdate = true;
|
||||
|
|
|
@ -6277,6 +6277,7 @@ typedef enum {
|
|||
// Logic (glitchless/no logic)
|
||||
typedef enum {
|
||||
RO_LOGIC_GLITCHLESS,
|
||||
RO_LOGIC_NEARLY_NO_LOGIC,
|
||||
RO_LOGIC_NO_LOGIC,
|
||||
RO_LOGIC_VANILLA,
|
||||
} RandoOptionLogic;
|
||||
|
|
|
@ -328,7 +328,7 @@ void Settings::CreateOptions() {
|
|||
OPT_U8(RSK_STARTING_SKULLTULA_TOKEN, "Gold Skulltula Tokens", {NumOpts(0, 100)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("StartingSkulltulaToken"), "", WidgetType::Slider);
|
||||
OPT_U8(RSK_STARTING_HEARTS, "Starting Hearts", {NumOpts(1, 20)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("StartingHearts"), "", WidgetType::Slider, 2);
|
||||
// TODO: Remainder of Starting Items
|
||||
OPT_U8(RSK_LOGIC_RULES, "Logic", {"Glitchless", "No Logic", "Vanilla"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("LogicRules"), mOptionDescriptions[RSK_LOGIC_RULES], WidgetType::Combobox, RO_LOGIC_GLITCHLESS);
|
||||
OPT_U8(RSK_LOGIC_RULES, "Logic", {"Glitchless", "Nearly No Logic", "No Logic", "Vanilla"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("LogicRules"), mOptionDescriptions[RSK_LOGIC_RULES], WidgetType::Combobox, RO_LOGIC_GLITCHLESS);
|
||||
OPT_BOOL(RSK_ALL_LOCATIONS_REACHABLE, "All Locations Reachable", {"Off", "On"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("AllLocationsReachable"), mOptionDescriptions[RSK_ALL_LOCATIONS_REACHABLE], WidgetType::Checkbox, RO_GENERIC_ON);
|
||||
OPT_BOOL(RSK_SKULLS_SUNS_SONG, "Night Skulltula's Expect Sun's Song", CVAR_RANDOMIZER_SETTING("GsExpectSunsSong"), mOptionDescriptions[RSK_SKULLS_SUNS_SONG]);
|
||||
OPT_U8(RSK_DAMAGE_MULTIPLIER, "Damage Multiplier", {"x1/2", "x1", "x2", "x4", "x8", "x16", "OHKO"}, OptionCategory::Setting, "", "", WidgetType::Slider, RO_DAMAGE_MULTIPLIER_DEFAULT);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue