mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-22 06:13:45 -07:00
Converted Entrance constructor calls to ENTRANCE macros.
This commit is contained in:
parent
1d8127a3c7
commit
771fc4febf
35 changed files with 1456 additions and 1450 deletions
|
@ -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_, std::string condition_str_,
|
||||
bool spreadsAreasWithPriority_)
|
||||
: connectedRegion(connectedRegion_), condition_function(condition_function_), condition_str(condition_str_),
|
||||
spreadsAreasWithPriority(spreadsAreasWithPriority_) {
|
||||
originalConnectedRegion = connectedRegion_;
|
||||
}
|
||||
|
|
|
@ -36,9 +36,13 @@ enum class EntranceType {
|
|||
All,
|
||||
};
|
||||
|
||||
#define ENTRANCE(check, condition, ...) \
|
||||
Entrance(RandomizerRegion::check, [] { return condition; }, CleanCheckConditionString(#condition), ##__VA_ARGS__)
|
||||
|
||||
class Entrance {
|
||||
public:
|
||||
Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, bool spreadsAreasWithPriority_ = true);
|
||||
Entrance(RandomizerRegion connectedRegion_, ConditionFn condition_function_, std::string condition_str_,
|
||||
bool spreadsAreasWithPriority_ = true);
|
||||
void SetCondition(ConditionFn newCondition);
|
||||
bool GetConditionsMet() const;
|
||||
std::string to_string() const;
|
||||
|
@ -99,6 +103,7 @@ class Entrance {
|
|||
// If this is false, areas only spread to interiors through this entrance if there is no other choice
|
||||
// Set to false for owl drops, the windmill path between dampe's grave and windmill and blue warps
|
||||
bool spreadsAreasWithPriority = true;
|
||||
std::string condition_str = "";
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -478,7 +478,7 @@ bool Region::UpdateEvents() {
|
|||
}
|
||||
|
||||
void Region::AddExit(RandomizerRegion parentKey, RandomizerRegion newExitKey, ConditionFn condition) {
|
||||
Rando::Entrance newExit = Rando::Entrance(newExitKey, condition);
|
||||
Rando::Entrance newExit = Rando::Entrance(newExitKey, condition, "");
|
||||
newExit.SetParentRegion(parentKey);
|
||||
exits.push_front(newExit);
|
||||
}
|
||||
|
@ -800,59 +800,59 @@ void RegionTable_Init() {
|
|||
LOCATION(RC_SARIA_SONG_HINT, logic->CanUse(RG_SARIAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ROOT_EXITS, []{return true;}),
|
||||
ENTRANCE(RR_ROOT_EXITS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ROOT_EXITS] = Region("Root Exits", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_CHILD_SPAWN, []{return logic->IsChild;}),
|
||||
Entrance(RR_ADULT_SPAWN, []{return logic->IsAdult;}),
|
||||
Entrance(RR_MINUET_OF_FOREST_WARP, []{return logic->CanUse(RG_MINUET_OF_FOREST);}),
|
||||
Entrance(RR_BOLERO_OF_FIRE_WARP, []{return logic->CanUse(RG_BOLERO_OF_FIRE);}),
|
||||
Entrance(RR_SERENADE_OF_WATER_WARP, []{return logic->CanUse(RG_SERENADE_OF_WATER);}),
|
||||
Entrance(RR_NOCTURNE_OF_SHADOW_WARP, []{return logic->CanUse(RG_NOCTURNE_OF_SHADOW);}),
|
||||
Entrance(RR_REQUIEM_OF_SPIRIT_WARP, []{return logic->CanUse(RG_REQUIEM_OF_SPIRIT);}),
|
||||
Entrance(RR_PRELUDE_OF_LIGHT_WARP, []{return logic->CanUse(RG_PRELUDE_OF_LIGHT);}),
|
||||
ENTRANCE(RR_CHILD_SPAWN, logic->IsChild),
|
||||
ENTRANCE(RR_ADULT_SPAWN, logic->IsAdult),
|
||||
ENTRANCE(RR_MINUET_OF_FOREST_WARP, logic->CanUse(RG_MINUET_OF_FOREST)),
|
||||
ENTRANCE(RR_BOLERO_OF_FIRE_WARP, logic->CanUse(RG_BOLERO_OF_FIRE)),
|
||||
ENTRANCE(RR_SERENADE_OF_WATER_WARP, logic->CanUse(RG_SERENADE_OF_WATER)),
|
||||
ENTRANCE(RR_NOCTURNE_OF_SHADOW_WARP, logic->CanUse(RG_NOCTURNE_OF_SHADOW)),
|
||||
ENTRANCE(RR_REQUIEM_OF_SPIRIT_WARP, logic->CanUse(RG_REQUIEM_OF_SPIRIT)),
|
||||
ENTRANCE(RR_PRELUDE_OF_LIGHT_WARP, logic->CanUse(RG_PRELUDE_OF_LIGHT)),
|
||||
});
|
||||
|
||||
areaTable[RR_CHILD_SPAWN] = Region("Child Spawn", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KF_LINKS_HOUSE, []{return true;}),
|
||||
ENTRANCE(RR_KF_LINKS_HOUSE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ADULT_SPAWN] = Region("Adult Spawn", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
ENTRANCE(RR_TEMPLE_OF_TIME, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MINUET_OF_FOREST_WARP] = Region("Minuet of Forest Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, true),
|
||||
});
|
||||
|
||||
areaTable[RR_BOLERO_OF_FIRE_WARP] = Region("Bolero of Fire Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return true;}),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SERENADE_OF_WATER_WARP] = Region("Serenade of Water Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, true),
|
||||
});
|
||||
|
||||
areaTable[RR_REQUIEM_OF_SPIRIT_WARP] = Region("Requiem of Spirit Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_NOCTURNE_OF_SHADOW_WARP] = Region("Nocturne of Shadow Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return true;}),
|
||||
ENTRANCE(RR_GRAVEYARD_WARP_PAD_REGION, true),
|
||||
});
|
||||
|
||||
areaTable[RR_PRELUDE_OF_LIGHT_WARP] = Region("Prelude of Light Warp", SCENE_ID_MAX, TIME_DOESNT_PASS, {RA_LINKS_POCKET}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
ENTRANCE(RR_TEMPLE_OF_TIME, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -10,9 +10,9 @@ 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_KAK_WELL, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla() && logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ() && logic->IsChild),
|
||||
ENTRANCE(RR_KAK_WELL, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -32,15 +32,15 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(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_ENTRYWAY, logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM, logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM, logic->LoweredWaterInsideBotw && logic->IsChild),
|
||||
//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;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT, true),
|
||||
});
|
||||
|
||||
//This region combines the Middle with the perimeter's hidden areas. If a warp puts link into the middle without crossing the perimeter or using lens, it will need it's own region
|
||||
|
@ -55,10 +55,10 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_INNER_ROOMS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_INNER_ROOMS, logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT, true),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
//This area can be reached without lens in logic from basement, but that could require silver rupees if they are shuffled.
|
||||
|
@ -69,7 +69,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
//Passing through this area needs lens, but entering doesn't, so that the fire keese can be killed without crossing the pits if enemy drops are ever shuffled
|
||||
|
@ -79,10 +79,10 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, logic->CanBreakPots() && (ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3) && (ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3) && (ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
//not sure if this lens check is needed, these holes are a bit too easy to find, but it matches existing logic
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, []{return ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, ctx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_LIKE_LIKE_CAGE] = Region("Bottom of the Well Like-Like Cage", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -91,7 +91,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_KEESE_BEAMOS_ROOM, true),
|
||||
});
|
||||
|
||||
//If the player can voidwarp into one of these rooms they will need splitting up, and Fake walls will need specifying into middle and the rest moved to perimeter
|
||||
|
@ -105,7 +105,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, []{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BEHIND_FAKE_WALLS, logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_COFFIN_ROOM] = Region("Bottom of the Well Coffin Room", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -115,7 +115,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_DEAD_HAND_ROOM] = Region("Bottom of the Well Dead Hand Room", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -125,7 +125,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
}, {
|
||||
//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.
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_PERIMETER, []{return logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_PERIMETER, logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT] = Region("Bottom of the Well Basement", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -158,10 +158,10 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, logic->CanCutShrubs() && logic->BlastOrSmash()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
//It's possible to abuse boulder's limited range of collision detection to detonate the flowers through the boulder with bow, but this is a glitch
|
||||
//the exact range is just past the furthest away plank in the green goo section
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, []{return Here(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || (logic->CanUse(RG_STICKS) && ctx->GetTrickOption(RT_BOTW_BASEMENT));});}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS, Here(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || (logic->CanUse(RG_STICKS) && ctx->GetTrickOption(RT_BOTW_BASEMENT));})),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT_USEFUL_BOMB_FLOWERS] = Region("Bottom of the Well Basement Useful Bomb Flowers", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -170,7 +170,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_MAP_CHEST, logic->HasItem(RG_GORONS_BRACELET)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return logic->CanDetonateUprightBombFlower();}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT, logic->CanDetonateUprightBombFlower()),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM] = Region("Bottom of the Well Basement Platform", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -182,7 +182,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_BASEMENT, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -205,13 +205,13 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH, []{return Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2) && logic->CanUseProjectile();}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, []{return logic->IsChild && logic->LoweredWaterInsideBotw;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, logic->IsChild),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH, Here(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash();}) && logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM, (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE, logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2) && logic->CanUseProjectile()),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM, logic->IsChild && logic->LoweredWaterInsideBotw),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_WEST_ROOM_SWITCH] = Region("Bottom of the Well MQ West Room Switch", SCENE_BOTTOM_OF_THE_WELL, {
|
||||
|
@ -219,9 +219,9 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
EVENT_ACCESS(OpenedWestRoomMQBotw, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->BlastOrSmash() && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || ctx->GetTrickOption(RT_BOTW_MQ_PITS));}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, []{return (bool)ctx->GetTrickOption(RT_BOTW_MQ_PITS);}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, logic->BlastOrSmash() && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || ctx->GetTrickOption(RT_BOTW_MQ_PITS))),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE, (bool)ctx->GetTrickOption(RT_BOTW_MQ_PITS)),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM] = Region("Bottom of the Well MQ Coffin Room", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -231,7 +231,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, (logic->LoweredWaterInsideBotw || logic->HasItem(RG_BRONZE_SCALE)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_LOCKED_CAGE] = Region("Bottom of the Well MQ Locked Cage", SCENE_BOTTOM_OF_THE_WELL, {
|
||||
|
@ -239,7 +239,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
EVENT_ACCESS(OpenedMiddleHoleMQBotw, logic->HasExplosives()),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, logic->IsChild && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_ROOM] = Region("Bottom of the Well MQ Dead Hand Room", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -253,7 +253,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
}, {
|
||||
//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.
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, []{return logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND);}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, logic->IsChild && logic->CanKillEnemy(RE_DEAD_HAND)),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_MIDDLE] = Region("Bottom of the Well MQ Middle", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -279,8 +279,8 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
}, {
|
||||
//Exits
|
||||
//If a relevant trick causes you to be able to warp into here without going through PERIMETER, a new eventAccess will be needed for lowering the gates with ZL
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM, []{return logic->OpenedMiddleHoleMQBotw;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM, logic->OpenedMiddleHoleMQBotw),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT] = Region("Bottom of the Well MQ Basement", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -293,7 +293,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(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;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_PERIMETER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SWITCH_PLATFORM] = Region("Bottom of the Well MQ Basement Switch Platform", SCENE_BOTTOM_OF_THE_WELL, {}, {
|
||||
|
@ -305,7 +305,7 @@ void RegionTable_Init_BottomOfTheWell() {
|
|||
LOCATION(RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_MQ_BASEMENT, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_KF_OUTSIDE_DEKU_TREE, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_LOBBY, ctx->GetDungeon(DEKU_TREE)->IsVanilla()),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_1F, ctx->GetDungeon(DEKU_TREE)->IsMQ()),
|
||||
ENTRANCE(RR_KF_OUTSIDE_DEKU_TREE, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -32,18 +32,18 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_LOBBY_GRASS_5, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_COMPASS_ROOM, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return Here(RR_DEKU_TREE_LOBBY, []{return logic->CanAttack() || logic->CanUse(RG_NUTS);});}),
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}),
|
||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return false;}),
|
||||
ENTRANCE(RR_DEKU_TREE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_DEKU_TREE_2F_MIDDLE_ROOM, true),
|
||||
ENTRANCE(RR_DEKU_TREE_COMPASS_ROOM, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_LOWER, Here(RR_DEKU_TREE_LOBBY, []{return logic->CanAttack() || logic->CanUse(RG_NUTS);})),
|
||||
ENTRANCE(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, false),
|
||||
ENTRANCE(RR_DEKU_TREE_BOSS_ENTRYWAY, false),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_2F_MIDDLE_ROOM] = Region("Deku Tree 2F Middle Room", SCENE_DEKU_TREE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
Entrance(RR_DEKU_TREE_SLINGSHOT_ROOM, []{return Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
ENTRANCE(RR_DEKU_TREE_LOBBY, Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
ENTRANCE(RR_DEKU_TREE_SLINGSHOT_ROOM, Here(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanReflectNuts() || logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_SLINGSHOT_ROOM] = Region("Deku Tree Slingshot Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -56,7 +56,7 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_SLINGSHOT_GRASS_4, logic->CanCutShrubs() && logic->CanReflectNuts()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_2F_MIDDLE_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_DEKU_TREE_2F_MIDDLE_ROOM, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_COMPASS_ROOM] = Region("Deku Tree Compass Room", SCENE_DEKU_TREE, {
|
||||
|
@ -72,8 +72,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_COMPASS_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}),
|
||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return false;}),
|
||||
ENTRANCE(RR_DEKU_TREE_LOBBY, logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW)),
|
||||
ENTRANCE(RR_DEKU_TREE_BOSS_ENTRYWAY, false),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_LOWER] = Region("Deku Tree Basement Lower", SCENE_DEKU_TREE, {
|
||||
|
@ -89,10 +89,10 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BASEMENT_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_LOBBY, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_LOWER, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->IsAdult || ctx->GetTrickOption(RT_DEKU_B1_SKIP) || HasAccessTo(RR_DEKU_TREE_BASEMENT_UPPER);}),
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return false;}),
|
||||
ENTRANCE(RR_DEKU_TREE_LOBBY, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, Here(RR_DEKU_TREE_BASEMENT_LOWER, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);})),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_UPPER, logic->IsAdult || ctx->GetTrickOption(RT_DEKU_B1_SKIP) || HasAccessTo(RR_DEKU_TREE_BASEMENT_UPPER)),
|
||||
ENTRANCE(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, false),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_SCRUB_ROOM] = Region("Deku Tree Basement Scrub Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -103,14 +103,14 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BASEMENT_SCRUB_ROOM_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return logic->CanHitEyeTargets();});}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_LOWER, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, Here(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return logic->CanHitEyeTargets();})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT] = Region("Deku Tree Basement Water Room Front", SCENE_DEKU_TREE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_SCRUB_ROOM, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG)),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree Basement Water Room Back", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -119,8 +119,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BASEMENT_SPIKE_ROLLER_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG);}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_WATER_ROOM_FRONT, logic->HasItem(RG_BRONZE_SCALE) || ctx->GetTrickOption(RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG)),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_TORCH_ROOM] = Region("Deku Tree Basement Torch Room", SCENE_DEKU_TREE, {
|
||||
|
@ -133,8 +133,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BASEMENT_TORCHES_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_WATER_ROOM_BACK, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, Here(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_BACK_LOBBY] = Region("Deku Tree Basement Back Lobby", SCENE_DEKU_TREE, {
|
||||
|
@ -147,9 +147,9 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BASEMENT_LARVAE_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->BlastOrSmash();});}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && logic->IsChild;}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_TORCH_ROOM, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_BACK_ROOM, Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_UPPER, Here(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);}) && logic->IsChild),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_BACK_ROOM] = Region("Deku Tree Basement Back Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -157,7 +157,7 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BASEMENT_UPPER] = Region("Deku Tree Basement Upper", SCENE_DEKU_TREE, {
|
||||
|
@ -166,9 +166,9 @@ void RegionTable_Init_DekuTree() {
|
|||
EVENT_ACCESS(DekuBabaNuts, logic->CanGetDekuBabaNuts()),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_LOWER, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, []{return logic->IsChild;}),
|
||||
Entrance(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->HasFireSourceWithTorch() || (ctx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW));});}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_LOWER, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_BACK_LOBBY, logic->IsChild),
|
||||
ENTRANCE(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, Here(RR_DEKU_TREE_BASEMENT_UPPER, []{return logic->HasFireSourceWithTorch() || (ctx->GetTrickOption(RT_DEKU_B1_BOW_WEBS) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW));})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_OUTSIDE_BOSS_ROOM] = Region("Deku Tree Outside Boss Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -181,8 +181,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_BEFORE_BOSS_GRASS_3, logic->CanCutShrubs() && logic->HasFireSourceWithTorch()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_BASEMENT_UPPER, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return (logic->HasItem(RG_BRONZE_SCALE) || Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanUse(RG_IRON_BOOTS);})) && Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();});}),
|
||||
ENTRANCE(RR_DEKU_TREE_BASEMENT_UPPER, true),
|
||||
ENTRANCE(RR_DEKU_TREE_BOSS_ENTRYWAY, (logic->HasItem(RG_BRONZE_SCALE) || Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanUse(RG_IRON_BOOTS);})) && Here(RR_DEKU_TREE_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();})),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -202,13 +202,13 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_LOBBY_GRASS_5, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_ENTRYWAY, true),
|
||||
//may need canAvoid logic with enemy shuffle
|
||||
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_2F, true),
|
||||
//Swim is not required because you can jump with enough momentum to hit land.
|
||||
//You even avoid fall damage if you hit the shallow water, though it's obscure knowledge so may be a trick
|
||||
//if it is, then we need a landing room with (IsAdult || HasItem(RG_BRONZE_SCALE) || TakeDamage() || that trick) to reach basement
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->BrokeDeku1FWeb;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT, logic->BrokeDeku1FWeb),
|
||||
//is it possible to recoil from here to the ledge with a trick?
|
||||
});
|
||||
|
||||
|
@ -222,10 +222,10 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_1F, true),
|
||||
//Will need canAvoid logic with enemy shuffle
|
||||
Entrance(RR_DEKU_TREE_MQ_3F, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource();});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_3F, true),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, Here(RR_DEKU_TREE_MQ_2F, []{return logic->HasFireSource();})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_3F] = Region("Deku Tree MQ 3F", SCENE_DEKU_TREE, {
|
||||
|
@ -247,10 +247,10 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_2F, true),
|
||||
//Assumes RR_DEKU_TREE_MQ_2F access
|
||||
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return Here(RR_DEKU_TREE_MQ_3F, []{return logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, Here(RR_DEKU_TREE_MQ_3F, []{return logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_BOW);})),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_EYE_TARGET_ROOM] = Region("Deku Tree MQ Eye Target Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -265,8 +265,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BEFORE_COMPASS_GRASS_7, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return Here(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanHitEyeTargets();});}),
|
||||
Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_COMPASS_ROOM, Here(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanHitEyeTargets();})),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_2F, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_COMPASS_ROOM] = Region("Deku Tree MQ Compass Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -278,8 +278,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, []{return Here(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)));});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_EYE_TARGET_ROOM, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_PAST_BOULDER_VINES, Here(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && (logic->CanUse(RG_SONG_OF_TIME) || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_DEKU_MQ_COMPASS_GS)));})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_PAST_BOULDER_VINES] = Region("Deku Tree MQ Past Boulder Vines", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -288,7 +288,7 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_COMPASS_ROOM, []{return logic->BlastOrSmash();}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_COMPASS_ROOM, logic->BlastOrSmash()),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT] = Region("Deku Tree MQ Basement", SCENE_DEKU_TREE, {
|
||||
|
@ -304,11 +304,11 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_LOWER_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_1F, true),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();})),
|
||||
//includes RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM Access, other fire sources clear directly from there
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);});}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanHitEyeTargets();}) && logic->ClearedMQDekuSERoom && Here(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->CanUse(RG_STICKS);})),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, ctx->GetTrickOption(RT_DEKU_B1_SKIP) || logic->PushedDekuBasementBlock || logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM] = Region("Deku Tree MQ Southeast Room", SCENE_DEKU_TREE, {
|
||||
|
@ -323,8 +323,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_TORCHES_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return logic->HasFireSource();}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return logic->ClearedMQDekuSERoom;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, logic->HasFireSource()),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT, logic->ClearedMQDekuSERoom),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT] = Region("Deku Tree MQ Basement Water Room Front", SCENE_DEKU_TREE, {
|
||||
|
@ -339,8 +339,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_FRONT_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_SOUTHEAST_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK] = Region("Deku Tree MQ Basement Water Room Back", SCENE_DEKU_TREE, {
|
||||
|
@ -355,8 +355,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_SPIKE_ROLLER_BACK_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->MQDekuWaterRoomTorches && logic->CanPassEnemy(RE_BIG_SKULLTULA, logic->CanUse(RG_SONG_OF_TIME) ? ED_CLOSE : ED_SHORT_JUMPSLASH);}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, []{return ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)));}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, logic->MQDekuWaterRoomTorches && logic->CanPassEnemy(RE_BIG_SKULLTULA, logic->CanUse(RG_SONG_OF_TIME) ? ED_CLOSE : ED_SHORT_JUMPSLASH)),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_FRONT, ctx->GetTrickOption(RT_DEKU_MQ_LOG) || (logic->IsChild && logic->CanShield()) || logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)))),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM] = Region("Deku Tree MQ Basement Southwest Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -366,8 +366,8 @@ void RegionTable_Init_DekuTree() {
|
|||
}, {
|
||||
//Exits
|
||||
//both imply CanKillEnemy(RE_GOHMA_LARVA)
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);});}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);})),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_WATER_ROOM_BACK, Here(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return logic->CanKillEnemy(RE_MAD_SCRUB) && logic->CanKillEnemy(RE_KEESE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM] = Region("Deku Tree MQ Basement Grave Room", SCENE_DEKU_TREE, {
|
||||
|
@ -384,10 +384,10 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_GRAVES_GRASS_5, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->IsChild && Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, logic->IsChild && Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);})),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_SOUTHWEST_ROOM, true),
|
||||
//Using a bow to get past here as adult is a bit precise on standing position but simple, doing as as child requires a side-hop with the bow out to shoot through the torch and may be trick worthy
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM, Here(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_BACK_ROOM] = Region("Deku Tree MQ Basement Back Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -398,7 +398,7 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_BACK_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_BASEMENT_LEDGE] = Region("Deku Tree MQ Basement Ledge", SCENE_DEKU_TREE, {
|
||||
|
@ -412,11 +412,11 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(RC_DEKU_TREE_MQ_BASEMENT_UPPER_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, []{return logic->IsChild;}),
|
||||
Entrance(RR_DEKU_TREE_MQ_BASEMENT, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_GRAVE_ROOM, logic->IsChild),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT, true),
|
||||
//If strength 0 is shuffled, add hovers or block push to the stick check
|
||||
//recoiling to skip swim is possible, but would be a trick
|
||||
Entrance(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasFireSource() || (/*logic->PushedDekuBasementBlock && */logic->CanUse(RG_STICKS));}) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, Here(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, []{return logic->HasFireSource() || (/*logic->PushedDekuBasementBlock && */logic->CanUse(RG_STICKS));}) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM] = Region("Deku Tree MQ Outside Boss Room", SCENE_DEKU_TREE, {}, {
|
||||
|
@ -429,8 +429,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_DEKU_TREE_BOSS_ENTRYWAY, []{return Here(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();});}),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_BASEMENT_LEDGE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_DEKU_TREE_BOSS_ENTRYWAY, Here(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, []{return logic->CanReflectNuts();})),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -438,13 +438,13 @@ void RegionTable_Init_DekuTree() {
|
|||
// Boss Room
|
||||
areaTable[RR_DEKU_TREE_BOSS_ENTRYWAY] = Region("Deku Tree Boss Entryway", SCENE_DEKU_TREE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_DEKU_TREE_BOSS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DEKU_TREE_BOSS_ROOM, true),
|
||||
});
|
||||
|
||||
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, ctx->GetDungeon(DEKU_TREE)->IsVanilla()),
|
||||
ENTRANCE(RR_DEKU_TREE_MQ_OUTSIDE_BOSS_ROOM, ctx->GetDungeon(DEKU_TREE)->IsMQ()),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_TREE_BOSS_ROOM] = Region("Deku Tree Boss Room", SCENE_DEKU_TREE_BOSS, {
|
||||
|
@ -464,8 +464,8 @@ void RegionTable_Init_DekuTree() {
|
|||
LOCATION(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_DEKU_TREE_BOSS_EXIT, true),
|
||||
ENTRANCE(RR_KF_OUTSIDE_DEKU_TREE, logic->DekuTreeClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,17 +9,17 @@ 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_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BEGINNING, ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla()),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BEGINNING, ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ()),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BEGINNING] = Region("Dodongos Cavern Beginning", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return Here(RR_DODONGOS_CAVERN_BEGINNING, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_ENTRYWAY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, Here(RR_DODONGOS_CAVERN_BEGINNING, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_LOBBY] = Region("Dodongos Cavern Lobby", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -34,19 +34,19 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_GOSSIP_STONE, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BEGINNING, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->IsAdult;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return HasAccessTo(RR_DODONGOS_CAVERN_LOBBY_SWITCH);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return HasAccessTo(RR_DODONGOS_CAVERN_FAR_BRIDGE);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->HasExplosives();});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return false;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BEGINNING, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY_SWITCH, logic->IsAdult),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SE_CORRIDOR, Here(RR_DODONGOS_CAVERN_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_LOWER, HasAccessTo(RR_DODONGOS_CAVERN_LOBBY_SWITCH)),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_FAR_BRIDGE, HasAccessTo(RR_DODONGOS_CAVERN_FAR_BRIDGE)),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_AREA, Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->HasExplosives();})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, false),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_LOBBY_SWITCH] = Region("Dodongos Cavern Lobby Switch", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_DODONGO_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_SE_CORRIDOR] = Region("Dodongos Cavern SE Corridor", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -60,10 +60,10 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, true),
|
||||
//Shield seems to be in logic to drop a pot on their head as they hit you to blow up the wall
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_ROOM, []{return Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->CanBreakMudWalls() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield());});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SE_ROOM, Here(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return logic->CanBreakMudWalls() || logic->CanAttack() || (logic->TakeDamage() && logic->CanShield());})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_SE_ROOM] = Region("Dodongos Cavern SE Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -71,13 +71,13 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, logic->CanAttack()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SE_CORRIDOR, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS] = Region("Dodongos Cavern Near Lower Lizalfos", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_SE_CORRIDOR, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SE_CORRIDOR, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_LOWER_LIZALFOS] = Region("Dodongos Cavern Lower Lizalfos", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -89,8 +89,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_NEAR_LOWER_LIZALFOS, Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_DODONGO_ROOM, Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_DODONGO_ROOM] = Region("Dodongos Cavern Dodongo Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -101,9 +101,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY_SWITCH, []{return logic->HasFireSourceWithTorch();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, []{return Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY_SWITCH, logic->HasFireSourceWithTorch()),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM, Here(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_NEAR_DODONGO_ROOM] = Region("Dodongos Cavern Near Dodongo Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -111,14 +111,14 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_DODONGO_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_DODONGO_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_STAIRS_LOWER] = Region("Dodongos Cavern Stairs Lower", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||
Entrance(RR_DODONGOS_CAVERN_COMPASS_ROOM, []{return Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_UPPER, logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW))),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_COMPASS_ROOM, Here(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_STAIRS_UPPER] = Region("Dodongos Cavern Stairs Upper", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -131,8 +131,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_STAIRCASE_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_LOWER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_ARMOS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_COMPASS_ROOM] = Region("Dodongos Cavern Compass Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -140,13 +140,13 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_COMPASS_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_LOWER, []{return logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET);}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_LOWER, logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET)),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_ARMOS_ROOM] = Region("Dodongos Cavern Armos Room", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_STAIRS_UPPER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_STAIRS_UPPER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER] = Region("Dodongos Cavern Bomb Room Lower", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -157,10 +157,10 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_BLADE_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_ARMOS_ROOM, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || (ctx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->HasItem(RG_GORONS_BRACELET));});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return (logic->IsAdult && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash());}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_ARMOS_ROOM, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_2F_SIDE_ROOM, Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || (ctx->GetTrickOption(RT_DC_SCRUB_ROOM) && logic->HasItem(RG_GORONS_BRACELET));})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, Here(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, (logic->IsAdult && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash())),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_2F_SIDE_ROOM] = Region("Dodongos Cavern 2F Side Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -169,7 +169,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM] = Region("Dodongos Cavern First Slingshot Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -179,8 +179,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_SINGLE_EYE_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_UPPER_LIZALFOS] = Region("Dodongos Cavern Upper Lizalfos", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -190,9 +190,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_FIRST_SLINGSHOT_ROOM, Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, Here(RR_DODONGOS_CAVERN_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM] = Region("Dodongos Cavern Second Slingshot Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -201,8 +201,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP);}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_UPPER_LIZALFOS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW) || ctx->GetTrickOption(RT_DC_SLINGSHOT_SKIP)),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER] = Region("Dodongos Cavern Bomb Room Upper", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -212,9 +212,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_BLADE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_LOWER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_SECOND_SLINGSHOT_ROOM, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_FAR_BRIDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_FAR_BRIDGE] = Region("Dodongos Cavern Far Bridge", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -222,8 +222,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, Here(RR_DODONGOS_CAVERN_FAR_BRIDGE, []{return logic->CanBreakMudWalls();})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOMB_ROOM_UPPER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_AREA] = Region("Dodongos Cavern Boss Region", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -234,9 +234,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_BEFORE_BOSS_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BACK_ROOM, []{return Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BACK_ROOM, Here(RR_DODONGOS_CAVERN_BOSS_AREA, []{return logic->CanBreakMudWalls();})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BACK_ROOM] = Region("Dodongos Cavern Back Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -248,7 +248,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_AREA, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_AREA, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -257,8 +257,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BEGINNING] = Region("Dodongos Cavern MQ Beginning", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_ENTRYWAY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, Here(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOBBY] = Region("Dodongos Cavern MQ Lobby", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -268,13 +268,13 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEGINNING, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls();}) || Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->HasItem(RG_GORONS_BRACELET) && logic->TakeDamage();});}), //strength 1 and bunny speed works too
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->IsAdult;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return Here(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return logic->HasExplosives() || (logic->ClearMQDCUpperLobbyRocks && logic->HasItem(RG_GORONS_BRACELET) && ((logic->IsAdult && ctx->GetTrickOption(RT_DC_MQ_ADULT_EYES)) || (logic->IsChild && ctx->GetTrickOption(RT_DC_MQ_CHILD_EYES))));});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BEGINNING, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE, Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBreakMudWalls();}) || Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->HasItem(RG_GORONS_BRACELET) && logic->TakeDamage();})), //strength 1 and bunny speed works too
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_POES_ROOM, logic->IsAdult),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, Here(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return logic->HasExplosives() || (logic->ClearMQDCUpperLobbyRocks && logic->HasItem(RG_GORONS_BRACELET) && ((logic->IsAdult && ctx->GetTrickOption(RT_DC_MQ_ADULT_EYES)) || (logic->IsChild && ctx->GetTrickOption(RT_DC_MQ_CHILD_EYES))));})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_GOSSIP_STONE] = Region("Dodongos Cavern MQ Gossip Stone", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -287,7 +287,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE] = Region("Dodongos Cavern MQ Mouth Side Bridge", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -295,10 +295,10 @@ void RegionTable_Init_DodongosCavern() {
|
|||
EVENT_ACCESS(ClearMQDCUpperLobbyRocks, logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->ClearMQDCUpperLobbyRocks;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, logic->ClearMQDCUpperLobbyRocks),
|
||||
//Bunny hood jump + jumpslash can also make it directly from the raising platform
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DC_MQ_CHILD_BOMBS) && logic->CanJumpslashExceptHammer() && logic->TakeDamage());}), //RANDOTODO is this possible with equip swapped hammer?
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_POES_ROOM, logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DC_MQ_CHILD_BOMBS) && logic->CanJumpslashExceptHammer() && logic->TakeDamage())), //RANDOTODO is this possible with equip swapped hammer?
|
||||
//it is possible to use bunny hood speed, hovers and a jumpslash to go between here and the other bridge (included with TORCH_ROOM_LOWER), but this would be a trick
|
||||
});
|
||||
|
||||
|
@ -315,10 +315,10 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
|
||||
//This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, []{return Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->HasExplosives() || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL, Here(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->CanBreakMudWalls();})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_MUD_WALL] = Region("Dodongos Cavern MQ Stairs Past Mud Wall", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -330,8 +330,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, logic->CanUse(RG_SONG_OF_TIME) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_STICKS) || ctx->GetTrickOption(RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH))) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, logic->HasExplosives() || (logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_STICKS) || ctx->GetTrickOption(RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH))) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRS_WITH_BOW) && logic->CanUse(RG_FAIRY_BOW))),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -343,18 +343,18 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS] = Region("Dodongos Cavern MQ Past Big Skulltulas", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return logic->TakeDamage();}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER, logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, logic->TakeDamage()),
|
||||
//If some case comes up where you can directly (void?)warp here without going through Dodongo room or climbing up from below,
|
||||
//the commented out logic is to handle going down and reclimbing to get silver rupees. A new eventVar will need decalring to handle this.
|
||||
/*(logic->CanPassEnemy(RE_BIG_SKULLTULA) || CanUse(RG_HOVER_BOOTS)) && logic->CanClimbDCStairs;*/
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return true;}),//if we add BONKO or other crate logic, logic for silver rupees goes here
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, true),//if we add BONKO or other crate logic, logic for silver rupees goes here
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM] = Region("Dodongos Cavern MQ Dodongo Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -366,8 +366,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_COMPASS_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return Here(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_STAIRS_PAST_BIG_SKULLTULAS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, Here(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO) || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER] = Region("Dodongos Cavern MQ Torch Puzzle Lower", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -379,12 +379,12 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, []{return logic->HasFireSourceWithTorch();}),//torch checks here need strength 0 with sticks when that is implemented
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();});}), //Includes an implied CanPass(RE_BIG_SKULLTULA)
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return ((logic->IsAdult /*or bunny hood jump*/) && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET);}), //Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, logic->TakeDamage()),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_DODONGO_ROOM, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM, logic->HasFireSourceWithTorch()),//torch checks here need strength 0 with sticks when that is implemented
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, Here(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->HasFireSourceWithTorch();})), //Includes an implied CanPass(RE_BIG_SKULLTULA)
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, ((logic->IsAdult /*or bunny hood jump*/) && ctx->GetTrickOption(RT_DC_JUMP)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, logic->CanUse(RG_STICKS) && logic->HasItem(RG_GORONS_BRACELET)), //Implies access to RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM from here
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM] = Region("Dodongos Cavern MQ Torch Puzzle Lower", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -393,8 +393,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return (logic->HasFireSource() && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanBreakMudWalls();}), //Requires stregnth 0, If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA)
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, (logic->HasFireSource() && logic->HasItem(RG_GORONS_BRACELET)) || logic->CanBreakMudWalls()), //Requires stregnth 0, If you can somehow warp into this room, add logic->CanPassEnemy(RE_BIG_SKULLTULA)
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM] = Region("Dodongos Cavern MQ Larvae Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -409,7 +409,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, true), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS] = Region("Dodongos Cavern MQ Before Upper Lizalfos", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -423,8 +423,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
}, {
|
||||
//Exits
|
||||
//Falling down gets you stuck with nothing there, not a useful exit for logic
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BIG_BLOCK_ROOM, Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, Here(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM] = Region("Dodongos Cavern MQ Before Upper Lizalfos", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -435,8 +435,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, []{return logic->IsAdult || (Here(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return logic->BlastOrSmash() || (logic->CanAttack() && logic->HasItem(RG_GORONS_BRACELET));}));}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER, logic->IsAdult || (Here(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return logic->BlastOrSmash() || (logic->CanAttack() && logic->HasItem(RG_GORONS_BRACELET));}))),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_UPPER] = Region("Dodongos Cavern MQ Torch Puzzle Upper", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -449,9 +449,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, []{return logic->ClearMQDCUpperLobbyRocks;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_MOUTH_SIDE_BRIDGE, logic->ClearMQDCUpperLobbyRocks),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE] = Region("Dodongos Cavern MQ Lower Right Side", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -463,8 +463,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CanHitEyeTargets();}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, Here(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && logic->CanHitEyeTargets()),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS] = Region("Dodongos Cavern MQ Lower Lizalfos", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -472,8 +472,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_POES_ROOM, Here(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_POES_ROOM] = Region("Dodongos Cavern MQ Poes Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -496,9 +496,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM] = Region("Dodongos Cavern Mad Scrub Room", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -509,7 +509,7 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_SCRUB_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return Here(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_POES_ROOM, Here(RR_DODONGOS_CAVERN_MQ_MAD_SCRUB_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH] = Region("Dodongos Cavern MQ Behind Mouth", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -520,11 +520,11 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_LOBBY, true),
|
||||
//using pots to get past the fire is in default logic. if stregnth 0 gets added, this will need to be:
|
||||
//stregnth 0 || explosives, or projectiles if str0 isn't needed to pull graves (it's a narrow shot though, may be trick worthy)
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->IsAdult;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, logic->IsAdult),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE] = Region("Dodongos Cavern MQ Back Behind Fire", SCENE_DODONGOS_CAVERN, {}, {
|
||||
|
@ -535,9 +535,9 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_BACK_POE_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, []{return logic->CanAttack();}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, logic->CanAttack()),
|
||||
//There's a trick N64 rolls into the child eyes trick for using armos blow up the bomb flowers when dieing, which would be killing an armos
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return Here(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->CanDetonateBombFlowers();}) || Here(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->CanAttack();});}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, Here(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return logic->CanDetonateBombFlowers();}) || Here(RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE, []{return logic->CanAttack();})),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_MQ_BACK_SWITCH_GRAVE] = Region("Dodongos Cavern MQ BossArea", SCENE_DODONGOS_CAVERN, {
|
||||
|
@ -552,8 +552,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(RC_DODONGOS_CAVERN_MQ_ARMOS_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, []{return true;}),
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, []{return true;}), //if strength 0 prevents grave pulls, add it here
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BACK_BEHIND_FIRE, true),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_ENTRYWAY, true), //if strength 0 prevents grave pulls, add it here
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -561,13 +561,13 @@ void RegionTable_Init_DodongosCavern() {
|
|||
// Boss Room
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_ENTRYWAY] = Region("Dodongos Cavern Boss Entryway", SCENE_DODONGOS_CAVERN, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_DODONGOS_CAVERN_BOSS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_BOSS_ROOM, true),
|
||||
});
|
||||
|
||||
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, ctx->GetDungeon(DODONGOS_CAVERN)->IsVanilla()),
|
||||
ENTRANCE(RR_DODONGOS_CAVERN_MQ_BEHIND_MOUTH, ctx->GetDungeon(DODONGOS_CAVERN)->IsMQ()),
|
||||
});
|
||||
|
||||
areaTable[RR_DODONGOS_CAVERN_BOSS_ROOM] = Region("Dodongos Cavern Boss Room", SCENE_DODONGOS_CAVERN_BOSS, {
|
||||
|
@ -584,8 +584,8 @@ void RegionTable_Init_DodongosCavern() {
|
|||
LOCATION(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_DODONGOS_CAVERN_BOSS_EXIT, true),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, logic->DodongosCavernClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,20 +9,20 @@ 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_DMC_CENTRAL_LOCAL, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRST_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, ctx->GetDungeon(FIRE_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRST_ROOM] = Region("Fire Temple First Room", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return logic->FireTimer() >= 24;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return Here(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && (logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked);}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 2) && logic->FireTimer() >= 24;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->FireTimer() >= 24),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_ENEMIES, Here(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && (logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_EXIT, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 2) && logic->FireTimer() >= 24),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_NEAR_BOSS_ROOM] = Region("Fire Temple Near Boss Room", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -37,14 +37,14 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, (logic->CanBreakPots() && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || Here(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}) || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRST_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || Here(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_ENEMIES] = Region("Fire Temple Loop Enemies", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return logic->CanKillEnemy(RE_TORCH_SLUG) && logic->CanKillEnemy(RE_FIRE_KEESE);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRST_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 8) || !logic->IsFireLoopLocked),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_TILES, Here(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return logic->CanKillEnemy(RE_TORCH_SLUG) && logic->CanKillEnemy(RE_FIRE_KEESE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_TILES] = Region("Fire Temple Loop Tiles", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -52,8 +52,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, logic->CanAttack()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_ENEMIES, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_ENEMIES, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_FLARE_DANCER] = Region("Fire Temple Loop Flare Dancer", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -61,8 +61,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, (logic->HasExplosives() || logic->CanUse(RG_MEGATON_HAMMER)) && logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_TILES, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, []{return Here(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_TILES, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, Here(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH] = Region("Fire Temple Loop Hammer Switch", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -70,8 +70,8 @@ void RegionTable_Init_FireTemple() {
|
|||
EVENT_ACCESS(FireLoopSwitch, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, []{return logic->FireLoopSwitch;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_FLARE_DANCER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, logic->FireLoopSwitch),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_GORON_ROOM] = Region("Fire Temple Loop Goron Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -79,14 +79,14 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BOSS_KEY_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, []{return logic->FireLoopSwitch;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_EXIT, []{return logic->FireLoopSwitch;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_HAMMER_SWITCH, logic->FireLoopSwitch),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_EXIT, logic->FireLoopSwitch),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LOOP_EXIT] = Region("Fire Temple Loop Exit", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, []{return logic->FireLoopSwitch;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRST_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LOOP_GORON_ROOM, logic->FireLoopSwitch),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM] = Region("Fire Temple Big Lava Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -96,11 +96,11 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRST_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 2);}),
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES, []{return logic->IsAdult && (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_FIRE_SOT));}),
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON, []{return logic->IsAdult && logic->HasExplosives();}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRST_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 2)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES, logic->IsAdult && (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_FIRE_SOT))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON, logic->IsAdult && logic->HasExplosives()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_GORON] = Region("Fire Temple Big Lava Room North Goron", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -108,7 +108,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_NORTH_TILES] = Region("Fire Temple Big Lava Room North Tiles", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -117,7 +117,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, (logic->IsAdult && logic->CanAttack()) || logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BIG_LAVA_ROOM_SOUTH_GORON] = Region("Fire Temple Big Lava Room South Goron", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -125,7 +125,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM] = Region("Fire Temple Fire Pillar Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -135,8 +135,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, logic->FireTimer() >= 56),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}),
|
||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return logic->FireTimer() >= 56 && logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 3)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SHORTCUT_ROOM, logic->FireTimer() >= 56 && logic->SmallKeys(RR_FIRE_TEMPLE, 4)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_SHORTCUT_ROOM] = Region("Fire Temple Shortcut Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -144,15 +144,15 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, Here(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return true;})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return Here(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return true;});}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || ctx->GetTrickOption(RT_FIRE_STRENGTH)) && (logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_PILLAR_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 4)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, Here(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return true;})),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || ctx->GetTrickOption(RT_FIRE_STRENGTH)) && (logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_SHORTCUT_CLIMB] = Region("Fire Temple Shortcut Climb", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SHORTCUT_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER] = Region("Fire Temple Boulder Maze Lower", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -161,10 +161,10 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_GS_BOULDER_MAZE, logic->HasExplosives() && (logic->IsAdult || logic->HookshotOrBoomerang())),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5, 7);}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return false;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SHORTCUT_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 5, 7)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, false),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER_SIDE_ROOM] = Region("Fire Temple Boulder Maze Lower Side Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -172,7 +172,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM] = Region("Fire Temple East Central Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -182,10 +182,10 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5, 8);}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MAP_AREA, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BIG_LAVA_ROOM, logic->TakeDamage()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, logic->SmallKeys(RR_FIRE_TEMPLE, 5, 8)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MAP_AREA, logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRE_WALL_CHASE] = Region("Fire Temple Fire Wall Chase", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -195,10 +195,10 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, logic->FireTimer() >= 24),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return logic->FireTimer() >= 24 && logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MAP_AREA, []{return logic->IsAdult;}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return logic->FireTimer() >= 24 && logic->IsAdult;}),
|
||||
Entrance(RR_FIRE_TEMPLE_CORRIDOR, []{return logic->FireTimer() >= 24 && logic->IsAdult && logic->SmallKeys(RR_FIRE_TEMPLE, 7);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, logic->FireTimer() >= 24 && logic->SmallKeys(RR_FIRE_TEMPLE, 6, 8)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MAP_AREA, logic->IsAdult),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, logic->FireTimer() >= 24 && logic->IsAdult),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_CORRIDOR, logic->FireTimer() >= 24 && logic->IsAdult && logic->SmallKeys(RR_FIRE_TEMPLE, 7)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MAP_AREA] = Region("Fire Temple Map Region", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -206,7 +206,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MAP_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER] = Region("Fire Temple Boulder Maze Upper", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -214,10 +214,10 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, []{return logic->HasExplosives();}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, []{return logic->CanUse(RG_SCARECROW) || (ctx->GetTrickOption(RT_FIRE_SCARECROW) && logic->IsAdult && logic->CanUse(RG_LONGSHOT));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SHORTCUT_CLIMB, logic->HasExplosives()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_LOWER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SCARECROW_ROOM, logic->CanUse(RG_SCARECROW) || (ctx->GetTrickOption(RT_FIRE_SCARECROW) && logic->IsAdult && logic->CanUse(RG_LONGSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_SCARECROW_ROOM] = Region("Fire Temple Scarecrow Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -225,8 +225,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, 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)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_EAST_PEAK, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOULDER_MAZE_UPPER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_EAST_PEAK, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_EAST_PEAK] = Region("Fire Temple East Peak", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -235,14 +235,14 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_GS_SCARECROW_TOP, logic->CanUseProjectile()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_SCARECROW_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, []{return logic->TakeDamage();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_SCARECROW_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_EAST_CENTRAL_ROOM, logic->TakeDamage()),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_CORRIDOR] = Region("Fire Temple Corridor", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 7);}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_WALL_CHASE, logic->SmallKeys(RR_FIRE_TEMPLE, 7)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_ROOM] = Region("Fire Temple Fire Maze Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -253,18 +253,18 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_CORRIDOR, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8);}),
|
||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return ctx->GetTrickOption(RT_FIRE_FLAME_MAZE) || false;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_CORRIDOR, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, logic->SmallKeys(RR_FIRE_TEMPLE, 8)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, ctx->GetTrickOption(RT_FIRE_FLAME_MAZE) || false),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_UPPER] = Region("Fire Temple Fire Maze Upper", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_FIRE_MAZE_SIDE_ROOM] = Region("Fire Temple Fire Maze Side Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -272,7 +272,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_COMPASS_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER] = Region("Fire Temple West Central Lower", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -280,16 +280,16 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, Here(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return (logic->CanUse(RG_SONG_OF_TIME) || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 8);}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 8)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER] = Region("Fire Temple West Central Upper", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_LATE_FIRE_MAZE] = Region("Fire Temple Late Fire Maze", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -300,21 +300,21 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, []{return false;}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->HasExplosives();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_ROOM, false),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_LOWER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, logic->HasExplosives()),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_UPPER_FLARE_DANCER] = Region("Fire Temple Upper Flare Dancer", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, []{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CLIMB, []{return Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_LATE_FIRE_MAZE, Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);})),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CLIMB, Here(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_WEST_CLIMB] = Region("Fire Temple West Climb", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_PEAK, []{return logic->CanUseProjectile();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_UPPER_FLARE_DANCER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_PEAK, logic->CanUseProjectile()),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_WEST_PEAK] = Region("Fire Temple West Peak", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -322,9 +322,9 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, []{return logic->TakeDamage();}),
|
||||
Entrance(RR_FIRE_TEMPLE_WEST_CLIMB, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CENTRAL_UPPER, logic->TakeDamage()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_WEST_CLIMB, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -334,13 +334,13 @@ void RegionTable_Init_FireTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE] = Region("Fire Temple Above Fire Maze", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_FIRE_MAZE_UPPER, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -354,17 +354,17 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->IsAdult || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, logic->IsAdult || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER] = Region("Fire Temple MQ First Room Upper", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HasFireSource();}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->HasFireSource()),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH] = Region("Fire Temple MQ Map Room South", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -372,8 +372,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, logic->CanKillEnemy(RE_LIKE_LIKE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_LIKE_LIKE);});}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, []{return logic->OpenedLowestGoronCage;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_LIKE_LIKE);})),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, logic->OpenedLowestGoronCage),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_STALFOS_ROOM] = Region("Fire Temple MQ Stalfos Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -381,8 +381,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, []{return Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM] = Region("Fire Temple MQ Iron Knuckle Room", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -401,8 +401,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_STALFOS_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, Here(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_LOWER, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER] = Region("Fire Temple MQ Lower Flare Dancer", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -410,8 +410,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && Here(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_IRON_KNUCKLE_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, Here(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return logic->CanKillEnemy(RE_FLARE_DANCER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH] = Region("Fire Temple MQ Map Room North", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -419,8 +419,8 @@ void RegionTable_Init_FireTemple() {
|
|||
EVENT_ACCESS(OpenedLowestGoronCage, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, []{return logic->OpenedLowestGoronCage;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_FLARE_DANCER, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE, logic->OpenedLowestGoronCage),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAP_ROOM_CAGE] = Region("Fire Temple MQ Map Room Cage", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -428,8 +428,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_MAP_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, []{return logic->OpenedLowestGoronCage;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return logic->OpenedLowestGoronCage;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_NORTH, logic->OpenedLowestGoronCage),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAP_ROOM_SOUTH, logic->OpenedLowestGoronCage),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -441,10 +441,10 @@ void RegionTable_Init_FireTemple() {
|
|||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, true),
|
||||
//Child cannot make it to the north side torches without a hook without specifically bunny hood speed + hover boots
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH, []{return logic->FireTimer() > 32 && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return logic->FireTimer() >= 15 && ((logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->CanUse(RG_HOVER_BOOTS))) || (logic->IsAdult && logic->HitFireTemplePlatform) || (logic->HitFireTemplePlatform && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM_NORTH, logic->FireTimer() > 32 && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, logic->FireTimer() >= 15 && ((logic->IsAdult && (ctx->GetTrickOption(RT_FIRE_BOSS_DOOR_JUMP) || logic->CanUse(RG_HOVER_BOOTS))) || (logic->IsAdult && logic->HitFireTemplePlatform) || (logic->HitFireTemplePlatform && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
});
|
||||
|
||||
//This room assumes tunic logic is handled on entry.
|
||||
|
@ -469,7 +469,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM] = Region("Fire Temple MQ Big Lava Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -484,9 +484,9 @@ void RegionTable_Init_FireTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
// Fewer tunic requirements ends here
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return logic->FireTimer() >= 20;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, []{return logic->HasFireSource() && ((logic->CanUse(RG_FAIRY_BOW) && logic->FireTimer() >= 25) || (ctx->GetTrickOption(RT_FIRE_MQ_BK_CHEST) && logic->FireTimer() >= 50)) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_SOT)));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, logic->FireTimer() >= 20),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, logic->CanUse(RG_GORON_TUNIC) && logic->SmallKeys(RR_FIRE_TEMPLE, 2)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM, logic->HasFireSource() && ((logic->CanUse(RG_FAIRY_BOW) && logic->FireTimer() >= 25) || (ctx->GetTrickOption(RT_FIRE_MQ_BK_CHEST) && logic->FireTimer() >= 50)) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && ctx->GetTrickOption(RT_FIRE_SOT)))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_TORCH_FIREWALL_ROOM] = Region("Fire Temple MQ Torch Firewall Room", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -499,7 +499,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
//This room assumes Goron Tunic until looser tunic requirements tricks are made
|
||||
|
@ -510,15 +510,15 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM] = Region("Fire Temple MQ Big Torch Room", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return (logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_FIRE_MQ_CLIMB) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, []{return logic->CanUse(RG_GORON_TUNIC);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, []{return logic->OpenedUpperFireShortcut;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, (logic->HasFireSource() && logic->CanUse(RG_HOOKSHOT)) || (ctx->GetTrickOption(RT_FIRE_MQ_CLIMB) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_ELEVATOR_ROOM, logic->CanUse(RG_GORON_TUNIC)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, logic->OpenedUpperFireShortcut),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE] = Region("Fire Temple MQ Lower Maze", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -527,11 +527,11 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives() && ctx->GetTrickOption(RT_FIRE_MQ_MAZE_SIDE_ROOM)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, true),
|
||||
//Explosives can also reach this room. Chus is relatively simple, they need to detonate on the first horizontal bar up from the floor while horizontally near the switch, but bombs are much harder
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return logic->CanJumpslash();});}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE, Here(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return logic->CanJumpslash();})),
|
||||
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -542,21 +542,21 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, true),
|
||||
//it's possible to make the RT_FIRE_MQ_MAZE_HOVERS as child using bunny hood jumps, but not adult as adult bonks
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->IsAdult && ((ctx->GetTrickOption(RT_FIRE_MQ_MAZE_HOVERS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_FIRE_MQ_MAZE_JUMP));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, logic->IsAdult && ((ctx->GetTrickOption(RT_FIRE_MQ_MAZE_HOVERS) && logic->CanUse(RG_HOVER_BOOTS)) || ctx->GetTrickOption(RT_FIRE_MQ_MAZE_JUMP))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE] = Region("Fire Temple MQ Upper Maze", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, true),
|
||||
//this cage is much more lenient than the lower cage as the switch is close to the front. sling, rang and bow all hit the switch easily, though might be too unintuitive for default logic
|
||||
//This shouldn't come up in most cases anyway as most methods to get here need either a melee weapon or explosives
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE, []{return Here(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->CanJumpslash() || logic->HasExplosives();});}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->HasExplosives();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE, Here(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->CanJumpslash() || logic->HasExplosives();})),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, logic->HasExplosives()),
|
||||
//Implies RR_FIRE_TEMPLE_MQ_LOWER_MAZE access
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB, []{return logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)));}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3) && logic->CanUse(RG_GORON_TUNIC);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BURNING_BLOCK_CLIMB, logic->HasExplosives() && logic->CanUse(RG_MEGATON_HAMMER) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)))),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, logic->SmallKeys(RR_FIRE_TEMPLE, 3) && logic->CanUse(RG_GORON_TUNIC)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE] = Region("Fire Temple MQ Upper Maze Box Cage", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -571,7 +571,7 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT] = Region("Fire Temple MQ Maze Shortcut", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -579,8 +579,8 @@ void RegionTable_Init_FireTemple() {
|
|||
EVENT_ACCESS(OpenedUpperFireShortcut, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, []{return logic->OpenedUpperFireShortcut;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE, logic->OpenedUpperFireShortcut),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE] = Region("Fire Temple MQ Maze Shortcut Cage", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -594,8 +594,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->OpenedUpperFireShortcut;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, []{return logic->OpenedUpperFireShortcut;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, logic->OpenedUpperFireShortcut),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_TORCH_ROOM, logic->OpenedUpperFireShortcut),
|
||||
});
|
||||
|
||||
|
||||
|
@ -608,8 +608,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return logic->TakeDamage();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, logic->TakeDamage()),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM] = Region("Fire Temple MQ Narrow Path Room", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -622,8 +622,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, []{return logic->TakeDamage();}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM, logic->TakeDamage()),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM] = Region("Fire Temple MQ High Torch Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -642,10 +642,10 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, logic->SmallKeys(RR_FIRE_TEMPLE, 3)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NARROW_PATH_ROOM, true),
|
||||
//Child has issues navigating the higher points of this room without an equip swapped hookshot
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return Here(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT));}) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT));}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, Here(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_HOOKSHOT));}) && (logic->IsAdult || logic->CanUse(RG_HOOKSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE] = Region("Fire Temple MQ South Fire Maze", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -655,12 +655,12 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, []{return logic->HitFireTemplePlatform;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, logic->HitFireTemplePlatform),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
//Hover boots get there via the platforms
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return logic->OpenedFireMQFireMazeDoor;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, logic->OpenedFireMQFireMazeDoor),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS] = Region("Fire Temple MQ Fire Maze Platforms", SCENE_FIRE_TEMPLE, {
|
||||
|
@ -668,8 +668,8 @@ void RegionTable_Init_FireTemple() {
|
|||
EVENT_ACCESS(HitFireTemplePlatform, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
EVENT_ACCESS(OpenedFireMQFireMazeDoor, logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_HOOKSHOT)),
|
||||
}, {}, {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
//trick to get to RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE with hovers + taking damage is plausible
|
||||
});
|
||||
|
||||
|
@ -681,13 +681,13 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, []{return logic->IsAdult || ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE, logic->IsAdult || ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE, (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_WEST_FIRE_MAZE] = Region("Fire Temple MQ West Fire Maze", SCENE_FIRE_TEMPLE, {}, {}, {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return true;}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, []{return (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, true),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NORTH_FIRE_MAZE, (bool)ctx->GetTrickOption(RT_FIRE_MQ_FLAME_MAZE)),
|
||||
});
|
||||
|
||||
//this area exists for the pots in case we void warp to the top of fire somehow, because there's no way to get back the way we came
|
||||
|
@ -697,15 +697,15 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, logic->CanBreakPots()),
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return true;}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER] = Region("Fire Temple MQ North Fire Maze", SCENE_FIRE_TEMPLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, logic->CanKillEnemy(RE_FLARE_DANCER)),
|
||||
}, {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, []{return logic->CanKillEnemy(RE_FLARE_DANCER);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanKillEnemy(RE_FLARE_DANCER) && logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PAST_WALL, logic->CanKillEnemy(RE_FLARE_DANCER)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, logic->CanKillEnemy(RE_FLARE_DANCER) && logic->SmallKeys(RR_FIRE_TEMPLE, 4)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM] = Region("Fire Temple MQ Scarecrow Room", SCENE_FIRE_TEMPLE, {}, {
|
||||
|
@ -718,8 +718,8 @@ void RegionTable_Init_FireTemple() {
|
|||
//Using this dropdown is in N64 logic elsewhere, but not here, probably because it requires good foreknowlege to determine where to land
|
||||
//This would be a logical method to reach the hammer switch without hookshot, but it practically requires access to the area that switch unlocks already. It could also be first child access to PLATFORMS if tricks ever enable that
|
||||
//If a practical use for this drop is found, it should be made a trick
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 4);}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return Here(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && logic->SmallKeys(RR_FIRE_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_UPPER_FLARE_DANCER, logic->SmallKeys(RR_FIRE_TEMPLE, 4)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, Here(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);}) && logic->SmallKeys(RR_FIRE_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
//The peg knocked down from here could have logical implications for child in the fire maze if tricks to gain height like bomb jumps exist
|
||||
|
@ -728,8 +728,8 @@ void RegionTable_Init_FireTemple() {
|
|||
//If someone manages to make a trick to get here from fire maze, this needs to be in a separate room as the door back is barred
|
||||
LOCATION(RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, logic->CanUse(RG_HOOKSHOT)),
|
||||
}, {
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, []{return logic->CanUse(RG_HOOKSHOT) && Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
Entrance(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_FIRE_MAZE_PLATFORMS, logic->CanUse(RG_HOOKSHOT) && Here(RR_FIRE_TEMPLE_MQ_COLLAPSED_STAIRS, []{return logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_SCARECROW_ROOM, logic->IsAdult && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -737,9 +737,9 @@ 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, ctx->GetDungeon(FIRE_TEMPLE)->IsVanilla() && false),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM, ctx->GetDungeon(FIRE_TEMPLE)->IsMQ() && false),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ROOM, logic->HasItem(RG_FIRE_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_FIRE_TEMPLE_BOSS_ROOM] = Region("Fire Temple Boss Room", SCENE_FIRE_TEMPLE_BOSS, {
|
||||
|
@ -751,8 +751,8 @@ void RegionTable_Init_FireTemple() {
|
|||
LOCATION(RC_VOLVAGIA, logic->FireTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTempleClear;}, false),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, logic->FireTempleClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FIRST_ROOM, ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_LOBBY, ctx->GetDungeon(FOREST_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -22,14 +22,14 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_GS_FIRST_ROOM, (logic->IsAdult && logic->CanUse(RG_BOMB_BAG)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOMBCHU_5) || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_FOREST_FIRST_GS) && (logic->CanJumpslashExceptHammer() || (logic->IsChild && logic->CanUse(RG_BOMB_BAG))))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_SOUTH_CORRIDOR] = Region("Forest Temple South Corridor", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_FIRST_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FIRST_ROOM, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_LOBBY] = Region("Forest Temple Lobby", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -46,20 +46,20 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_LOBBY_POT_6, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
Entrance(RR_FOREST_TEMPLE_WEST_CORRIDOR, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5);}),
|
||||
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return false;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_REGION, []{return logic->ForestTempleMeg;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_SOUTH_CORRIDOR, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NORTH_CORRIDOR, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_WEST_CORRIDOR, logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_EAST_CORRIDOR, false),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_REGION, logic->ForestTempleMeg),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NORTH_CORRIDOR] = Region("Forest Temple North Corridor", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_LOWER_STALFOS, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOWER_STALFOS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_LOWER_STALFOS] = Region("Forest Temple Lower Stalfos", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -72,7 +72,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NORTH_CORRIDOR, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NORTH_CORRIDOR, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER] = Region("Forest Temple NW Outdoors Lower", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -86,11 +86,11 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, logic->CanUse(RG_BOOMERANG) && ctx->GetTrickOption(RT_FOREST_OUTDOORS_HEARTS_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MAP_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_SEWER, []{return logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER);}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, logic->CanUse(RG_SONG_OF_TIME)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MAP_ROOM, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_SEWER, logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER] = Region("Forest Temple NW Outdoors Upper", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -103,10 +103,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_FLOORMASTER_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FLOORMASTER_ROOM, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER] = Region("Forest Temple NE Outdoors Lower", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -119,10 +119,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_FOREST_OUTDOORS_EAST_GS) && logic->CanUse(RG_BOOMERANG)) || Here(RR_FOREST_TEMPLE_FALLING_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_DINS_FIRE) || logic->HasExplosives();})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, []{return logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_VINES) && logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_FOREST_TEMPLE_SEWER, []{return logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER);}),
|
||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return false;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_VINES) && logic->CanUse(RG_HOOKSHOT))),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_SEWER, logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS) || HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FALLING_ROOM, false),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER] = Region("Forest Temple NE Outdoors Upper", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -131,9 +131,9 @@ void RegionTable_Init_ForestTemple() {
|
|||
EVENT_ACCESS(DekuBabaNuts, logic->CanGetDekuBabaNuts()),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MAP_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return ctx->GetTrickOption(RT_FOREST_DOORFRAME) && logic->CanJumpslashExceptHammer() && logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_SCARECROW);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MAP_ROOM, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FALLING_ROOM, ctx->GetTrickOption(RT_FOREST_DOORFRAME) && logic->CanJumpslashExceptHammer() && logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_SCARECROW)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MAP_ROOM] = Region("Forest Temple Map Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -141,8 +141,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MAP_CHEST, logic->CanKillEnemy(RE_BLUE_BUBBLE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, []{return Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);})),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER, Here(RR_FOREST_TEMPLE_MAP_ROOM, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_SEWER] = Region("Forest Temple Sewer", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -152,13 +152,13 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_WELL_EAST_HEART, HasAccessTo(RR_FOREST_TEMPLE_NE_OUTDOORS_UPPER) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_LOWER, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST] = Region("Forest Temple Below Boss Key Chest", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return Here(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);});}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, Here(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return logic->CanKillEnemy(RE_BLUE_BUBBLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_FLOORMASTER_ROOM] = Region("Forest Temple Floormaster Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -166,13 +166,13 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_FLOORMASTER_CHEST, logic->CanDamage()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_WEST_CORRIDOR] = Region("Forest Temple West Corridor", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5);}),
|
||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return logic->CanAttack() || logic->CanUse(RG_NUTS);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, logic->SmallKeys(RR_FOREST_TEMPLE, 1, 5)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, logic->CanAttack() || logic->CanUse(RG_NUTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM] = Region("Forest Temple Block Push Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -180,16 +180,16 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, logic->HasItem(RG_GORONS_BRACELET) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_WEST_CORRIDOR, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && logic->CanJumpslashExceptHammer() && logic->HasItem(RG_GORONS_BRACELET));}),
|
||||
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, []{return logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2);}),
|
||||
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, []{return logic->IsAdult && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)) && logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_WEST_CORRIDOR, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_OUTDOORS_UPPER, logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && logic->CanJumpslashExceptHammer() && logic->HasItem(RG_GORONS_BRACELET))),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED, logic->IsAdult && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT)) && logic->HasItem(RG_GORONS_BRACELET) && logic->SmallKeys(RR_FOREST_TEMPLE, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED] = Region("Forest Temple NW Corridor Twisted", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2);}),
|
||||
Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 2)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_RED_POE_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NW_CORRIDOR_STRAIGHTENED] = Region("Forest Temple NW Corridor Straightened", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -197,8 +197,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_BOSS_KEY_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BELOW_BOSS_KEY_CHEST, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLOCK_PUSH_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_RED_POE_ROOM] = Region("Forest Temple Red Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -209,8 +209,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_RED_POE_CHEST, logic->ForestTempleJoelle),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
||||
Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NW_CORRIDOR_TWISTED, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_UPPER_STALFOS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_UPPER_STALFOS] = Region("Forest Temple Upper Stalfos", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -222,8 +222,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_RED_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}),
|
||||
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_RED_POE_ROOM, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLUE_POE_ROOM, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BLUE_POE_ROOM] = Region("Forest Temple Blue Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -237,20 +237,20 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_BLUE_POE_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_UPPER_STALFOS, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_UPPER_STALFOS, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, logic->SmallKeys(RR_FOREST_TEMPLE, 4)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED] = Region("Forest Temple NE Corridor Straightened", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_BLUE_POE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
||||
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BLUE_POE_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 4)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED] = Region("Forest Temple NE Corridor Twisted", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}),
|
||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FROZEN_EYE_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 5)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FALLING_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_FROZEN_EYE_ROOM] = Region("Forest Temple Frozen Eye Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -259,8 +259,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5);}),
|
||||
Entrance(RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_CORRIDOR_STRAIGHTENED, logic->SmallKeys(RR_FOREST_TEMPLE, 5)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_CORRIDOR_TWISTED, logic->SmallKeys(RR_FOREST_TEMPLE, 5) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE))),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_FALLING_ROOM] = Region("Forest Temple Falling Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -268,8 +268,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_NE_OUTDOORS_LOWER, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_GREEN_POE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_GREEN_POE_ROOM] = Region("Forest Temple Green Poe Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -281,14 +281,14 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_GREEN_POE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_FALLING_ROOM, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_EAST_CORRIDOR, []{return logic->ForestTempleAmy;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_FALLING_ROOM, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_EAST_CORRIDOR, logic->ForestTempleAmy),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_EAST_CORRIDOR] = Region("Forest Temple East Corridor", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return logic->CanAttack() || logic->CanUse(RG_NUTS);}),
|
||||
Entrance(RR_FOREST_TEMPLE_GREEN_POE_ROOM, []{return logic->CanAttack() || logic->CanUse(RG_NUTS);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, logic->CanAttack() || logic->CanUse(RG_NUTS)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_GREEN_POE_ROOM, logic->CanAttack() || logic->CanUse(RG_NUTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BOSS_REGION] = Region("Forest Temple Boss Region", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -297,8 +297,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_GS_BASEMENT, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -312,8 +312,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 1) && logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, logic->SmallKeys(RR_FOREST_TEMPLE, 1) && logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_CENTRAL_AREA] = Region("Forest Temple MQ Central Region", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -329,12 +329,12 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, []{return logic->IsChild || logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return logic->CanHitEyeTargets();}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM, logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, logic->CanHitEyeTargets()),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, logic->CanHitEyeTargets()),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);})),
|
||||
//implies the other 3 poes
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestTempleMeg;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BASEMENT, logic->ForestTempleMeg),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_WOLFOS_ROOM] = Region("Forest Temple MQ Wolfos Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -348,7 +348,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestClearBelowBowChest && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, logic->ForestClearBelowBowChest && (logic->IsChild || logic->CanUse(RG_SONG_OF_TIME))),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE] = Region("Forest Temple MQ Lower Block Puzzle", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -361,11 +361,11 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE, []{return logic->HasItem(RG_GORONS_BRACELET) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, Here(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->CanKillEnemy(RE_STALFOS);})),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE, logic->HasItem(RG_GORONS_BRACELET) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT))),
|
||||
//Assumes RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE access
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return logic->ForestCanTwistHallway && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT))),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, logic->ForestCanTwistHallway && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_MIDDLE_BLOCK_PUZZLE] = Region("Forest Temple MQ Middle Block Puzzle", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -374,10 +374,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
EVENT_ACCESS(ForestCanTwistHallway, ctx->GetTrickOption(RT_FOREST_MQ_JS_HALLWAY_SWITCH) && (logic->IsAdult && logic->CanJumpslash()) || (logic->CanUse(RG_HOVER_BOOTS) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MASTER_SWORD)))),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_LOWER_BLOCK_PUZZLE, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, (logic->IsAdult && logic->HasItem(RG_GORONS_BRACELET)) || (logic->MQForestBlockRoomTargets && logic->CanUse(RG_HOOKSHOT))),
|
||||
//Hammer cannot recoil from here, but can make the jump forwards with a hammer jumpslash as adult
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return logic->ForestCanTwistHallway && logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))));}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, logic->ForestCanTwistHallway && logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_FOREST_OUTSIDE_BACKDOOR) && (logic->CanJumpslashExceptHammer() || (logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER))))),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE] = Region("Forest Temple MQ After Block Puzzle", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -385,13 +385,13 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 3);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return logic->ForestCanTwistHallway && logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, logic->ForestCanTwistHallway && logic->SmallKeys(RR_FOREST_TEMPLE, 4)),
|
||||
//!QUANTUM LOGIC!
|
||||
//As there is no way in default logic to reach the other possible key use without going through RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, this is logically safe for now
|
||||
//Breaks if there's any other way to RR_FOREST_TEMPLE_MQ_FALLING_ROOM than going through the eye targets in RR_FOREST_TEMPLE_MQ_CENTRAL_AREA
|
||||
//Requires a bow/sling ammo source once ammo logic is done, to avoid edge cases.
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 2) && Here(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, logic->SmallKeys(RR_FOREST_TEMPLE, 2) && Here(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->CanKillEnemy(RE_FLOORMASTER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_STRAIGHT_HALLWAY] = Region("Forest Temple MQ Straight Hallway", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -399,12 +399,12 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, logic->SmallKeys(RR_FOREST_TEMPLE, 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM] = Region("Forest Temple MQ Floormaster Room", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, []{return Here(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE, Here(RR_FOREST_TEMPLE_MQ_FLOORMASTER_ROOM, []{return logic->CanKillEnemy(RE_FLOORMASTER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOOR_LEDGE] = Region("Forest Temple MQ Outdoor Ledge", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -417,7 +417,7 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_NW_OUTDOORS] = Region("Forest Temple MQ NW Outdoors", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -433,8 +433,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT))) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_FIRE_ARROWS);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_FOREST_MQ_WELL_SWIM) && logic->CanUse(RG_HOOKSHOT))) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, logic->CanUse(RG_FIRE_ARROWS)),
|
||||
});
|
||||
|
||||
//The well only coniders the eye target here because the eye target is a temp flag, making it unwieldy to use as an EventAccess to make it it's own room
|
||||
|
@ -453,9 +453,9 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanHitEyeTargets()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanUse(RG_SONG_OF_TIME)));}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, (((logic->CanUse(RG_IRON_BOOTS) || logic->CanUse(RG_LONGSHOT)) && logic->HasItem(RG_BRONZE_SCALE)) || logic->HasItem(RG_GOLDEN_SCALE)) && logic->WaterTimer() >= 16),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || logic->CanUse(RG_SONG_OF_TIME)))),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_OUTDOORS_TOP_LEDGES] = Region("Forest Temple MQ Outdoors Top Ledges", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -465,10 +465,10 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, ((logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)) || (logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_FOREST_DOORFRAME))) && logic->CanJumpslash() && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_FAIRY_BOW) || logic->HookshotOrBoomerang() || (logic->CanStandingShield() && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MASTER_SWORD) || (logic->IsChild && logic->CanUse(RG_KOKIRI_SWORD)))))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, []{return logic->HasFireSourceWithTorch();}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NW_OUTDOORS, logic->HasFireSourceWithTorch()),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, true),
|
||||
//N64 logic doesn't check damage but I always take some so I'm adding it
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->TakeDamage();}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, ctx->GetTrickOption(RT_FOREST_OUTDOORS_LEDGE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash() && logic->TakeDamage()),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE] = Region("Forest Temple MQ NE Outdoors Ledge", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -477,8 +477,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//Skipping swim here is non-trival, needs a roll-jump. If a swim lock is added it's probably wise to copy deku baba events here
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, logic->CanUse(RG_SONG_OF_TIME)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_JOELLE_ROOM] = Region("Forest Temple MQ Joelle room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -489,8 +489,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_MAP_CHEST, logic->ForestTempleJoelle),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 4);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_UPPER_BLOCK_PUZZLE, logic->SmallKeys(RR_FOREST_TEMPLE, 4)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM] = Region("Forest Temple MQ 3 Stalfos Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -506,8 +506,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, []{return logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_JOELLE_ROOM, logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BETH_ROOM, logic->ForestClearBelowBowChest && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_BETH_ROOM] = Region("Forest Temple MQ Beth Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -524,9 +524,9 @@ void RegionTable_Init_ForestTemple() {
|
|||
//!QUANTUM LOGIC!
|
||||
//This key logic assumes that you can get to falling room either by spending the 5th key here, or by wasting a key in falling room itself.
|
||||
//While being the 5th key makes this simpler in theory, if a different age can waste the key compared to reaching this room it breaks
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 5) && Here(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);});}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 5) && Here(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);})),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 6)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_3_STALFOS_ROOM, true),
|
||||
});
|
||||
|
||||
//This room exists to show the actual map layout, and for when the crates get added to logic
|
||||
|
@ -537,8 +537,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE)),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BETH_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 6)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_FALLING_ROOM] = Region("Forest Temple MQ Falling Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -546,8 +546,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, []{return true;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_AMY_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_NE_OUTDOORS_LEDGE, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_AMY_ROOM, logic->SmallKeys(RR_FOREST_TEMPLE, 6)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_AMY_ROOM] = Region("Forest Temple MQ Amy Room", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -559,8 +559,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleAmy;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, logic->ForestTempleAmy),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT] = Region("Forest Temple MQ Basement", SCENE_FOREST_TEMPLE, {
|
||||
|
@ -572,9 +572,9 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, []{return logic->ForestTempleMeg;}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage();}),
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BOSS_REGION, []{return logic->ForestOpenBossCorridor;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_CENTRAL_AREA, logic->ForestTempleMeg),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM, logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->TakeDamage()),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BOSS_REGION, logic->ForestOpenBossCorridor),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_BASEMENT_POT_ROOM] = Region("Forest Temple MQ Basement Pot Room", SCENE_FOREST_TEMPLE, {}, {
|
||||
|
@ -585,13 +585,13 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BASEMENT, logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_MQ_BOSS_REGION] = Region("Forest Temple MQ Boss Region", SCENE_FOREST_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_FOREST_TEMPLE_MQ_BASEMENT, []{return logic->ForestOpenBossCorridor;}),
|
||||
Entrance(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BASEMENT, logic->ForestOpenBossCorridor),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -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, ctx->GetDungeon(FOREST_TEMPLE)->IsVanilla() && false),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_MQ_BOSS_REGION, ctx->GetDungeon(FOREST_TEMPLE)->IsMQ() && false),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_BOSS_ROOM, logic->HasItem(RG_FOREST_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_FOREST_TEMPLE_BOSS_ROOM] = Region("Forest Temple Boss Room", SCENE_FOREST_TEMPLE_BOSS, {
|
||||
|
@ -613,8 +613,8 @@ void RegionTable_Init_ForestTemple() {
|
|||
LOCATION(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_FOREST_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, logic->ForestTempleClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -10,9 +10,9 @@ 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_CASTLE_GROUNDS_FROM_GANONS_CASTLE, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_LOBBY, ctx->GetDungeon(GANONS_CASTLE)->IsVanilla()),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LOBBY, ctx->GetDungeon(GANONS_CASTLE)->IsMQ()),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -22,15 +22,15 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_SHEIK_HINT_GC, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_FOREST_TRIAL, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_FIRE_TRIAL, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_WATER_TRIAL, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_SHADOW_TRIAL, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_SPIRIT_TRIAL, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_LIGHT_TRIAL, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);}),
|
||||
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_DEKU_SCRUBS, []{return ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_FOREST_TRIAL, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_FIRE_TRIAL, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_WATER_TRIAL, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_SHADOW_TRIAL, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_SPIRIT_TRIAL, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_LIGHT_TRIAL, logic->CanUse(RG_GOLDEN_GAUNTLETS)),
|
||||
ENTRANCE(RR_GANONS_TOWER_ENTRYWAY, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_DEKU_SCRUBS, ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_DEKU_SCRUBS] = Region("Ganon's Castle Deku Scrubs", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -140,9 +140,9 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LOBBY] = Region("Ganon's Castle MQ Lobby", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_ENTRYWAY, []{return logic->CanPassEnemy(RE_GREEN_BUBBLE) || Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_ENTRYWAY, logic->CanPassEnemy(RE_GREEN_BUBBLE) || Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS);})),
|
||||
//Implies CanKillEnemy(RE_GREEN_BUBBLE)
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, Here(RR_GANONS_CASTLE_MQ_LOBBY, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE) && logic->CanKillEnemy(RE_ARMOS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_MAIN] = Region("Ganon's Castle MQ Main", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -150,15 +150,15 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_SHEIK_HINT_MQ_GC, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_MAIN, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);});}),
|
||||
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_DEKU_SCRUBS, []{return ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, Here(RR_GANONS_CASTLE_MQ_MAIN, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS);})),
|
||||
ENTRANCE(RR_GANONS_TOWER_ENTRYWAY, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_DEKU_SCRUBS, ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_DEKU_SCRUBS] = Region("Ganon's Castle MQ Deku Scrubs", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -181,7 +181,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM] = Region("Ganon's Castle MQ Forest Trial Stalfos Room", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -189,8 +189,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, Here(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
//If it is ever possible to warp into the RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, this needs splitting up as the requirements to reach things from the other side are more complex
|
||||
|
@ -200,8 +200,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, logic->HasFireSource()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_STALFOS_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM, logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FOREST_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Forest Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -213,14 +213,14 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
//2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not
|
||||
Entrance(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS);}) && logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_GOLDEN_GAUNTLETS) && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && logic->IsAdult && logic->CanUse(RG_HOOKSHOT)))));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM, Here(RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM, []{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS);}) && logic->CanUse(RG_GORON_TUNIC) && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_GOLDEN_GAUNTLETS) && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && logic->IsAdult && logic->CanUse(RG_HOOKSHOT)))))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Fire Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -242,15 +242,15 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, logic->BlueFire()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, logic->SmallKeys(RR_GANONS_CASTLE, 3)),
|
||||
//This assumes there's no way for child to have blue fire and not adult.
|
||||
Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, logic->IsAdult && logic->BlueFire()),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Water Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -262,7 +262,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, []{return logic->BlueFire();});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_FINAL_ROOM, []{return logic->BlueFire();})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE] = Region("Ganon's Castle MQ Shadow Trial Starting Ledge", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -270,8 +270,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
EVENT_ACCESS(ShadowTrialFirstChest, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, []{return (logic->ShadowTrialFirstChest && logic->CanUse(RG_HOOKSHOT)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, (logic->ShadowTrialFirstChest && logic->CanUse(RG_HOOKSHOT)) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM] = Region("Ganon's Castle MQ Shadow Trial Chest Platform", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -283,8 +283,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
}, {
|
||||
//Exits
|
||||
//Hookshot here is possible but very tight, but it's basically never relevant
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, []{return logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, []{return (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM] = Region("Ganon's Castle MQ Shadow Trial Moving Platform", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -293,18 +293,18 @@ void RegionTable_Init_GanonsCastle() {
|
|||
EVENT_ACCESS(ShadowTrialFirstChest, logic->CanDetonateUprightBombFlower()),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, []{return logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_CHEST_PLATFORM, logic->IsAdult || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, true),
|
||||
});
|
||||
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH] = Region("Ganon's Castle MQ Shadow Trial Beamos Torch", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, []{return ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_MOVING_PLATFORM, ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
//A torch run from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE is possible but very tight, so would be a trick
|
||||
//The bow trick assumes RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE access, if you can somehow void warp directly here it will need handling properly
|
||||
//Hovers is possible as child but a bit tight, requires good rolls
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, []{return logic->HasFireSource() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL) && logic->CanUse(RG_FAIRY_BOW));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, logic->HasFireSource() || logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL) && logic->CanUse(RG_FAIRY_BOW))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE] = Region("Ganon's Castle MQ Shadow Trial Far Side", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -312,13 +312,13 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
//Modelling the silver rupees properly will require a way to check temp flags in different regions.
|
||||
//It may be tempting to use a Here-like command for this but it could cause sphere skipping in playthroughs
|
||||
//So a system like event access which sets based on TimeAge would be preferable, as the application of these can be tracked and accounted for, unlike Here-like commands
|
||||
//For Now I am assuming the player has made it all the way from RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_STARTING_LEDGE, which logically means every rupee is available
|
||||
//with no extra requirements except the lens logic needed to reach the door, which also enables the beamos-platform rupee
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM, []{return (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM, (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Shadow Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -330,13 +330,13 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, []{return (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE, (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM] = Region("Ganon's Castle MQ Spirit Trial Chairs Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return (logic->CanHitEyeTargets() || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return (logic->CanHitEyeTargets() || ctx->GetTrickOption(RT_RUSTED_SWITCHES)) && logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH] = Region("Ganon's Castle MQ Spirit Trial Before Switch", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -344,8 +344,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, logic->CanPassEnemy(RE_GREEN_BUBBLE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_CHAIRS_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, Here(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, []{return logic->CanUse(RG_BOMBCHU_5);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH] = Region("Ganon's Castle MQ Spirit Trial After Switch", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -358,9 +358,9 @@ void RegionTable_Init_GanonsCastle() {
|
|||
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))),
|
||||
}, {
|
||||
//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);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_BEFORE_SWITCH, 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, 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))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Spirit Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -373,13 +373,13 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL_AFTER_SWITCH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM] = Region("Ganon's Castle MQ Light Trial Dinolfos Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, []{return Here(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return logic->CanKillEnemy(RE_DINOLFOS) && logic->CanKillEnemy(RE_TORCH_SLUG);});}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, Here(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, []{return logic->CanKillEnemy(RE_DINOLFOS) && logic->CanKillEnemy(RE_TORCH_SLUG);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM] = Region("Ganon's Castle MQ Light Trial Triforce Room", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -387,14 +387,14 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(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;}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_DINOLFOS_ROOM, true),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, logic->SmallKeys(RR_GANONS_CASTLE, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT] = Region("Ganon's Castle MQ Light Trial Boulder Room Front", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 2);}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, []{return logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_TRIFORCE_ROOM, logic->SmallKeys(RR_GANONS_CASTLE, 2)),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK, logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_BACK] = Region("Ganon's Castle MQ Light Trial Boulder Room Back", SCENE_INSIDE_GANONS_CASTLE, {}, {
|
||||
|
@ -404,8 +404,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
}, {
|
||||
//Exits
|
||||
//I got the trick going backwards, but only while taking damage. this isn't relevant anyway though
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, []{return logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL);}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3) && (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanJumpslash() || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_BOOMERANG));}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_BOULDER_ROOM_FRONT, logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GANON_MQ_LIGHT_TRIAL)),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM, logic->SmallKeys(RR_GANONS_CASTLE, 3) && (ctx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanJumpslash() || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_BOOMERANG))),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_MQ_LIGHT_TRIAL_FINAL_ROOM] = Region("Ganon's Castle MQ Light Trial Final Room", SCENE_INSIDE_GANONS_CASTLE, {
|
||||
|
@ -423,21 +423,21 @@ void RegionTable_Init_GanonsCastle() {
|
|||
|
||||
areaTable[RR_GANONS_TOWER_ENTRYWAY] = Region("Ganon's Tower Entryway", SCENE_INSIDE_GANONS_CASTLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_LOBBY, []{return ctx->GetDungeon(GANONS_CASTLE)->IsVanilla();}),
|
||||
Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return ctx->GetDungeon(GANONS_CASTLE)->IsMQ();}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_LOBBY, ctx->GetDungeon(GANONS_CASTLE)->IsVanilla()),
|
||||
ENTRANCE(RR_GANONS_CASTLE_MQ_MAIN, ctx->GetDungeon(GANONS_CASTLE)->IsMQ()),
|
||||
//RANDOTODO could we just set these events automatically based on the setting?
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return (logic->ForestTrialClear || ctx->GetTrial(TK_FOREST_TRIAL)->IsSkipped()) &&
|
||||
(logic->FireTrialClear || ctx->GetTrial(TK_FIRE_TRIAL)->IsSkipped()) &&
|
||||
(logic->WaterTrialClear || ctx->GetTrial(TK_WATER_TRIAL)->IsSkipped()) &&
|
||||
(logic->ShadowTrialClear || ctx->GetTrial(TK_SHADOW_TRIAL)->IsSkipped()) &&
|
||||
(logic->SpiritTrialClear || ctx->GetTrial(TK_SPIRIT_TRIAL)->IsSkipped()) &&
|
||||
(logic->LightTrialClear || ctx->GetTrial(TK_LIGHT_TRIAL)->IsSkipped());}),
|
||||
ENTRANCE(RR_GANONS_TOWER_FLOOR_1, (logic->ForestTrialClear || ctx->GetTrial(TK_FOREST_TRIAL)->IsSkipped()) &&
|
||||
(logic->FireTrialClear || ctx->GetTrial(TK_FIRE_TRIAL)->IsSkipped()) &&
|
||||
(logic->WaterTrialClear || ctx->GetTrial(TK_WATER_TRIAL)->IsSkipped()) &&
|
||||
(logic->ShadowTrialClear || ctx->GetTrial(TK_SHADOW_TRIAL)->IsSkipped()) &&
|
||||
(logic->SpiritTrialClear || ctx->GetTrial(TK_SPIRIT_TRIAL)->IsSkipped()) &&
|
||||
(logic->LightTrialClear || ctx->GetTrial(TK_LIGHT_TRIAL)->IsSkipped())),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_FLOOR_1] = Region("Ganon's Tower Floor 1", SCENE_GANONS_TOWER, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_TOWER_ENTRYWAY, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_GANONS_TOWER_ENTRYWAY, Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);})),
|
||||
ENTRANCE(RR_GANONS_TOWER_FLOOR_2, Here(RR_GANONS_TOWER_FLOOR_1, []{return logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_FLOOR_2] = Region("Ganon's Tower Floor 2", SCENE_GANONS_TOWER, {}, {
|
||||
|
@ -445,14 +445,14 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_TOWER_BOSS_KEY_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_1, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_3, []{return Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_GANONS_TOWER_FLOOR_1, Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);})),
|
||||
ENTRANCE(RR_GANONS_TOWER_FLOOR_3, Here(RR_GANONS_TOWER_FLOOR_2, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_FLOOR_3] = Region("Ganon's Tower Floor 3", SCENE_GANONS_TOWER, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_TOWER_FLOOR_2, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
||||
Entrance(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_GANONS_TOWER_FLOOR_2, Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);})),
|
||||
ENTRANCE(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, Here(RR_GANONS_TOWER_FLOOR_3, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR] = Region("Ganon's Tower Before Ganondorf's Lair", SCENE_GANONS_TOWER, {}, {
|
||||
|
@ -477,8 +477,8 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONS_CASTLE_GANONS_TOWER_POT_18, logic->CanBreakPots()),
|
||||
}, {
|
||||
//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_FLOOR_3, Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return true;})),
|
||||
ENTRANCE(RR_GANONS_TOWER_GANONDORF_LAIR, Here(RR_GANONS_TOWER_BEFORE_GANONDORF_LAIR, []{return logic->HasItem(RG_GANONS_CASTLE_BOSS_KEY);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_TOWER_GANONDORF_LAIR] = Region("Ganondorf's Lair", SCENE_GANONDORF_BOSS, {}, {
|
||||
|
@ -486,7 +486,7 @@ void RegionTable_Init_GanonsCastle() {
|
|||
LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GANONS_CASTLE_ESCAPE, []{return logic->CanKillEnemy(RE_GANONDORF);}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_ESCAPE, logic->CanKillEnemy(RE_GANONDORF)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_ESCAPE] = Region("Ganon's Castle Escape", SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR, {}, {
|
||||
|
@ -496,9 +496,9 @@ void RegionTable_Init_GanonsCastle() {
|
|||
}, {
|
||||
//Exits
|
||||
//temporary
|
||||
Entrance(RR_GANONS_CASTLE_GANON_ARENA, []{return true;}),
|
||||
ENTRANCE(RR_GANONS_CASTLE_GANON_ARENA, true),
|
||||
//real logic once we figure out how to deal with castle escape skip
|
||||
//Entrance(RR_GANONS_CASTLE_GANON_ARENA, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}),
|
||||
//ENTRANCE(RR_GANONS_CASTLE_GANON_ARENA, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_GANON_ARENA] = Region("Ganon's Arena", SCENE_GANON_BOSS, {}, {
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_GF_EXITING_GTG, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LOBBY, ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsVanilla()),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsMQ()),
|
||||
ENTRANCE(RR_GF_EXITING_GTG, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -27,10 +27,10 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, true),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT))),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);})),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE] = Region("Gerudo Training Ground Central Maze", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -42,7 +42,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 9)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT] = Region("Gerudo Training Ground Central Maze Right", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -52,8 +52,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -61,8 +61,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_HOOKSHOT));}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_HOOKSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM] = Region("Gerudo Training Ground Hammer Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -71,8 +71,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, logic->CanUse(RG_MEGATON_HAMMER) || (logic->TakeDamage() && ctx->GetTrickOption(RT_FLAMING_CHESTS))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_FAIRY_BOW);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_FAIRY_BOW)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER] = Region("Gerudo Training Ground Eye Statue Lower", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -80,7 +80,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_HAMMER_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER] = Region("Gerudo Training Ground Eye Statue Upper", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -88,7 +88,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM] = Region("Gerudo Training Ground Heavy Block Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -96,8 +96,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 4, true)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, []{return (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_EYE_STATUE_UPPER, (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM, (ctx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS))) && logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_LIKE_LIKE_ROOM] = Region("Gerudo Training Ground Like Like Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -124,12 +124,12 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM, []{return ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, true),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM, ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1)),
|
||||
//It's possible to use the torch in RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM with flame storage to light these
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->HasFireSource();});}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT));});}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->HasFireSource();})),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, Here(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)) || (logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT));})),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM] = Region("Gerudo Training Ground MQ Maze Hidden Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -137,7 +137,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK] = Region("Gerudo Training Ground MQ Maze First Lock", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -145,8 +145,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER] = Region("Gerudo Training Ground MQ Center", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -158,7 +158,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM] = Region("Gerudo Training Ground MQ Sand Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -166,14 +166,14 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, logic->CanKillEnemy(RE_IRON_KNUCKLE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WITHOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, true),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WITHOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));})),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM] = Region("Gerudo Training Ground MQ Stalfos Room", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -185,8 +185,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->IsAdult && Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && (ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK, Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, logic->IsAdult && Here(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true);}) && (ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || (ctx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_BEHIND_BLOCK] = Region("Gerudo Training Ground MQ Behind Block", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -197,10 +197,10 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE] = Region("Gerudo Training Ground MQ Statue Room Ledge", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, true),
|
||||
//implies dropping down to hit the switch. Using swords, especially master, is a bit awkward, may be trick worthy, but is only relevant with other tricks
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG);});}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM, Here(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_STICKS) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG);})),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAGENTA_FIRE_ROOM] = Region("Gerudo Training Ground MQ Magenta Fire Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -208,7 +208,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, logic->MQGTGMazeSwitch),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM] = Region("Gerudo Training Ground MQ Statue ROom", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -216,8 +216,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM_LEDGE, logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM] = Region("Gerudo Training Ground MQ Torch Slug Room", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -227,8 +227,8 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, logic->CanHitSwitch(ED_BOMB_THROW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_STATUE_ROOM, Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);})),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE, Here(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SLUG_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_SWITCH_LEDGE] = Region("Gerudo Training Ground MQ Switch Ledge", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -237,10 +237,10 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
EVENT_ACCESS(GTGPlatformSilverRupees, logic->CanUse(RG_FIRE_ARROWS) && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, logic->CanUse(RG_FIRE_ARROWS)),
|
||||
//the fire bubble here is a jerk if you are aiming for the nearest hook platform, you have to aim to the right hand side with hook to dodge it
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOOKSHOT)) || ((logic->CanUse(RG_FIRE_ARROWS) && logic->GTGPlatformSilverRupees) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return logic->MQGTGRightSideSwitch && logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOOKSHOT)) || ((logic->CanUse(RG_FIRE_ARROWS) && logic->GTGPlatformSilverRupees) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, logic->MQGTGRightSideSwitch && logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
|
||||
|
@ -249,7 +249,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS] = Region("Gerudo Training Ground MQ Ledge Side Platforms", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||
//Exits
|
||||
//This is merely to extend this region's logic if you have hovers
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
//this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area
|
||||
|
@ -258,7 +258,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", SCENE_GERUDO_TRAINING_GROUND, {}, {}, {
|
||||
//Exits
|
||||
//This is merely to extend this region's logic if you have hovers
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH] = Region("Gerudo Training Ground MQ Platforms Unlit Torch", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -266,10 +266,10 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
EVENT_ACCESS(GTGPlatformSilverRupees, logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, []{return logic->GTGPlatformSilverRupees;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return logic->HasFireSource() || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return logic->MQGTGRightSideSwitch && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->HasFireSource()));}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER, logic->GTGPlatformSilverRupees),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, logic->HasFireSource() && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, logic->HasFireSource() || logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, logic->MQGTGRightSideSwitch && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->HasFireSource()))),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS] = Region("Gerudo Training Ground Torch Side Platforms", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -278,10 +278,10 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
EVENT_ACCESS(GTGPlatformSilverRupees, ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, []{return logic->MQGTGRightSideSwitch && ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT));}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT, logic->MQGTGRightSideSwitch && ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT))),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_UNDERWATER] = Region("Gerudo Training Ground MQ Underwater", SCENE_GERUDO_TRAINING_GROUND, {}, {
|
||||
|
@ -290,7 +290,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, true),
|
||||
});
|
||||
|
||||
|
||||
|
@ -303,11 +303,11 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_FIRE_ARROWS);}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, []{return logic->CanUse(RG_FIRE_ARROWS);}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT) || (logic->GTGPlatformSilverRupees && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, logic->CanUse(RG_FIRE_ARROWS)),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM, logic->CanUse(RG_FIRE_ARROWS)),
|
||||
});
|
||||
|
||||
areaTable[RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM] = Region("Gerudo Training Ground MQ Dinolfos Room", SCENE_GERUDO_TRAINING_GROUND, {
|
||||
|
@ -322,7 +322,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)));});}),
|
||||
ENTRANCE(RR_GERUDO_TRAINING_GROUND_MQ_TORCH_SIDE_PLATFORMS, Here(RR_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_ROOM, []{return logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD) || logic->CanUse(RG_MEGATON_HAMMER) || logic->CanUse(RG_FAIRY_BOW) || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT)));})),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_ZF_LEDGE, []{return true;}),
|
||||
ENTRANCE(RR_ICE_CAVERN_BEGINNING, ctx->GetDungeon(ICE_CAVERN)->IsVanilla()),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_BEGINNING, ctx->GetDungeon(ICE_CAVERN)->IsMQ() && logic->CanUseProjectile()),
|
||||
ENTRANCE(RR_ZF_LEDGE, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -21,8 +21,8 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_ICE_CAVERN_MAIN, []{return Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);});}),
|
||||
ENTRANCE(RR_ICE_CAVERN_ENTRYWAY, true),
|
||||
ENTRANCE(RR_ICE_CAVERN_MAIN, Here(RR_ICE_CAVERN_BEGINNING, []{return logic->CanKillEnemy(RE_FREEZARD, ED_CLOSE, true, 4);})),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MAIN] = Region("Ice Cavern", SCENE_ICE_CAVERN, {
|
||||
|
@ -64,9 +64,9 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_ICE_CAVERN_MQ_ENTRANCE_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_ICE_CAVERN_ENTRYWAY, true),
|
||||
//It is in logic to use a pot to hit the toggle switch here.
|
||||
Entrance(RR_ICE_CAVERN_MQ_HUB, []{return true;}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_HUB, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_HUB] = Region("Ice Cavern MQ Hub", SCENE_ICE_CAVERN, {
|
||||
|
@ -84,10 +84,10 @@ void RegionTable_Init_IceCavern() {
|
|||
//Exits
|
||||
//the switch for the glass blocking the entrance is linked to the switch that controls the glass around the skulltulla in RR_ICE_CAVERN_MQ_SCARECROW_ROOM
|
||||
//if you clear the ice, you can hit it with a pot from here.
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->BlueFire();}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_MAP_ROOM, []{return Here(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->CanKillEnemy(RE_WHITE_WOLFOS) && logic->CanKillEnemy(RE_FREEZARD);});}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_COMPASS_ROOM, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, []{return logic->BlueFire();}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_BEGINNING, logic->BlueFire()),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_MAP_ROOM, Here(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->CanKillEnemy(RE_WHITE_WOLFOS) && logic->CanKillEnemy(RE_FREEZARD);})),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_COMPASS_ROOM, logic->IsAdult && logic->BlueFire()),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, logic->BlueFire()),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_MAP_ROOM] = Region("Ice Cavern MQ Map Room", SCENE_ICE_CAVERN, {
|
||||
|
@ -105,9 +105,9 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_ICE_CAVERN_MQ_GS_SCARECROW, logic->CanUse(RG_SCARECROW) || (logic->IsAdult && (logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_ICE_MQ_SCARECROW)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_HUB, []{return logic->BlueFire();}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_HUB, logic->BlueFire()),
|
||||
//Assumes RR_ICE_CAVERN_MQ_HUB access for a pot if using blue fire
|
||||
Entrance(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, []{return logic->IsAdult && logic->BlueFire();}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, logic->IsAdult && logic->BlueFire()),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_WEST_CORRIDOR] = Region("Ice Cavern MQ West Corridor", SCENE_ICE_CAVERN, {}, {
|
||||
|
@ -116,8 +116,8 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, []{return logic->BlueFire();}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_SCARECROW_ROOM, logic->BlueFire()),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_STALFOS_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_STALFOS_ROOM] = Region("Ice Cavern MQ Stalfos Room", SCENE_ICE_CAVERN, {}, {
|
||||
|
@ -126,8 +126,8 @@ void RegionTable_Init_IceCavern() {
|
|||
LOCATION(RC_SHEIK_IN_ICE_CAVERN, logic->CanKillEnemy(RE_STALFOS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, []{return Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
Entrance(RR_ICE_CAVERN_MQ_BEGINNING, []{return logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_WEST_CORRIDOR, Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);})),
|
||||
ENTRANCE(RR_ICE_CAVERN_MQ_BEGINNING, logic->CanUse(RG_IRON_BOOTS) && Here(RR_ICE_CAVERN_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_ICE_CAVERN_MQ_COMPASS_ROOM] = Region("Ice Cavern MQ Compass Room", SCENE_ICE_CAVERN, {
|
||||
|
|
|
@ -9,17 +9,17 @@ 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_ZORAS_FOUNTAIN, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BEGINNING, ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_BEGINNING, ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ()),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BEGINNING] = Region("Jabu Jabus Belly Beginning", SCENE_JABU_JABU, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_ENTRYWAY, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, logic->CanUseProjectile()),
|
||||
});
|
||||
|
||||
//Combines Lift room middle and lower, 1F holes room, the forked corridor, and it's side rooms
|
||||
|
@ -36,13 +36,13 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->JabuWestTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, []{return logic->JabuWestTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, []{return logic->JabuEastTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->JabuNorthTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, []{return logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BEGINNING, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_B1_NORTH, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_COMPASS_ROOM, logic->JabuWestTentacle),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BLUE_TENTACLE, logic->JabuWestTentacle),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_GREEN_TENTACLE, logic->JabuEastTentacle),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, logic->JabuNorthTentacle),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM, logic->LoweredJabuPath || (ctx->GetTrickOption(RT_JABU_BOSS_HOVER) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
//contains B1 of hole room (aside from the ledge leading to big octo), 2 octorock room and north water switch room
|
||||
|
@ -62,10 +62,10 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, (logic->CanBreakPots() && (logic->CanUse(RG_BOOMERANG) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanKillEnemy(RE_OCTOROK, ED_BOOMERANG, false))))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, true),
|
||||
//there's tricks for getting here with bunny-jumps or just side-hops
|
||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE] = Region("Jabu Jabus Belly Water Switch Room Ledge", SCENE_JABU_JABU, {
|
||||
|
@ -80,8 +80,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_BASEMENT_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_B1_NORTH, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_SOUTH] = Region("Jabu Jabus Belly Water Switch Room South", SCENE_JABU_JABU, {}, {
|
||||
|
@ -89,9 +89,9 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->CanUseProjectile();}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_B1_NORTH, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_WATER_SWITCH_ROOM_LEDGE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, logic->CanUseProjectile()),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_COMPASS_ROOM] = Region("Jabu Jabus Belly Compass Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -100,7 +100,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_COMPASS_CHEST, logic->CanKillEnemy(RE_SHABOM)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return Here(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->CanKillEnemy(RE_SHABOM);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, Here(RR_JABU_JABUS_BELLY_COMPASS_ROOM, []{return logic->CanKillEnemy(RE_SHABOM);})),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BLUE_TENTACLE] = Region("Jabu Jabus Belly Blue Tentacle", SCENE_JABU_JABU, {
|
||||
|
@ -108,7 +108,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
EVENT_ACCESS(JabuEastTentacle, logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuEastTentacle;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, logic->JabuEastTentacle),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_GREEN_TENTACLE] = Region("Jabu Jabus Belly Green Tentacle", SCENE_JABU_JABU, {
|
||||
|
@ -117,7 +117,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
}, {}, {
|
||||
//Exits
|
||||
//implied logic->CanKillEnemy(RE_BARI)
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return logic->JabuNorthTentacle;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, logic->JabuNorthTentacle),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE] = Region("Jabu Jabus Belly Bigocto Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -127,8 +127,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
//You can get the LOWER skull token from here as aduly with hovers backwalk and a backflip, but it's trickworthy and not relevant unless you can beat tentacles without rang
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_B1_NORTH, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, []{return logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_B1_NORTH, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO, logic->JabuRutoIn1F && Here(RR_JABU_JABUS_BELLY_BIGOCTO_LEDGE, []{return logic->CanKillEnemy(RE_BIG_OCTO);})),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_ABOVE_BIGOCTO] = Region("Jabu Jabus Belly Above Bigocto", SCENE_JABU_JABU, {
|
||||
|
@ -142,7 +142,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_LIFT_UPPER, []{return logic->CanUse(RG_BOOMERANG);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_LIFT_UPPER, logic->CanUse(RG_BOOMERANG)),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_LIFT_UPPER] = Region("Jabu Jabus Belly Lift Upper", SCENE_JABU_JABU, {
|
||||
|
@ -150,7 +150,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
EVENT_ACCESS(LoweredJabuPath, true),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_NEAR_BOSS_ROOM] = Region("Jabu Jabus Belly Near Boss Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -158,8 +158,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MAIN, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))));}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MAIN, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, logic->CanUse(RG_BOOMERANG) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_RANGED) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_FAIRY_SLINGSHOT))) || (ctx->GetTrickOption(RT_JABU_NEAR_BOSS_EXPLOSIVES) && (logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_BOMB_BAG))))),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -179,8 +179,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_FIRST_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return Here(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_ENTRYWAY, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, Here(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);})),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM] = Region("Jabu Jabus Belly MQ Lift Room", SCENE_JABU_JABU, {
|
||||
|
@ -196,10 +196,10 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, logic->CanUse(RG_IRON_BOOTS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE))));}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->MQJabuHolesRoomDoor;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return logic->LoweredJabuPath || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->MQJabuLiftRoomCow);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_BEGINNING, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_UNDERWATER_ALCOVE, logic->HasItem(RG_SILVER_SCALE) || (logic->HasItem(RG_BRONZE_SCALE) && ((logic->IsChild || logic->CanUse(RG_IRON_BOOTS) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE))))),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, logic->MQJabuHolesRoomDoor),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, logic->LoweredJabuPath || logic->CanUse(RG_HOVER_BOOTS) || (logic->CanUse(RG_HOOKSHOT) && logic->MQJabuLiftRoomCow)),
|
||||
//If opening RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM by lowering the geyser as 1 age is to let the other through is relevant, it needs an eventAccess
|
||||
});
|
||||
|
||||
|
@ -217,7 +217,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(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);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, logic->HasItem(RG_BRONZE_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM] = Region("Jabu Jabus Belly MQ Holes Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -231,11 +231,11 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_BASEMENT_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, []{return logic->JabuNorthTentacle;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->JabuWestTentacle && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, logic->CanUse(RG_BOOMERANG) && logic->HasExplosives() && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);})),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM, logic->JabuNorthTentacle),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, logic->JabuWestTentacle && Here(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanKillEnemy(RE_BIG_OCTO);}) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM] = Region("Jabu Jabus Belly MQ Water Switch Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -250,8 +250,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
}, {
|
||||
//Exits
|
||||
//without swim, jump from rang chest to the other side
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_BEGINNING, []{return Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_BEGINNING, Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, (logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)) && Here(RR_JABU_JABUS_BELLY_MQ_WATER_SWITCH_ROOM, []{return logic->CanKillEnemy(RE_LIZALFOS);})),
|
||||
});
|
||||
|
||||
//Includes Like Like room
|
||||
|
@ -269,9 +269,9 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, logic->CanUse(RG_BOOMERANG)),
|
||||
//If some mode lets an age use sticks and not sling, and other use sling and not sticks, this needs changing
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG);}) && (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanUse(RG_STICKS);}) || Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->HasFireSource();}));}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_BOOMERANG);}) && (Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanUse(RG_STICKS);}) || Here(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return logic->HasFireSource();}))),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS] = Region("Jabu Jabus Belly MQ West Forked Rooms", SCENE_JABU_JABU, {
|
||||
|
@ -282,7 +282,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, Here(RR_JABU_JABUS_BELLY_MQ_WEST_FORKED_ROOMS, []{return logic->HasExplosives();}) && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_FORKED_CORRIDOR, true),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_INVISIBLE_KEESE_ROOM] = Region("Jabu Jabus Belly MQ Invisible Keese Room", SCENE_JABU_JABU, {}, {
|
||||
|
@ -302,7 +302,7 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
&& ((logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && logic->CanUse(RG_IRON_BOOTS)))))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return (logic->JabuNorthTentacle || logic->TakeDamage()) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, (logic->JabuNorthTentacle || logic->TakeDamage()) && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_PAST_OCTO] = Region("Jabu Jabus Belly MQ Past Octo", SCENE_JABU_JABU, {
|
||||
|
@ -319,9 +319,9 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_JIGGLIES_SMALL_CRATE_2, logic->CanUse(RG_FAIRY_SLINGSHOT) && logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT);}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_FAIRY_SLINGSHOT)),
|
||||
//you take both fall damage and tentacle damage, unless the tentacle is down. need better damage logic
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, logic->TakeDamage() && Here(RR_JABU_JABUS_BELLY_MQ_PAST_OCTO, []{return logic->CanKillEnemy(RE_BIG_OCTO);})),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE] = Region("Jabu Jabus Belly MQ Lift Room East Ledge", SCENE_JABU_JABU, {}, {
|
||||
|
@ -329,8 +329,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, logic->MQJabuLiftRoomCow),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return logic->JabuNorthTentacle;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, logic->JabuNorthTentacle),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_MQ_EAST_ROOM] = Region("Jabu Jabus Belly MQ Boss Region", SCENE_JABU_JABU, {
|
||||
|
@ -345,8 +345,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, []{return true;}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, []{return Here(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);});}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_LIFT_ROOM_EAST_LEDGE, true),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY, Here(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, []{return logic->CanUse(RG_FAIRY_SLINGSHOT);})),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -354,13 +354,13 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
// Boss Room
|
||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_ENTRYWAY] = Region("Jabu Jabus Belly Boss Entryway", SCENE_JABU_JABU, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_JABU_JABUS_BELLY_BOSS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_BOSS_ROOM, true),
|
||||
});
|
||||
|
||||
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, ctx->GetDungeon(JABU_JABUS_BELLY)->IsVanilla()),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_MQ_EAST_ROOM, ctx->GetDungeon(JABU_JABUS_BELLY)->IsMQ()),
|
||||
});
|
||||
|
||||
areaTable[RR_JABU_JABUS_BELLY_BOSS_ROOM] = Region("Jabu Jabus Belly Boss Room", SCENE_JABU_JABU_BOSS, {
|
||||
|
@ -378,8 +378,8 @@ void RegionTable_Init_JabuJabusBelly() {
|
|||
LOCATION(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, false),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, logic->JabuJabusBellyClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_GRAVEYARD_WARP_PAD_REGION, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BEGINNING, 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, ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_GRAVEYARD_WARP_PAD_REGION, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -33,8 +33,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_FIRST_BEAMOS, []{return logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_FIRST_BEAMOS, logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_FIRST_BEAMOS] = Region("Shadow Temple First Beamos", SCENE_SHADOW_TEMPLE, {
|
||||
|
@ -48,8 +48,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return false;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_HUGE_PIT, logic->HasExplosives() && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BEYOND_BOAT, false),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_HUGE_PIT] = Region("Shadow Temple Huge Pit", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -74,7 +74,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(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);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_WIND_TUNNEL, ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_WIND_TUNNEL] = Region("Shadow Temple Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -90,7 +90,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_BEYOND_BOAT, []{return logic->CanJumpslashExceptHammer() && logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BEYOND_BOAT, logic->CanJumpslashExceptHammer() && logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_SHADOW_TEMPLE, 4, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_BEYOND_BOAT] = Region("Shadow Temple Beyond Boat", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -112,7 +112,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->CanUse(RG_SONG_OF_TIME) || (logic->CanUse(RG_DISTANT_SCARECROW) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5) && logic->CanUse(RG_HOVER_BOOTS);})
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DISTANT_SCARECROW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5))) && logic->SmallKeys(RR_SHADOW_TEMPLE, 5) && logic->CanUse(RG_HOVER_BOOTS))
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -122,8 +122,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
//RANDOTODO doublecheck CanAttack when rewriting, as I assumed it only checked adult due to the entrance
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_BEGINNING] = Region("Shadow Temple MQ Beginning", SCENE_SHADOW_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", SCENE_SHADOW_TEMPLE, {},
|
||||
|
@ -136,9 +136,9 @@ void RegionTable_Init_ShadowTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()));}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->HasExplosives();}) && logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()))),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_DEAD_HAND_AREA, Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->HasExplosives();}) && logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
});
|
||||
|
||||
//Assumes we're in the "main" area and needed lens to enter. logic will need changes if a void warp puts us somewhere weird
|
||||
|
@ -153,7 +153,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, true),
|
||||
});
|
||||
|
||||
//also includes the B2 gibdo room
|
||||
|
@ -164,8 +164,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, logic->HasExplosives() && logic->SmallKeys(RR_SHADOW_TEMPLE, 2)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -173,8 +173,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));});}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));})),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH] = Region("Shadow Temple MQ Shortcut Path", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -182,16 +182,16 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_DOCK, []{return logic->ShadowShortcutBlock;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, logic->CanPassEnemy(RE_BIG_SKULLTULA)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_DOCK, logic->ShadowShortcutBlock),
|
||||
//WARNING if there's any way past here to ship without already reaching the other side the key logic in this dungeon becomes Quantum
|
||||
});
|
||||
|
||||
//Room exists for if it's ever possible to go backwards or void warp into the middle of shadow
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_B2_TO_B3_CORRIDOR] = Region("Shadow Temple MQ B2 to B3 Corridor", SCENE_SHADOW_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, logic->SmallKeys(RR_SHADOW_TEMPLE, 2)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, true),
|
||||
//bunnyhovers + lens lets you go from the very top of upper pit to the stationary invisible platform below quite easily
|
||||
});
|
||||
|
||||
|
@ -200,8 +200,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, []{return ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, (logic->HasFireSource() && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))) || ctx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM, ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_ROOM] = Region("Shadow Temple MQ Invisible Blades Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -217,7 +217,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Region("Shadow Temple MQ Lower Huge Pit", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -225,8 +225,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, logic->CanUse(RG_LONGSHOT)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->CanJumpslash() || logic->HasExplosives();});}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->CanJumpslash() || logic->HasExplosives();})),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM] = Region("Shadow Temple MQ Stone Umbrella Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -241,9 +241,9 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, logic->CanUse(RG_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return Here(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->CanHitSwitch();});}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, Here(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->CanHitSwitch();})),
|
||||
//Assuming the known setup for RT_SHADOW_UMBRELLA, probably possible without sword + shield
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA, []{return logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanStandingShield() && logic->CanUse(RG_MASTER_SWORD)));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA, logic->IsAdult && (logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanStandingShield() && logic->CanUse(RG_MASTER_SWORD)))),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_UPPER_STONE_UMBRELLA] = Region("Shadow Temple MQ Upper Stone Umbrella", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -254,7 +254,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, true),
|
||||
});
|
||||
|
||||
//while the spikes here are annoying, they don't really stop you doing anything, so I'll assume either lens trick, lens to see them, or taking damage from them. Not hovers though as a new player won't see the threat without lens to react properly
|
||||
|
@ -272,9 +272,9 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, logic->MQShadowFloorSpikeRupees),
|
||||
//We need to assume we can get here with or without the glass platforms
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && (logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && logic->CanUse(RG_HOOKSHOT) && (logic->MQShadowFloorSpikeRupees || Here(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->CanKillEnemy(RE_REDEAD);})))) && (logic->CanJumpslash() || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM] = Region("Shadow Temple MQ Stalfos Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -282,14 +282,14 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);});}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, Here(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL] = Region("Shadow Temple MQ Wind Tunnel", SCENE_SHADOW_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_FLOOR_SPIKES_ROOM, logic->SmallKeys(RR_SHADOW_TEMPLE, 4) && logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT))),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_WIND_HINT_ROOM] = Region("Shadow Temple MQ Wind Hint Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -299,7 +299,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM] = Region("Shadow Temple MQ B4 Gibdo Room", SCENE_SHADOW_TEMPLE, {
|
||||
|
@ -315,8 +315,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//child can make it using the wind strat
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, []{return (ctx->GetTrickOption(RT_SHADOW_MQ_WINDY_WALKWAY)) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_DOCK, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_WIND_TUNNEL, (ctx->GetTrickOption(RT_SHADOW_MQ_WINDY_WALKWAY)) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_DOCK, logic->SmallKeys(RR_SHADOW_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_DOCK] = Region("Shadow Temple MQ Dock", SCENE_SHADOW_TEMPLE, {
|
||||
|
@ -328,10 +328,10 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, logic->CanUse(RG_DISTANT_SCARECROW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, []{return logic->ShadowShortcutBlock;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_SHORTCUT_PATH, logic->ShadowShortcutBlock),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_B4_GIBDO_ROOM, logic->SmallKeys(RR_SHADOW_TEMPLE, 5)),
|
||||
//funnily enough, the wheel jump seems to be in logic as there's no strength requirement in N64
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, (logic->IsAdult || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT] = Region("Shadow Temple MQ Beyond Boat", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -343,7 +343,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return Here(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return logic->CanUse(RG_FAIRY_BOW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5));});}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, Here(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return logic->CanUse(RG_FAIRY_BOW) || (ctx->GetTrickOption(RT_SHADOW_STATUE) && logic->CanUse(RG_BOMBCHU_5));})),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM] = Region("Shadow Temple MQ Across Chasm", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -356,11 +356,11 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanDetonateUprightBombFlower();}) && logic->IsAdult;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanDetonateUprightBombFlower();}) && logic->IsAdult),
|
||||
//assumes RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT by previous access. If backwards shadow ever exists remember that child cannot jump onto the statue from this side and make an event for the switch
|
||||
//Lens isn't needed to reach it but is needed to navigate the next room
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanHitEyeTargets() && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_LONGSHOT);});}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, Here(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanHitEyeTargets() && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_LONGSHOT);})),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_BOSS_DOOR, logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_BOSS_DOOR] = Region("Shadow Temple MQ Boss Door", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -369,8 +369,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_BOMB_THROW) || logic->CanUse(RG_MEGATON_HAMMER)) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, []{return logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
Entrance(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_ACROSS_CHASM, logic->CanUse(RG_HOVER_BOOTS) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
//Assumes lens is checked on entry
|
||||
|
@ -383,8 +383,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, []{return true;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 6);}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, true),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM, logic->SmallKeys(RR_SHADOW_TEMPLE, 6)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_MQ_SPIKE_WALLS_ROOM] = Region("Shadow Temple MQ Spike Walls Room", SCENE_SHADOW_TEMPLE, {}, {
|
||||
|
@ -394,7 +394,7 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, []{return logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_INVISIBLE_MAZE, logic->SmallKeys(RR_SHADOW_TEMPLE, 6) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH))),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -402,9 +402,9 @@ 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, ctx->GetDungeon(SHADOW_TEMPLE)->IsVanilla() && false),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_MQ_BEYOND_BOAT, ctx->GetDungeon(SHADOW_TEMPLE)->IsMQ() && false),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_BOSS_ROOM, logic->HasItem(RG_SHADOW_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_SHADOW_TEMPLE_BOSS_ROOM] = Region("Shadow Temple Boss Room", SCENE_SHADOW_TEMPLE_BOSS, {
|
||||
|
@ -416,8 +416,8 @@ void RegionTable_Init_ShadowTemple() {
|
|||
LOCATION(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_SHADOW_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_GRAVEYARD_WARP_PAD_REGION, logic->ShadowTempleClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_DESERT_COLOSSUS_OUTSIDE_TEMPLE, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_LOBBY, ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_LOBBY, ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -22,9 +22,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_LOBBY_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_CHILD, []{return logic->IsChild;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_EARLY_ADULT, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CHILD, logic->IsChild),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_EARLY_ADULT, logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_CHILD] = Region("Child Spirit Temple", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -43,7 +43,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CHILD_CLIMB, logic->SmallKeys(RR_SPIRIT_TEMPLE, 1)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_CHILD_CLIMB] = Region("Child Spirit Temple Climb", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -57,7 +57,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_EARLY_ADULT] = Region("Early Adult Spirit Temple", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -70,7 +70,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, logic->SmallKeys(RR_SPIRIT_TEMPLE, 1)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER] = Region("Spirit Temple Central Chamber", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -102,11 +102,11 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, logic->CanBreakPots() && logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_OUTDOOR_HANDS, []{return logic->CanJumpslashExceptHammer() || logic->HasExplosives();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_OUTDOOR_HANDS, logic->CanJumpslashExceptHammer() || logic->HasExplosives()),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR, logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CHILD_CLIMB, true),
|
||||
// RT_SPIRIT_PLATFORM_HOOKSHOT is currently disabled
|
||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return ctx->GetTrickOption(RT_SPIRIT_PLATFORM_HOOKSHOT) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, ctx->GetTrickOption(RT_SPIRIT_PLATFORM_HOOKSHOT) && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_OUTDOOR_HANDS] = Region("Spirit Temple Outdoor Hands", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -115,7 +115,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return (logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (logic->CanUse(RG_SILVER_GAUNTLETS) && ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->HasExplosives()) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)));}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, (logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)) || (logic->CanUse(RG_SILVER_GAUNTLETS) && ((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->HasExplosives()) || logic->SmallKeys(RR_SPIRIT_TEMPLE, 5)))),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_CENTRAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Central Locked Door", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -127,7 +127,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(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))));}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR, logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && (ctx->GetTrickOption(RT_SPIRIT_WALL) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_BOMBCHU_5) || ((logic->CanUse(RG_BOMB_BAG) || logic->CanUse(RG_NUTS) || logic->CanUse(RG_DINS_FIRE)) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_MEGATON_HAMMER))))),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BEYOND_FINAL_LOCKED_DOOR] = Region("Spirit Temple Beyond Final Locked Door", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -138,13 +138,13 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, logic->CanUse(RG_HOOKSHOT)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, []{return logic->CanUse(RG_MIRROR_SHIELD) && logic->HasExplosives() && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD, logic->CanUse(RG_MIRROR_SHIELD) && logic->HasExplosives() && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_INSIDE_STATUE_HEAD] = Region("Spirit Temple Inside Statue Head", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -163,9 +163,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, []{return logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_WEST, logic->IsChild),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH, logic->CanUse(RG_LONGSHOT) && logic->CanUse(RG_BOMBCHU_5)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_1F_WEST] = Region("Spirit Temple MQ 1F West", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -180,16 +180,16 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, logic->CanHitEyeTargets()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);});}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);});}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, []{return logic->IsChild && logic->MQSpiritCrawlBoulder;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH, Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);})),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, Here(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->CanKillEnemy(RE_TORCH_SLUG);})),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, logic->IsChild && logic->MQSpiritCrawlBoulder),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_SOUTH] = Region("Spirit Temple MQ 1F Gibdo Room South", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets() && logic->CanKillEnemy(RE_GIBDO);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_WEST, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets()),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, logic->CanUse(RG_BOMBCHU_5) && logic->CanHitEyeTargets() && logic->CanKillEnemy(RE_GIBDO)),
|
||||
});
|
||||
|
||||
// Room to store the 2 pots in to handle glitch logic going backwards around the loop later
|
||||
|
@ -212,8 +212,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, logic->CanUse(RG_BOOMERANG) || logic->CanKillEnemy(RE_STALFOS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_GIBDO_ROOM_NORTH, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, Here(RR_SPIRIT_TEMPLE_MQ_TURNTABLE_ROOM, []{return logic->CanKillEnemy(RE_STALFOS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH] = Region("Spirit Temple MQ Map Room North", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -225,7 +225,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//Stalfos room blocks you in with fire until you kill the stalfos, which won't spawn from behind the fire
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_SOUTH] = Region("Spirit Temple MQ Map Room South", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -238,8 +238,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//The bridge is a temp flag, so not a way to cross south to north in logic
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_MAP_ROOM_NORTH, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_WEST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH] = Region("Spirit Temple MQ West 1F Rusted Switch", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -248,9 +248,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
EVENT_ACCESS(MQSpiritCrawlBoulder, logic->CanUse(RG_BOMBCHU_5) || (ctx->GetTrickOption(RT_RUSTED_SWITCHES) && logic->CanUse(RG_MEGATON_HAMMER))),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_WEST, []{return logic->IsChild && logic->MQSpiritCrawlBoulder;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_WEST, logic->IsChild && logic->MQSpiritCrawlBoulder),
|
||||
//This tracks possible child access, if adult has not entered STATUE_ROOM. Certain Child Access is checked for separately as 7 Keys
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, logic->SmallKeys(RR_SPIRIT_TEMPLE, 1)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE] = Region("Spirit Temple MQ Under Like Like", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -259,8 +259,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//This covers adult access only, as child arrives here from the other side of this door
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->CanHitSwitch();}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_WEST_1F_RUSTED_SWITCH, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, logic->CanHitSwitch()),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM] = Region("Spirit Temple MQ Broken Wall Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -272,9 +272,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
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)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, []{return logic->CanHitSwitch();}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_UNDER_LIKE_LIKE, logic->CanHitSwitch()),
|
||||
//This exit only governs child possible access, adult access starts on the other side so never checks this
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 2);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 2)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM] = Region("Spirit Temple MQ Statue Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -292,12 +292,12 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BROKEN_WALL_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
//We can use Here instead of Shared here because adult will never need to rely on child access to reach this room, and adult access is Certain
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return Here(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->HasFireSource() || (ctx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME));});}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->IsAdult || ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_SOT) || logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, Here(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->HasFireSource() || (ctx->GetTrickOption(RT_SPIRIT_MQ_FROZEN_EYE) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_SONG_OF_TIME));})),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, logic->IsAdult || ctx->GetTrickOption(RT_SPIRIT_MQ_SUN_BLOCK_SOT) || logic->CanUse(RG_SONG_OF_TIME)),
|
||||
//explicit adult check here is a precaution against possible child logic leaking, child with a hookshot can do this
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->IsAdult && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, logic->IsAdult && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM] = Region("Spirit Temple MQ Sun Block Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -309,15 +309,15 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->CanBreakPots();})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, true),
|
||||
//This door causes the Universes to merge as it requires 7 keys for both ages
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, logic->CanKillEnemy(RE_IRON_KNUCKLE)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND] = Region("Spirit Temple MQ Silver Gauntlets Hand", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -326,16 +326,16 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//If it is ever relevent for 1 age to spawn the mirror shield chest for the other can longshot across, it needs an eventAccess
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_WEST_IRON_KNUCKLE, true),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH] = Region("Spirit Temple MQ Block Room South", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_LOBBY, true),
|
||||
//The block here is unusual in that it is a permanent flag, but reset anyway as child. This is because there's a check that would be blocked off by pushing them otherwise
|
||||
//It may be worth considering making this always temp in future so adult doesn't have the same issue
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, []{return logic->IsChild ? logic->CanUse(RG_SILVER_GAUNTLETS) : Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanUse(RG_SILVER_GAUNTLETS);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH, logic->IsChild ? logic->CanUse(RG_SILVER_GAUNTLETS) : Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanUse(RG_SILVER_GAUNTLETS);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_NORTH] = Region("Spirit Temple MQ Block Room North", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -345,7 +345,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//if going to RR_SPIRIT_TEMPLE_MQ_BIG_BLOCK_ROOM_SOUTH from here is ever relevant, there needs to be an event to handle the block
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST] = Region("Spirit Temple MQ Statue Room East", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -354,19 +354,19 @@ void RegionTable_Init_SpiritTemple() {
|
|||
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
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, true),
|
||||
//!QUANTUM LOGIC!
|
||||
//We only need 4 keys, access to Shield hand and longshot to reach Gauntlets hand, as if we waste the 5th key we have given ourselves Gauntlets hand access through child climb
|
||||
//This exit handles that possibility as cleanly as possible without quantum logic, but will not survive glitch logic
|
||||
//logic->CanKillEnemy(RE_FLOORMASTER) is implied
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) &&
|
||||
logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) &&
|
||||
logic->CanJumpslash() &&
|
||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) &&
|
||||
logic->CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||
logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE));}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, logic->SmallKeys(RR_SPIRIT_TEMPLE, 4) &&
|
||||
logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) &&
|
||||
logic->CanJumpslash() &&
|
||||
(ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) &&
|
||||
logic->CanKillEnemy(RE_IRON_KNUCKLE) &&
|
||||
logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_MQ_LOWER_ADULT) && logic->CanUse(RG_DINS_FIRE))),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F] = Region("Spirit Temple MQ Three Suns Room 2F", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -375,14 +375,14 @@ void RegionTable_Init_SpiritTemple() {
|
|||
EVENT_ACCESS(MQSpirit3SunsEnemies, (logic->CanUse(RG_MIRROR_SHIELD) && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2)) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS))),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, []{return logic->MQSpirit3SunsEnemies;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, logic->MQSpirit3SunsEnemies),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F] = Region("Spirit Temple MQ Three Suns Room 1F", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, []{return logic->MQSpirit3SunsEnemies;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_1F_EAST, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_2F, logic->MQSpirit3SunsEnemies),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_EAST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_1F_EAST] = Region("Spirit Temple MQ 1F East", SCENE_SPIRIT_TEMPLE, {
|
||||
|
@ -395,10 +395,10 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 7);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_LOBBY, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_THREE_SUNS_ROOM_1F, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_LEEVER_ROOM] = Region("Spirit Temple MQ Leever Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -407,14 +407,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, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
});
|
||||
|
||||
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);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_1F_EAST, 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, 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)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_AFTER_SYMPHONY_ROOM] = Region("Spirit Temple MQ After Symphony Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -423,7 +423,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -432,9 +432,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(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);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 6);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_WALL, logic->SmallKeys(RR_SPIRIT_TEMPLE, 6)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM] = Region("Spirit Temple MQ SoT Sun Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -443,21 +443,21 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanJumpslash();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return (logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_MIRROR_SHIELD);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, logic->CanJumpslash()),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM, Here(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return (logic->IsAdult || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_MIRROR_SHIELD);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND] = Region("Spirit Temple MQ East Stairs to Hand", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return (ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_FLOORMASTER);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, (ctx->GetTrickOption(RT_LENS_SPIRIT_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_FLOORMASTER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE] = Region("Spirit Temple MQ East Iron Knuckle", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, []{return Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND, Here(RR_SPIRIT_TEMPLE_MQ_EAST_STAIRS_TO_HAND, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_MIRROR_SHIELD_HAND] = Region("Spirit Temple MQ Mirror Shield Hand", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -465,9 +465,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, []{return true;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SILVER_GAUNTLETS_HAND, logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_EAST_IRON_KNUCKLE, true),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_3F_GIBDO_ROOM] = Region("Spirit Temple MQ 3F Gibdo Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -475,7 +475,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_SOT_SUN_ROOM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_WALL] = Region("Spirit Temple MQ Big Wall", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -484,10 +484,10 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, true),
|
||||
//technically we only need to avoid them, but the sheer height and the moving walls makes getting to the top after only stunning them very difficult/impossible
|
||||
//The silver rupees are irrelevant without silver shuffle
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return logic->CanKillEnemy(RE_KEESE);}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, logic->CanKillEnemy(RE_KEESE)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL] = Region("Spirit Temple MQ 4F Central", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -496,9 +496,9 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//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_WALL, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM, logic->SmallKeys(RR_SPIRIT_TEMPLE, 7)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_NINE_CHAIRS_ROOM] = Region("Spirit Temple MQ Nine Chairs Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -508,7 +508,7 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM] = Region("Spirit Temple MQ Big Mirror Room", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -523,8 +523,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM, []{return logic->CanUse(RG_MEGATON_HAMMER);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE] = Region("Spirit Temple MQ Big Mirror Cave", SCENE_SPIRIT_TEMPLE, {}, {
|
||||
|
@ -533,14 +533,14 @@ void RegionTable_Init_SpiritTemple() {
|
|||
}, {
|
||||
//Exits
|
||||
//If it's ever relevant to longshot into head from lobby, this needs to be an event access
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);}) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);});}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);}) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, Here(RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CAVE, []{return logic->CanUse(RG_MIRROR_SHIELD);})),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD] = Region("Spirit Temple MQ Inside Statue Head", SCENE_SPIRIT_TEMPLE, {}, {}, {
|
||||
// Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return true;}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_LOBBY, true),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -548,9 +548,9 @@ 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, ctx->GetDungeon(SPIRIT_TEMPLE)->IsVanilla() && false),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_MQ_INSIDE_STATUE_HEAD, ctx->GetDungeon(SPIRIT_TEMPLE)->IsMQ() && false),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BOSS_ROOM, logic->HasItem(RG_SPIRIT_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_SPIRIT_TEMPLE_BOSS_ROOM] = Region("Spirit Temple Boss Room", SCENE_SPIRIT_TEMPLE_BOSS, {
|
||||
|
@ -562,8 +562,8 @@ void RegionTable_Init_SpiritTemple() {
|
|||
LOCATION(RC_TWINROVA, logic->SpiritTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return logic->SpiritTempleClear;}, false),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, logic->SpiritTempleClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -9,9 +9,9 @@ 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_LH_FROM_WATER_TEMPLE, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsVanilla()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->HasItem(RG_BRONZE_SCALE) && ctx->GetDungeon(WATER_TEMPLE)->IsMQ()),
|
||||
ENTRANCE(RR_LH_FROM_WATER_TEMPLE, true),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
@ -23,19 +23,19 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && (logic->CanUse(RG_IRON_BOOTS) || (logic->CanUse(RG_LONGSHOT) && ctx->GetTrickOption(RT_WATER_LONGSHOT_TORCH))));}),
|
||||
Entrance(RR_WATER_TEMPLE_NORTH_LOWER, []{return logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_WATER_TEMPLE_SOUTH_LOWER, []{return logic->CanWaterTempleLowFromHigh && logic->HasExplosives() && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)) && (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC));}),
|
||||
Entrance(RR_WATER_TEMPLE_WEST_LOWER, []{return logic->CanWaterTempleLowFromHigh && logic->HasItem(RG_GORONS_BRACELET) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)) && (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC));}),
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return logic->CanWaterTempleLowFromHigh && logic->SmallKeys(RR_WATER_TEMPLE, 5);}),
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, []{return (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}),
|
||||
Entrance(RR_WATER_TEMPLE_EAST_MIDDLE, []{return (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_WEST_MIDDLE, []{return logic->CanWaterTempleMiddle;}),
|
||||
Entrance(RR_WATER_TEMPLE_HIGH_WATER, []{return logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DAMAGE_BOOST) && logic->CanUse(RG_BOMB_BAG) && logic->TakeDamage()));}),
|
||||
Entrance(RR_WATER_TEMPLE_BLOCK_CORRIDOR, []{return (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_WATER_CENTRAL_BOW) && (logic->IsAdult || logic->CanWaterTempleMiddle)));}),
|
||||
Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, []{return logic->CanWaterTempleHigh && logic->SmallKeys(RR_WATER_TEMPLE, 4);}),
|
||||
Entrance(RR_WATER_TEMPLE_PRE_BOSS_ROOM, []{return (logic->CanWaterTempleHigh && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_EAST_LOWER, logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && (logic->CanUse(RG_IRON_BOOTS) || (logic->CanUse(RG_LONGSHOT) && ctx->GetTrickOption(RT_WATER_LONGSHOT_TORCH))))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_NORTH_LOWER, logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_SOUTH_LOWER, logic->CanWaterTempleLowFromHigh && logic->HasExplosives() && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)) && (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_WEST_LOWER, logic->CanWaterTempleLowFromHigh && logic->HasItem(RG_GORONS_BRACELET) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)) && (ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, logic->CanWaterTempleLowFromHigh && logic->SmallKeys(RR_WATER_TEMPLE, 5)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_EAST_MIDDLE, (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_WEST_MIDDLE, logic->CanWaterTempleMiddle),
|
||||
ENTRANCE(RR_WATER_TEMPLE_HIGH_WATER, logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DAMAGE_BOOST) && logic->CanUse(RG_BOMB_BAG) && logic->TakeDamage()))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BLOCK_CORRIDOR, (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle) && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_WATER_CENTRAL_BOW) && (logic->IsAdult || logic->CanWaterTempleMiddle)))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, logic->CanWaterTempleHigh && logic->SmallKeys(RR_WATER_TEMPLE, 4)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_PRE_BOSS_ROOM, (logic->CanWaterTempleHigh && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_EAST_LOWER] = Region("Water Temple East Lower", SCENE_WATER_TEMPLE, {
|
||||
|
@ -47,10 +47,10 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_TORCH_POT_2, logic->CanBreakPots() && (logic->CanWaterTempleLowFromHigh || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_WATER_TEMPLE_MAP_ROOM, []{return logic->CanWaterTempleHigh;}),
|
||||
Entrance(RR_WATER_TEMPLE_CRACKED_WALL, []{return logic->CanWaterTempleMiddle || (logic->CanWaterTempleHigh && logic->CanWaterTempleLowFromHigh && ((logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_WATER_CRACKED_WALL_HOVERS)) || ctx->GetTrickOption(RT_WATER_CRACKED_WALL)));}),
|
||||
Entrance(RR_WATER_TEMPLE_TORCH_ROOM, []{return logic->CanWaterTempleLowFromHigh && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanWaterTempleLowFromHigh || ((ctx->GetTrickOption(RT_FEWER_TUNIC_REQUIREMENTS) || logic->CanUse(RG_ZORA_TUNIC)) && logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MAP_ROOM, logic->CanWaterTempleHigh),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CRACKED_WALL, logic->CanWaterTempleMiddle || (logic->CanWaterTempleHigh && logic->CanWaterTempleLowFromHigh && ((logic->CanUse(RG_HOVER_BOOTS) && ctx->GetTrickOption(RT_WATER_CRACKED_WALL_HOVERS)) || ctx->GetTrickOption(RT_WATER_CRACKED_WALL)))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_TORCH_ROOM, logic->CanWaterTempleLowFromHigh && (logic->HasFireSourceWithTorch() || logic->CanUse(RG_FAIRY_BOW))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MAP_ROOM] = Region("Water Temple Map Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -58,7 +58,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MAP_CHEST, logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_EAST_LOWER, logic->CanKillEnemy(RE_SPIKE, ED_CLOSE, true, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_CRACKED_WALL] = Region("Water Temple Cracked Wall", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -66,7 +66,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_CRACKED_WALL_CHEST, logic->HasExplosives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_EAST_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_TORCH_ROOM] = Region("Water Temple Torch Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -74,13 +74,13 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_TORCHES_CHEST, logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_EAST_LOWER, []{return logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_EAST_LOWER, logic->CanKillEnemy(RE_SHELL_BLADE, ED_CLOSE, true, 3)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_NORTH_LOWER] = Region("Water Temple North Lower", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return (logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS))) && logic->SmallKeys(RR_WATER_TEMPLE, 4);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_LOWER, (logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS))) && logic->SmallKeys(RR_WATER_TEMPLE, 4)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BOULDERS_LOWER] = Region("Water Temple Boulders Lower", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -88,9 +88,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, logic->CanUse(RG_LONGSHOT) || Here(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return (logic->IsAdult && logic->HookshotOrBoomerang()) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT));})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_NORTH_LOWER, []{return logic->SmallKeys(RR_WATER_TEMPLE, 4);}),
|
||||
Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP))) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_IRON_BOOTS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_NORTH_LOWER, logic->SmallKeys(RR_WATER_TEMPLE, 4)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BLOCK_ROOM, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_UPPER, (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP))) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_IRON_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BLOCK_ROOM] = Region("Water Temple Block Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -99,21 +99,21 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return (logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_JETS_ROOM, []{return (logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_LOWER, (logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_JETS_ROOM, (logic->HasItem(RG_GORONS_BRACELET) && logic->HasExplosives()) || (logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_JETS_ROOM] = Region("Water Temple Jets Room", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_BLOCK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BLOCK_ROOM, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_UPPER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BOULDERS_UPPER] = Region("Water Temple Boulders Upper", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_LOWER, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_JETS_ROOM, []{return logic->IsAdult;}),
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_KEY_ROOM, []{return (logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE))) && logic->SmallKeys(RR_WATER_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_LOWER, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_JETS_ROOM, logic->IsAdult),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOSS_KEY_ROOM, (logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE))) && logic->SmallKeys(RR_WATER_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BOSS_KEY_ROOM] = Region("Water Temple Boss Key Room", SCENE_WATER_TEMPLE, {
|
||||
|
@ -126,7 +126,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_BOSS_KEY_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_BOULDERS_UPPER, []{return (logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE)) || logic->IsChild || logic->HasItem(RG_SILVER_SCALE)) && logic->SmallKeys(RR_WATER_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOULDERS_UPPER, (logic->CanUse(RG_IRON_BOOTS) || (logic->IsAdult && ctx->GetTrickOption(RT_WATER_BK_JUMP_DIVE)) || logic->IsChild || logic->HasItem(RG_SILVER_SCALE)) && logic->SmallKeys(RR_WATER_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_SOUTH_LOWER] = Region("Water Temple South Lower", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -138,13 +138,13 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_BEHIND_GATE_POT_4, logic->CanJumpslash() && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanUse(RG_IRON_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_WEST_LOWER] = Region("Water Temple West Lower", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_GORONS_BRACELET);}),
|
||||
Entrance(RR_WATER_TEMPLE_DRAGON_ROOM, []{return logic->CanJumpslashExceptHammer() || logic->CanUseProjectile();}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_GORONS_BRACELET)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DRAGON_ROOM, logic->CanJumpslashExceptHammer() || logic->CanUseProjectile()),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_DRAGON_ROOM] = Region("Water Temple Dragon Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -153,14 +153,14 @@ void RegionTable_Init_WaterTemple() {
|
|||
Here(RR_WATER_TEMPLE_RIVER, []{return logic->IsAdult && logic->CanUse(RG_FAIRY_BOW) && ((ctx->GetTrickOption(RT_WATER_ADULT_DRAGON) && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || ctx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE));})),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_WEST_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_WEST_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER] = Region("Water Temple Central Pillar Lower", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->SmallKeys(RR_WATER_TEMPLE, 5);}),
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, []{return logic->CanWaterTempleMiddle && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->SmallKeys(RR_WATER_TEMPLE, 5)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT, logic->CanWaterTempleMiddle && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_UPPER] = Region("Water Temple Central Pillar Upper", SCENE_WATER_TEMPLE, {
|
||||
|
@ -171,8 +171,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_GS_CENTRAL_PILLAR, logic->CanUse(RG_LONGSHOT) || (((ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE) || logic->SmallKeys(RR_WATER_TEMPLE, 5))) || (ctx->GetTrickOption(RT_WATER_IRONS_CENTRAL_GS) && logic->CanUse(RG_IRON_BOOTS) && ((logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_FAIRY_BOW)) || (logic->CanUse(RG_DINS_FIRE))))) && logic->CanWaterTempleHigh && logic->HookshotOrBoomerang())),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_CENTRAL_PILLAR_BASEMENT] = Region("Water Temple Central Pillar Basement", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -180,7 +180,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_CENTRAL_PILLAR_LOWER, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_EAST_MIDDLE] = Region("Water Temple East Middle", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -191,13 +191,13 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanUse(RG_IRON_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_WEST_MIDDLE] = Region("Water Temple West Middle", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_HIGH_WATER, []{return logic->CanUseProjectile();}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_HIGH_WATER, logic->CanUseProjectile()),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_HIGH_WATER] = Region("Water Temple High Water", SCENE_WATER_TEMPLE, {
|
||||
|
@ -205,7 +205,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
EVENT_ACCESS(CanWaterTempleHigh, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BLOCK_CORRIDOR] = Region("Water Temple Block Corridor", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -215,7 +215,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, logic->CanBreakPots() && logic->HasItem(RG_GORONS_BRACELET) && (logic->CanWaterTempleLowFromHigh || logic->CanWaterTempleMiddle)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM] = Region("Water Temple Falling Platform Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -223,8 +223,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_WATER_RANG_FALLING_PLATFORM_GS) && logic->IsChild && logic->CanUse(RG_BOOMERANG)) || (ctx->GetTrickOption(RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS) && logic->IsAdult && logic->CanUse(RG_HOOKSHOT))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 4);}),
|
||||
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 5);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 4)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_WATER_TEMPLE, 5)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM] = Region("Water Temple Dragon Pillars Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -233,14 +233,14 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_LIKE_LIKE_POT_2, logic->CanUse(RG_HOOKSHOT)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, []{return logic->CanUseProjectile();}),
|
||||
Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_FALLING_PLATFORM_ROOM, logic->CanUseProjectile()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DARK_LINK_ROOM, logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_DARK_LINK_ROOM] = Region("Water Temple Dark Link Room", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||
Entrance(RR_WATER_TEMPLE_LONGSHOT_ROOM, []{return logic->CanKillEnemy(RE_DARK_LINK);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DRAGON_PILLARS_ROOM, logic->CanKillEnemy(RE_DARK_LINK)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LONGSHOT_ROOM, logic->CanKillEnemy(RE_DARK_LINK)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_LONGSHOT_ROOM] = Region("Water Temple Longshot Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -248,8 +248,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_LONGSHOT_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_DARK_LINK_ROOM, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_RIVER, []{return logic->IsChild || logic->CanUse(RG_SONG_OF_TIME);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DARK_LINK_ROOM, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_RIVER, logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_RIVER] = Region("Water Temple River", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -264,7 +264,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(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));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_DRAGON_ROOM, (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_FAIRY_BOW)) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_PRE_BOSS_ROOM] = Region("Water Temple Pre Boss Room", SCENE_WATER_TEMPLE, {
|
||||
|
@ -276,8 +276,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_LOBBY, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_LOBBY, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -286,11 +286,11 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE] = Region("Water Temple MQ 3F South Ledge", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_ENTRYWAY, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
//If we are not on WL_HIGH, we reach RR_WATER_TEMPLE_MQ_3F_MAIN with hookshot via 2F, otherwise we can reach the platform
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return logic->MQWaterLevel(WL_LOW_OR_MID);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_2F_CENTRAL, logic->MQWaterLevel(WL_LOW_OR_MID)),
|
||||
});
|
||||
|
||||
//This region covers simply existing in the area around the central pillar without being on a specific platform, either swimming or walking on the lakebed
|
||||
|
@ -299,49 +299,49 @@ void RegionTable_Init_WaterTemple() {
|
|||
//remember that any solution that works for any level doesn't need to be given a level, even if that solution is overkill for a lower level
|
||||
areaTable[RR_WATER_TEMPLE_MQ_MAIN] = Region("Water Temple MQ Main", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, []{return logic->HasItem(RG_BRONZE_SCALE) && logic->MQWaterLevel(WL_HIGH);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, logic->HasItem(RG_BRONZE_SCALE) && logic->MQWaterLevel(WL_HIGH)),
|
||||
//Jumping across is possible but a trick due to the janky ledge
|
||||
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return (logic->WaterTimer() >= 24 && logic->CanUse(RG_IRON_BOOTS)) || (logic->MQWaterLevel(WL_MID) && logic->HasItem(RG_GOLDEN_SCALE) && logic->WaterTimer() >= 16) || logic->MQWaterLevel(WL_LOW);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->MQWaterLevel(WL_HIGH) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_EAST_TOWER, (logic->WaterTimer() >= 24 && logic->CanUse(RG_IRON_BOOTS)) || (logic->MQWaterLevel(WL_MID) && logic->HasItem(RG_GOLDEN_SCALE) && logic->WaterTimer() >= 16) || logic->MQWaterLevel(WL_LOW)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->MQWaterLevel(WL_HIGH) && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
//First water timer uses the hook to go from the top of center to storage room/central pillar as coming from the bottom
|
||||
//Second water timer is simply diving down and entering the door as fast as possible from the surface
|
||||
Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return ((logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && (logic->MQWaterLevel(WL_MID) || logic->WaterTimer() >= 16))) && logic->CanUse(RG_LONGSHOT)) || ((logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)) && logic->HasItem(RG_BRONZE_SCALE));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F, []{return logic->MQWaterLevel(WL_LOW);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_2F_CENTRAL, ((logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && (logic->MQWaterLevel(WL_MID) || logic->WaterTimer() >= 16))) && logic->CanUse(RG_LONGSHOT)) || ((logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)) && logic->HasItem(RG_BRONZE_SCALE))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_1F, logic->MQWaterLevel(WL_LOW)),
|
||||
//A special entry as we can't set it to high after entering at a lower height
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return (logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, []{return logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || ((logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24) && logic->HasItem(RG_BRONZE_SCALE)));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM, []{return logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_SILVER_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, (logic->MQWaterLevel(WL_MID) || (logic->MQWaterLevel(WL_HIGH_OR_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || ((logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24) && logic->HasItem(RG_BRONZE_SCALE)))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM, logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_SILVER_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))))),
|
||||
//Adult needs to jump in instead of dive for swim access, but you just hold forward. RT_WATER_BK_REGION Isn't relevant unless the Dark Link loop can be done without longshot with other tricks
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT))) && (logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS)));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT))) && (logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_WATER_BK_REGION) && logic->CanUse(RG_HOVER_BOOTS)))),
|
||||
});
|
||||
|
||||
//This region specifically covers the topmost platform around central pillar
|
||||
areaTable[RR_WATER_TEMPLE_MQ_3F_CENTRAL] = Region("Water Temple MQ 3F Central", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, []{return logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_2F_CENTRAL, []{return (logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return (logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_SOUTH_LEDGE, logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_2F_CENTRAL, (logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16)) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, (logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT)) || (ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
//Jumping across is possible but a trick due to the janky ledge
|
||||
Entrance(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, []{return logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
//room access is (logic->IsAdult || (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)))
|
||||
Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_WATERFALL, logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_LONGSHOT)),
|
||||
//this swimless jump with irons may be a trick as you have to put irons on quite late.
|
||||
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->MQWaterLevel(WL_LOW_OR_MID);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16) || logic->MQWaterLevel(WL_LOW_OR_MID)),
|
||||
});
|
||||
|
||||
//This region specifically covers walking on the lower platform around central pillar. This is underwater when WL_HIGH
|
||||
//RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH should be accessed directly to use the central pillar door while at WL_HIGH
|
||||
areaTable[RR_WATER_TEMPLE_MQ_2F_CENTRAL] = Region("Water Temple MQ 2F Central", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return logic->MQWaterLevel(WL_LOW_OR_MID);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STORAGE_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, logic->MQWaterLevel(WL_LOW_OR_MID)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STORAGE_ROOM, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, logic->MQWaterLevel(WL_LOW_OR_MID) && (logic->IsAdult || logic->CanUse(RG_HOVER_BOOTS)) && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY, logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOVER_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_HIGH_EMBLEM] = Region("Water Temple MQ High Emblem", SCENE_WATER_TEMPLE, {
|
||||
|
@ -350,22 +350,22 @@ void RegionTable_Init_WaterTemple() {
|
|||
EVENT_ACCESS(CanWaterTempleHigh, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE] = Region("Water Temple MQ 3F North Ledge", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
//what we need if WL_LOW, we can't guarantee repeated access otherwise.
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_DOOR, []{return logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR, logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_ICE_ARROWS) || logic->CanUse(RG_NAYRUS_LOVE)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_BOSS_DOOR] = Region("Water Temple MQ Main", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, []{return logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage();}),
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_NORTH_LEDGE, logic->CanUse(RG_ICE_ARROWS) || logic->TakeDamage()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOSS_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_EAST_TOWER] = Region("Water Temple MQ East Tower", SCENE_WATER_TEMPLE, {
|
||||
|
@ -383,7 +383,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
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)),
|
||||
}, {
|
||||
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM, []{return logic->MQWaterLevel(WL_LOW) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_STICKS));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_EAST_TOWER_1F_ROOM, logic->MQWaterLevel(WL_LOW) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE) || logic->CanUse(RG_STICKS))),
|
||||
});
|
||||
|
||||
//Raising the targets by clearing this room achieves nothing logically because it requires WL_LOW to do and hookshot to use, which implies access to WL_MID and WL_HIGH already
|
||||
|
@ -391,7 +391,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
//Locations
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_COMPASS_CHEST, logic->CanKillEnemy(RE_LIZALFOS) && logic->CanKillEnemy(RE_SPIKE)),
|
||||
}, {
|
||||
Entrance(RR_WATER_TEMPLE_MQ_EAST_TOWER, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_EAST_TOWER, true),
|
||||
});
|
||||
|
||||
//This area assumes we entered through the lower door, so water is low and cannot be changed without leaving.
|
||||
|
@ -401,11 +401,11 @@ void RegionTable_Init_WaterTemple() {
|
|||
EVENT_ACCESS(MQWaterB1Switch, ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, logic->MQWaterLevel(WL_HIGH) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
//I don't know if this FW trick can ever matter but maybe it's needed to get child to CENTRAL_2F or something
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, []{return logic->CanUse(RG_HOOKSHOT) || (logic->MQWaterLevel(WL_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_2F, logic->CanUse(RG_HOOKSHOT) || (logic->MQWaterLevel(WL_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->HasItem(RG_BRONZE_SCALE))),
|
||||
//if the gate is open, you sink straight in, so you can't climb up this way in logic without swimming
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_HIGH_OR_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_HIGH_OR_MID) && ctx->GetTrickOption(RT_WATER_FW_CENTRAL_GS) && logic->CanUse(RG_FARORES_WIND) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC)),
|
||||
});
|
||||
|
||||
//If we enter here in WL_HIGH, go to RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH instead, Assumes WL_MID_OR_LOW
|
||||
|
@ -419,8 +419,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
//EVENT_ACCESS(MQWaterPillarSoTBlock, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, []{return logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_FARORES_WIND) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH, logic->MQWaterLevel(WL_HIGH) && logic->CanUse(RG_FARORES_WIND) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, logic->MQWaterOpenedPillarB1 && logic->MQWaterLevel(WL_MID) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH] = Region("Water Temple MQ Central Pillar High", SCENE_WATER_TEMPLE, {
|
||||
|
@ -432,16 +432,16 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC)),
|
||||
});
|
||||
|
||||
//Assuming tunic and irons was checked on entry
|
||||
areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1] = Region("Water Temple MQ Central Pillar B1", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
//Can't know water level, so we'll just assume any possibility and skip to MAIN
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterOpenedPillarB1 && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->MQWaterOpenedPillarB1 && logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE)),
|
||||
//Child needs to release irons for height to push down the larger "peg", however they can push the lower one down by climbing and then hit the switch through the larger peg, but it's a trick
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL, []{return ((logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE)));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL, ((logic->IsAdult && logic->CanUse(RG_LONGSHOT)) || (logic->CanUse(RG_HOOKSHOT) && logic->HasItem(RG_BRONZE_SCALE)))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -482,7 +482,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F] = Region("Water Temple MQ Behind Blue Switch 2F", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -502,8 +502,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F, logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_3F] = Region("Water Temple MQ Behind Blue Switch 2F", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -511,8 +511,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, []{return true;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_HIGH_EMBLEM, true),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY] = Region("Water Temple MQ Lizalfos Hallway", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -530,15 +530,15 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE)),
|
||||
//this technically exists, but only complicates things, uncomment if some edge case/glitch can use RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY to reach RR_WATER_TEMPLE_MQ_3F_CENTRAL, or if a void warp goes here
|
||||
/*Entrance(RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE, []{return (logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOOKSHOT)) || logic->MQWaterLevel(WL_HIGH) && (logic->HasItem(RG_BRONZE_SCALE));}),
|
||||
/*ENTRANCE(RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE, (logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))) || (logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_HOOKSHOT)) || logic->MQWaterLevel(WL_HIGH) && (logic->HasItem(RG_BRONZE_SCALE))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_3F_EAST_LEDGE] = Region("Water Temple MQ 3F East Ledge", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS);}),*/
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)),*/
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE] = Region("Water Temple MQ Lizalfos Cage", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -553,10 +553,10 @@ void RegionTable_Init_WaterTemple() {
|
|||
//This room exists to hold the wonderitems that drop from the emblems here. Specifically this assumes you are standing on the final ledge
|
||||
areaTable[RR_WATER_TEMPLE_MQ_WATERFALL] = Region("Water Temple Waterfall", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_3F_CENTRAL, []{return logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return (logic->MQWaterStalfosPit && logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->MQWaterStalfosPit && logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_3F_CENTRAL, logic->SmallKeys(RR_WATER_TEMPLE, 1) && logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, (logic->MQWaterStalfosPit && logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, logic->MQWaterStalfosPit && logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_STALFOS_PIT] = Region("Water Temple MQ Stalfos Pit", SCENE_WATER_TEMPLE, {
|
||||
|
@ -564,9 +564,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
EVENT_ACCESS(MQWaterStalfosPit, ((logic->IsAdult && logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 3, false, true)) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->CanKillEnemy(RE_STALFOS, ED_BOMB_THROW, true, 3, false, true)))),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_WATERFALL, []{return logic->MQWaterStalfosPit && logic->CanUse(RG_HOOKSHOT) && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, []{return (logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_HOOKSHOT) && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) && (logic->CanUse(RG_HOVER_BOOTS) || logic->MQWaterStalfosPit));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->MQWaterStalfosPit && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_WATERFALL, logic->MQWaterStalfosPit && logic->CanUse(RG_HOOKSHOT) && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, (logic->IsAdult && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_HOOKSHOT) && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) && (logic->CanUse(RG_HOVER_BOOTS) || logic->MQWaterStalfosPit))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, logic->MQWaterStalfosPit && (logic->IsAdult || logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
//also includes the suns fairy in the middle
|
||||
|
@ -582,9 +582,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(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));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, []{return logic->MQWaterStalfosPit && logic->CanUse(RG_HOOKSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_WATERFALL, logic->MQWaterStalfosPit && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, logic->MQWaterStalfosPit && logic->CanUse(RG_HOOKSHOT)),
|
||||
});
|
||||
|
||||
//specifically the area past the spikes
|
||||
|
@ -596,9 +596,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(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_STALFOS_PIT, logic->IsAdult || logic->TakeDamage()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_POTS, logic->IsAdult || logic->TakeDamage()),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK, logic->CanKillEnemy(RE_DARK_LINK)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_AFTER_DARK_LINK] = Region("Water Temple MQ After Dark Link", SCENE_WATER_TEMPLE, {
|
||||
|
@ -610,8 +610,8 @@ 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_RIVER_SKULL, []{return logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanUse(RG_LONGSHOT));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_STALFOS_PIT_UPPER, logic->CanKillEnemy(RE_DARK_LINK)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_SKULL, logic->CanUse(RG_HOOKSHOT) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8) || logic->CanUse(RG_LONGSHOT))),
|
||||
});
|
||||
|
||||
//if we can use hookshot, we are standing on the targets, otherwise assume we're in the water
|
||||
|
@ -620,7 +620,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_GS_RIVER, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_POTS, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_RIVER_POTS] = Region("Water Temple MQ River Pots", SCENE_WATER_TEMPLE, {
|
||||
|
@ -632,11 +632,11 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_RIVER_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_RIVER_SKULL, []{return logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && logic->CanUse(RG_HOOKSHOT));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_SKULL, logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && logic->CanUse(RG_HOOKSHOT))),
|
||||
//You don't need to swim for this if you put irons on in midair and hold forward while aiming for the tunnel with a tight angle, but if you miss you have to void unless you have a hook. It's only relevant with glitches anyway
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->IsAdult && logic->HasItem(RG_BRONZE_SCALE) && ctx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash());}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, logic->HasItem(RG_SILVER_SCALE) || (logic->IsAdult && logic->HasItem(RG_BRONZE_SCALE) && ctx->GetTrickOption(RT_WATER_DRAGON_JUMP_DIVE))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOVER_BOOTS) && logic->CanJumpslash())),
|
||||
});
|
||||
|
||||
//This region assumes Iron boots to access
|
||||
|
@ -650,9 +650,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_POTS, logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE] = Region("Water Temple MQ Dragon Room Alcove", SCENE_WATER_TEMPLE, {
|
||||
|
@ -669,8 +669,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_SILVER_SCALE);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, logic->HasItem(RG_SILVER_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", SCENE_WATER_TEMPLE, {},
|
||||
|
@ -681,10 +681,10 @@ void RegionTable_Init_WaterTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_SILVER_SCALE);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->MQWaterDragonTorches;}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_RIVER_POTS, logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, logic->HasItem(RG_SILVER_SCALE)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, logic->MQWaterDragonTorches),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH] = Region("Water Temple MQ Boss Key Room Switch", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -693,9 +693,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return logic->CanHitSwitch() && Here(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanUse(RG_DINS_FIRE);});}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, logic->CanHitSwitch() && Here(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanUse(RG_DINS_FIRE);})),
|
||||
});
|
||||
|
||||
//this exists for the crates in preparation for clips through the grate
|
||||
|
@ -709,7 +709,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanHitSwitch(ED_BOOMERANG);}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, logic->CanHitSwitch(ED_BOOMERANG)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST] = Region("Water Temple MQ Boss Key Room Chest", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -717,9 +717,9 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanHitSwitch(ED_BOMB_THROW) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, []{return true;}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->WaterTimer() >= 24 && logic->CanUse(RG_LONGSHOT))));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, logic->CanHitSwitch(ED_BOMB_THROW) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT, true),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH, logic->HasItem(RG_SILVER_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->WaterTimer() >= 24 && logic->CanUse(RG_LONGSHOT))))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_B1_GATE_SWITCH] = Region("Water Temple MQ B1 Gate Switch", SCENE_WATER_TEMPLE, {
|
||||
|
@ -729,8 +729,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
EVENT_ACCESS(MQWaterB1Switch, logic->CanUse(RG_IRON_BOOTS)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && (logic->MQWaterLevel(WL_LOW) || logic->WaterTimer() >= 24);})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->MQWaterB1Switch && (logic->MQWaterLevel(WL_LOW) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && (logic->MQWaterLevel(WL_LOW) || logic->WaterTimer() >= 24))
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", SCENE_WATER_TEMPLE, {},
|
||||
|
@ -745,8 +745,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
},
|
||||
{
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_GOLDEN_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->CanUse(RG_FIRE_ARROWS) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || (logic->CanUse(RG_LONGSHOT) && Here(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->ScarecrowsSong();})));})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_GOLDEN_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, logic->CanUse(RG_FIRE_ARROWS) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || (logic->CanUse(RG_LONGSHOT) && Here(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->ScarecrowsSong();}))))
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE] = Region("Water Temple MQ Triangle Torch Cage", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -777,14 +777,14 @@ void RegionTable_Init_WaterTemple() {
|
|||
{
|
||||
//Exits
|
||||
//we can backflip over the spikes, but land in water.
|
||||
Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && (logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE));}),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_MAIN, logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && (logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE))),
|
||||
//Child can use the crate to get the height to make it with hovers, but it's annoyingly tight so would be a trick
|
||||
Entrance(RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 &&
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 &&
|
||||
//We're putting the requirement to get out of the water here as the scarecrow method in includes hook which satisfies it
|
||||
((logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP)) && (logic->CanUse(RG_HOOKSHOT) || logic->HasItem(RG_BRONZE_SCALE))) ||
|
||||
(Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT)));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP) || (Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT)));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, []{return ctx->GetTrickOption(RT_WATER_MQ_LOCKED_GS) && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT));}),
|
||||
(Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT)))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_WATER_NORTH_BASEMENT_LEDGE_JUMP) || (Here(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->ScarecrowsSong();}) && logic->CanUse(RG_HOOKSHOT)))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, ctx->GetTrickOption(RT_WATER_MQ_LOCKED_GS) && (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM] = Region("Water Temple MQ Single Stalfos Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -800,13 +800,13 @@ void RegionTable_Init_WaterTemple() {
|
|||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)));})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, logic->HasItem(RG_SILVER_SCALE) || (logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT))))
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_4_TORCH_ROOM] = Region("Water Temple MQ 4 Torch Room", SCENE_WATER_TEMPLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())) || (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && logic->CanUse(RG_HOOKSHOT) ));}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanHitSwitch() && logic->HasFireSource();})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())) || (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && logic->CanUse(RG_HOOKSHOT) ))),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, logic->CanHitSwitch() && logic->HasFireSource())
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_DODONGO_ROOM] = Region("Water Temple MQ Dodongo Room", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -820,8 +820,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);});}),
|
||||
Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, []{return (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);});})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);})),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE, (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);}))
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE] = Region("Water Temple MQ Basement Gated Areas", SCENE_WATER_TEMPLE, {}, {
|
||||
|
@ -832,7 +832,7 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, logic->CanBreakCrates()),
|
||||
LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, logic->CanBreakCrates()),
|
||||
}, {
|
||||
Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return true;})
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, true)
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
@ -840,9 +840,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, ctx->GetDungeon(WATER_TEMPLE)->IsVanilla() && false),
|
||||
ENTRANCE(RR_WATER_TEMPLE_MQ_BOSS_DOOR, ctx->GetDungeon(WATER_TEMPLE)->IsMQ() && false),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOSS_ROOM, logic->HasItem(RG_WATER_TEMPLE_BOSS_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_WATER_TEMPLE_BOSS_ROOM] = Region("Water Temple Boss Room", SCENE_WATER_TEMPLE_BOSS, {
|
||||
|
@ -854,8 +854,8 @@ void RegionTable_Init_WaterTemple() {
|
|||
LOCATION(RC_MORPHA, logic->WaterTempleClear),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_WATER_TEMPLE_BOSS_ENTRYWAY, []{return false;}),
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->WaterTempleClear;}, false),
|
||||
ENTRANCE(RR_WATER_TEMPLE_BOSS_ENTRYWAY, false),
|
||||
ENTRANCE(RR_LAKE_HYLIA, logic->WaterTempleClear, false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -11,9 +11,9 @@ void RegionTable_Init_CastleGrounds() {
|
|||
//Temporarily uses SCENE_OUTSIDE_GANONS_CASTLE to avoid self connection between ages
|
||||
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_THE_MARKET, true),
|
||||
ENTRANCE(RR_HYRULE_CASTLE_GROUNDS, logic->IsChild),
|
||||
ENTRANCE(RR_GANONS_CASTLE_GROUNDS, logic->IsAdult),
|
||||
});
|
||||
|
||||
areaTable[RR_HYRULE_CASTLE_GROUNDS] = Region("Hyrule Castle Grounds", SCENE_HYRULE_CASTLE, {
|
||||
|
@ -35,10 +35,10 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_HC_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//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_GREAT_FAIRY_FOUNTAIN, []{return logic->BlastOrSmash();}),
|
||||
Entrance(RR_HC_STORMS_GROTTO, []{return logic->CanOpenStormsGrotto();}),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, true),
|
||||
ENTRANCE(RR_HC_GARDEN, logic->CanUse(RG_WEIRD_EGG) || (ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives() && logic->CanJumpslash())),
|
||||
ENTRANCE(RR_HC_GREAT_FAIRY_FOUNTAIN, logic->BlastOrSmash()),
|
||||
ENTRANCE(RR_HC_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_HC_GARDEN] = Region("HC Garden", SCENE_CASTLE_COURTYARD_ZELDA, {}, {
|
||||
|
@ -47,7 +47,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_SONG_FROM_IMPA, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_CASTLE_GROUNDS, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_CASTLE_GROUNDS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HC_GREAT_FAIRY_FOUNTAIN] = Region("HC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
|
@ -55,7 +55,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_HC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HC_STORMS_GROTTO] = Region("HC Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -63,8 +63,8 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_HC_GS_STORMS_GROTTO, logic->CanUse(RG_BOOMERANG) && ctx->GetTrickOption(RT_HC_STORMS_GS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
Entrance(RR_HC_STORMS_GROTTO_BEHIND_WALLS, []{return logic->CanBreakMudWalls();}),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, true),
|
||||
ENTRANCE(RR_HC_STORMS_GROTTO_BEHIND_WALLS, logic->CanBreakMudWalls()),
|
||||
});
|
||||
|
||||
areaTable[RR_HC_STORMS_GROTTO_BEHIND_WALLS] = Region("HC Storms Grotto Behind Walls", SCENE_GROTTOS, {
|
||||
|
@ -84,7 +84,7 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_HC_STORMS_GROTTO_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HC_STORMS_GROTTO, []{return true;}),
|
||||
ENTRANCE(RR_HC_STORMS_GROTTO, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GANONS_CASTLE_GROUNDS] = Region("Ganon's Castle Grounds", SCENE_OUTSIDE_GANONS_CASTLE, {
|
||||
|
@ -95,9 +95,9 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_OGC_GS, logic->CanJumpslashExceptHammer() || logic->CanUseProjectile() || (logic->CanShield() && logic->CanUse(RG_MEGATON_HAMMER)) || logic->CanUse(RG_DINS_FIRE)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return logic->AtNight;}),
|
||||
Entrance(RR_OGC_GREAT_FAIRY_FOUNTAIN, []{return logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->AtNight;}),
|
||||
Entrance(RR_GANONS_CASTLE_LEDGE, []{return logic->BuiltRainbowBridge;}),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, logic->AtNight),
|
||||
ENTRANCE(RR_OGC_GREAT_FAIRY_FOUNTAIN, logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->AtNight),
|
||||
ENTRANCE(RR_GANONS_CASTLE_LEDGE, logic->BuiltRainbowBridge),
|
||||
});
|
||||
|
||||
areaTable[RR_OGC_GREAT_FAIRY_FOUNTAIN] = Region("OGC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
|
@ -105,19 +105,19 @@ void RegionTable_Init_CastleGrounds() {
|
|||
LOCATION(RC_OGC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_CASTLE_GROUNDS, []{return true;}),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, true),
|
||||
});
|
||||
|
||||
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, logic->IsChild),
|
||||
ENTRANCE(RR_GANONS_CASTLE_LEDGE, logic->IsAdult),
|
||||
});
|
||||
|
||||
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_GROUNDS, logic->BuiltRainbowBridge),
|
||||
ENTRANCE(RR_GANONS_CASTLE_ENTRYWAY, logic->IsAdult),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -7,9 +7,9 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
// clang-format off
|
||||
areaTable[RR_DMC_UPPER_NEARBY] = Region("DMC Upper Nearby", SCENE_DEATH_MOUNTAIN_CRATER, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_LOCAL, []{return logic->FireTimer() >= 48;}),
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||
Entrance(RR_DMC_UPPER_GROTTO, []{return Here(RR_DMC_UPPER_NEARBY, []{return logic->BlastOrSmash() && (logic->FireTimer() >= 8 || logic->Hearts() >= 3);});})
|
||||
ENTRANCE(RR_DMC_UPPER_LOCAL, logic->FireTimer() >= 48),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_SUMMIT, true),
|
||||
ENTRANCE(RR_DMC_UPPER_GROTTO, Here(RR_DMC_UPPER_NEARBY, []{return logic->BlastOrSmash() && (logic->FireTimer() >= 8 || logic->Hearts() >= 3);}))
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_UPPER_LOCAL] = Region("DMC Upper Local", SCENE_DEATH_MOUNTAIN_CRATER, {
|
||||
|
@ -26,11 +26,11 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_NEARBY, []{return true;}),
|
||||
Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return logic->FireTimer() >= 16 || logic->Hearts() >= 3;}),
|
||||
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_UPPER_NEARBY, true),
|
||||
ENTRANCE(RR_DMC_LADDER_AREA_NEARBY, logic->FireTimer() >= 16 || logic->Hearts() >= 3),
|
||||
ENTRANCE(RR_DMC_CENTRAL_NEARBY, 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, false),
|
||||
ENTRANCE(RR_DMC_DISTANT_PLATFORM, (logic->FireTimer() >= 48 && logic->Hearts() >= 2) || logic->Hearts() >= 3),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_LADDER_AREA_NEARBY] = Region("DMC Ladder Region Nearby", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
|
@ -38,8 +38,8 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_DEKU_SCRUB, logic->IsChild && logic->CanStunDeku()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_NEARBY, []{return logic->Hearts() >= 3;}),
|
||||
Entrance(RR_DMC_LOWER_NEARBY, []{return logic->Hearts() >= 3 && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DMC_BOULDER_JS) && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)) || (ctx->GetTrickOption(RT_DMC_BOULDER_SKIP) && logic->IsAdult));}),
|
||||
ENTRANCE(RR_DMC_UPPER_NEARBY, logic->Hearts() >= 3),
|
||||
ENTRANCE(RR_DMC_LOWER_NEARBY, logic->Hearts() >= 3 && (logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_DMC_BOULDER_JS) && logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)) || (ctx->GetTrickOption(RT_DMC_BOULDER_SKIP) && logic->IsAdult))),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_LOWER_NEARBY] = Region("DMC Lower Nearby", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
|
@ -50,18 +50,18 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_NEAR_GC_POT_4, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return logic->FireTimer() >= 48;}),
|
||||
Entrance(RR_GC_DARUNIAS_CHAMBER, []{return true;}),
|
||||
Entrance(RR_DMC_GREAT_FAIRY_FOUNTAIN, []{return logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
Entrance(RR_DMC_HAMMER_GROTTO, []{return logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER);}),
|
||||
ENTRANCE(RR_DMC_LOWER_LOCAL, logic->FireTimer() >= 48),
|
||||
ENTRANCE(RR_GC_DARUNIAS_CHAMBER, true),
|
||||
ENTRANCE(RR_DMC_GREAT_FAIRY_FOUNTAIN, logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
ENTRANCE(RR_DMC_HAMMER_GROTTO, logic->IsAdult && logic->CanUse(RG_MEGATON_HAMMER)),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_LOWER_LOCAL] = Region("DMC Lower Local", SCENE_DEATH_MOUNTAIN_CRATER, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_LOWER_NEARBY, []{return true;}),
|
||||
Entrance(RR_DMC_LADDER_AREA_NEARBY, []{return logic->FireTimer() >= 8 || logic->Hearts() >= 3;}),
|
||||
Entrance(RR_DMC_CENTRAL_NEARBY, []{return (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3);}),
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanShield() && ctx->GetTrickOption(RT_DMC_BOLERO_JUMP))) && logic->FireTimer() >= 24;}),
|
||||
ENTRANCE(RR_DMC_LOWER_NEARBY, true),
|
||||
ENTRANCE(RR_DMC_LADDER_AREA_NEARBY, logic->FireTimer() >= 8 || logic->Hearts() >= 3),
|
||||
ENTRANCE(RR_DMC_CENTRAL_NEARBY, (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)) && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanShield() && ctx->GetTrickOption(RT_DMC_BOLERO_JUMP))) && logic->FireTimer() >= 24),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_CENTRAL_NEARBY] = Region("DMC Central Nearby", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
|
@ -70,7 +70,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_SHEIK_IN_CRATER, logic->IsAdult && (logic->FireTimer() >= 8 || logic->Hearts() >= 3)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48;}),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, logic->FireTimer() >= 48),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_CENTRAL_LOCAL] = Region("DMC Central Local", SCENE_DEATH_MOUNTAIN_CRATER, {
|
||||
|
@ -92,11 +92,11 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
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)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_NEARBY, []{return true;}),
|
||||
Entrance(RR_DMC_LOWER_NEARBY, []{return (logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}),
|
||||
Entrance(RR_DMC_UPPER_NEARBY, []{return logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL);}),
|
||||
Entrance(RR_FIRE_TEMPLE_ENTRYWAY, []{return (logic->IsChild && logic->Hearts() >= 3 && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || (logic->IsAdult && logic->FireTimer() >= 24);}),
|
||||
Entrance(RR_DMC_DISTANT_PLATFORM, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
||||
ENTRANCE(RR_DMC_CENTRAL_NEARBY, true),
|
||||
ENTRANCE(RR_DMC_LOWER_NEARBY, (logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL)) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_DMC_UPPER_NEARBY, logic->IsAdult && CanPlantBean(RR_DMC_CENTRAL_LOCAL)),
|
||||
ENTRANCE(RR_FIRE_TEMPLE_ENTRYWAY, (logic->IsChild && logic->Hearts() >= 3 && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF)) || (logic->IsAdult && logic->FireTimer() >= 24)),
|
||||
ENTRANCE(RR_DMC_DISTANT_PLATFORM, logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW)),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_GREAT_FAIRY_FOUNTAIN] = Region("DMC Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
|
@ -104,7 +104,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return true;}),
|
||||
ENTRANCE(RR_DMC_LOWER_LOCAL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_UPPER_GROTTO] = Region("DMC Upper Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -122,7 +122,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_UPPER_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_UPPER_LOCAL, []{return true;}),
|
||||
ENTRANCE(RR_DMC_UPPER_LOCAL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_HAMMER_GROTTO] = Region("DMC Hammer Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -133,7 +133,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_HAMMER_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return true;}),
|
||||
ENTRANCE(RR_DMC_LOWER_LOCAL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMC_DISTANT_PLATFORM] = Region("DMC Distant Platform", SCENE_DEATH_MOUNTAIN_CRATER, {}, {
|
||||
|
@ -147,7 +147,7 @@ void RegionTable_Init_DeathMountainCrater() {
|
|||
LOCATION(RC_DMC_DISTANT_PLATFORM_RED_RUPEE, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DMC_CENTRAL_LOCAL, []{return logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW);}),
|
||||
ENTRANCE(RR_DMC_CENTRAL_LOCAL, logic->FireTimer() >= 48 && logic->CanUse(RG_DISTANT_SCARECROW)),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -23,11 +23,11 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
LOCATION(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_KAK_BEHIND_GATE, true),
|
||||
ENTRANCE(RR_GORON_CITY, true),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_SUMMIT, 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, logic->HasExplosives() || logic->HasItem(RG_GORONS_BRACELET) || logic->IsAdult),
|
||||
ENTRANCE(RR_DMT_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_DEATH_MOUNTAIN_SUMMIT] = Region("Death Mountain Summit", SCENE_DEATH_MOUNTAIN_TRAIL, {
|
||||
|
@ -45,16 +45,16 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
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_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();});}),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
|
||||
ENTRANCE(RR_DMC_UPPER_LOCAL, true),
|
||||
ENTRANCE(RR_DMT_OWL_FLIGHT, logic->IsChild, false),
|
||||
ENTRANCE(RR_DMT_COW_GROTTO, Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_DMT_GREAT_FAIRY_FOUNTAIN, Here(RR_DEATH_MOUNTAIN_SUMMIT, []{return logic->BlastOrSmash();})),
|
||||
});
|
||||
|
||||
areaTable[RR_DMT_OWL_FLIGHT] = Region("DMT Owl Flight", SCENE_DEATH_MOUNTAIN_TRAIL, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_IMPAS_ROOFTOP, []{return true;}),
|
||||
ENTRANCE(RR_KAK_IMPAS_ROOFTOP, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMT_COW_GROTTO] = Region("DMT Cow Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -77,7 +77,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
LOCATION(RC_DMT_COW_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_SUMMIT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMT_STORMS_GROTTO] = Region("DMT Storms Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -95,7 +95,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
LOCATION(RC_DMT_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DMT_GREAT_FAIRY_FOUNTAIN] = Region("DMT Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC, {}, {
|
||||
|
@ -103,7 +103,7 @@ void RegionTable_Init_DeathMountainTrail() {
|
|||
LOCATION(RC_DMT_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_SUMMIT, []{return true;}),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_SUMMIT, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -24,11 +24,11 @@ void RegionTable_Init_DesertColossus() {
|
|||
}, {
|
||||
//Exits
|
||||
//You can kinda get the fairies without entering the water, but it relies on them cooperating and leevers are jerks. should be a trick
|
||||
Entrance(RR_DESERT_COLOSSUS_OASIS, []{return logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN, []{return logic->HasExplosives();}),
|
||||
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return true;}),
|
||||
Entrance(RR_COLOSSUS_GROTTO, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS_OASIS, logic->CanUse(RG_SONG_OF_STORMS) && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN, logic->HasExplosives()),
|
||||
ENTRANCE(RR_SPIRIT_TEMPLE_ENTRYWAY, true),
|
||||
ENTRANCE(RR_WASTELAND_NEAR_COLOSSUS, true),
|
||||
ENTRANCE(RR_COLOSSUS_GROTTO, logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
});
|
||||
|
||||
//specifically the full oasis, after the fairies have spawned
|
||||
|
@ -47,7 +47,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
LOCATION(RC_COLOSSUS_OASIS_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DESERT_COLOSSUS_OUTSIDE_TEMPLE] = Region("Desert Colossus From Spirit Entryway", SCENE_DESERT_COLOSSUS, {}, {
|
||||
|
@ -55,7 +55,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
LOCATION(RC_SHEIK_AT_COLOSSUS, true),
|
||||
}, {
|
||||
//Exist
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_COLOSSUS_GREAT_FAIRY_FOUNTAIN] = Region("Colossus Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
|
@ -63,7 +63,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
LOCATION(RC_COLOSSUS_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_COLOSSUS_GROTTO] = Region("Colossus Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -73,7 +73,7 @@ void RegionTable_Init_DesertColossus() {
|
|||
LOCATION(RC_COLOSSUS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -13,12 +13,12 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_GS_SMALL_BRIDGE, logic->IsChild && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_GV_UPPER_STREAM, []{return logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
|
||||
Entrance(RR_GV_CRATE_LEDGE, []{return logic->IsChild || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_GV_GROTTO_LEDGE, []{return true;}),
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_GV_UPPER_STREAM, logic->IsChild || logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage()),
|
||||
ENTRANCE(RR_GV_CRATE_LEDGE, logic->IsChild || logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_GV_GROTTO_LEDGE, true),
|
||||
ENTRANCE(RR_GV_FORTRESS_SIDE, (logic->IsAdult && (logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT))),
|
||||
ENTRANCE(RR_GV_LOWER_STREAM, logic->IsChild), //can use cucco as child
|
||||
});
|
||||
|
||||
areaTable[RR_GV_UPPER_STREAM] = Region("GV Upper Stream", SCENE_GERUDO_VALLEY, {
|
||||
|
@ -39,21 +39,21 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
ENTRANCE(RR_GV_LOWER_STREAM, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
});
|
||||
|
||||
// scale/boots logic is outside lower stream, as lower stream combines access to lake hylia for entrance randomizer's sake
|
||||
areaTable[RR_GV_LOWER_STREAM] = Region("GV Lower Stream", SCENE_GERUDO_VALLEY, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_GROTTO_LEDGE] = Region("GV Grotto Ledge", SCENE_GERUDO_VALLEY, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_GV_OCTOROK_GROTTO, []{return logic->CanUse(RG_SILVER_GAUNTLETS);}),
|
||||
Entrance(RR_GV_CRATE_LEDGE, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_GV_UPPER_STREAM, ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives()),
|
||||
ENTRANCE(RR_GV_LOWER_STREAM, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_GV_OCTOROK_GROTTO, logic->CanUse(RG_SILVER_GAUNTLETS)),
|
||||
ENTRANCE(RR_GV_CRATE_LEDGE, logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", SCENE_GERUDO_VALLEY, {}, {
|
||||
|
@ -62,8 +62,8 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_FREESTANDING_POH_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
ENTRANCE(RR_GV_UPPER_STREAM, ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives()),
|
||||
ENTRANCE(RR_GV_LOWER_STREAM, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_FORTRESS_SIDE] = Region("GV Fortress Side", SCENE_GERUDO_VALLEY, {}, {
|
||||
|
@ -78,17 +78,17 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
|
||||
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->THRescuedAllCarpenters;}),
|
||||
Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_GV_CRATE_LEDGE, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),
|
||||
ENTRANCE(RR_GF_OUTSKIRTS, true),
|
||||
ENTRANCE(RR_GV_UPPER_STREAM, true),
|
||||
ENTRANCE(RR_GERUDO_VALLEY, logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters),
|
||||
ENTRANCE(RR_GV_CARPENTER_TENT, logic->IsAdult),
|
||||
ENTRANCE(RR_GV_STORMS_GROTTO, logic->IsAdult && logic->CanOpenStormsGrotto()),
|
||||
ENTRANCE(RR_GV_CRATE_LEDGE, ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives()),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_CARPENTER_TENT] = Region("GV Carpenter Tent", SCENE_CARPENTERS_TENT, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
ENTRANCE(RR_GV_FORTRESS_SIDE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_OCTOROK_GROTTO] = Region("GV Octorok Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -103,7 +103,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(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;}),
|
||||
ENTRANCE(RR_GV_GROTTO_LEDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GV_STORMS_GROTTO] = Region("GV Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -113,7 +113,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
ENTRANCE(RR_GV_FORTRESS_SIDE, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -39,12 +39,12 @@ void RegionTable_Init_GoronCity() {
|
|||
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
Entrance(RR_GC_MEDIGORON, []{return logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET);}),
|
||||
Entrance(RR_GC_WOODS_WARP, []{return logic->GCWoodsWarpOpen;}),
|
||||
Entrance(RR_GC_SHOP, []{return (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && (logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET) || logic->GoronCityChildFire || logic->CanUse(RG_FAIRY_BOW)));}),
|
||||
Entrance(RR_GC_DARUNIAS_CHAMBER, []{return (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && logic->GCDaruniasDoorOpenChild);}),
|
||||
Entrance(RR_GC_GROTTO_PLATFORM, []{return logic->IsAdult && ((logic->CanUse(RG_SONG_OF_TIME) && ((logic->EffectiveHealth() > 2) || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_NAYRUS_LOVE))) || (logic->EffectiveHealth() > 1 && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_HOOKSHOT)) || (logic->EffectiveHealth() > 2 && logic->CanUse(RG_HOOKSHOT) && ctx->GetTrickOption(RT_GC_GROTTO)));}),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
|
||||
ENTRANCE(RR_GC_MEDIGORON, logic->CanBreakMudWalls() || logic->HasItem(RG_GORONS_BRACELET)),
|
||||
ENTRANCE(RR_GC_WOODS_WARP, logic->GCWoodsWarpOpen),
|
||||
ENTRANCE(RR_GC_SHOP, (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && (logic->BlastOrSmash() || logic->HasItem(RG_GORONS_BRACELET) || logic->GoronCityChildFire || logic->CanUse(RG_FAIRY_BOW)))),
|
||||
ENTRANCE(RR_GC_DARUNIAS_CHAMBER, (logic->IsAdult && logic->StopGCRollingGoronAsAdult) || (logic->IsChild && logic->GCDaruniasDoorOpenChild)),
|
||||
ENTRANCE(RR_GC_GROTTO_PLATFORM, logic->IsAdult && ((logic->CanUse(RG_SONG_OF_TIME) && ((logic->EffectiveHealth() > 2) || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_LONGSHOT) || logic->CanUse(RG_NAYRUS_LOVE))) || (logic->EffectiveHealth() > 1 && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_HOOKSHOT)) || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_HOOKSHOT)) || (logic->EffectiveHealth() > 2 && logic->CanUse(RG_HOOKSHOT) && ctx->GetTrickOption(RT_GC_GROTTO)))),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_MEDIGORON] = Region("GC Medigoron", SCENE_GORON_CITY, {}, {
|
||||
|
@ -55,7 +55,7 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_MEDIGORON_POT_1, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GORON_CITY, []{return true;}),
|
||||
ENTRANCE(RR_GORON_CITY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_WOODS_WARP] = Region("GC Woods Warp", SCENE_GORON_CITY, {
|
||||
|
@ -63,8 +63,8 @@ void RegionTable_Init_GoronCity() {
|
|||
EVENT_ACCESS(GCWoodsWarpOpen, logic->BlastOrSmash() || logic->CanUse(RG_DINS_FIRE)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GORON_CITY, []{return logic->GCWoodsWarpOpen;}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return true;}),
|
||||
ENTRANCE(RR_GORON_CITY, logic->GCWoodsWarpOpen),
|
||||
ENTRANCE(RR_THE_LOST_WOODS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_DARUNIAS_CHAMBER] = Region("GC Darunias Chamber", SCENE_GORON_CITY, {
|
||||
|
@ -78,14 +78,14 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_DARUNIA_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GORON_CITY, []{return true;}),
|
||||
Entrance(RR_DMC_LOWER_LOCAL, []{return logic->IsAdult;}),
|
||||
ENTRANCE(RR_GORON_CITY, true),
|
||||
ENTRANCE(RR_DMC_LOWER_LOCAL, logic->IsAdult),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_GROTTO_PLATFORM] = Region("GC Grotto Platform", SCENE_GORON_CITY, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GC_GROTTO, []{return true;}),
|
||||
Entrance(RR_GORON_CITY, []{return logic->EffectiveHealth() > 2 || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_NAYRUS_LOVE) || ((logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_LONGSHOT));}),
|
||||
ENTRANCE(RR_GC_GROTTO, true),
|
||||
ENTRANCE(RR_GORON_CITY, logic->EffectiveHealth() > 2 || logic->CanUse(RG_GORON_TUNIC) || logic->CanUse(RG_NAYRUS_LOVE) || ((logic->IsChild || logic->CanUse(RG_SONG_OF_TIME)) && logic->CanUse(RG_LONGSHOT))),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_SHOP] = Region("GC Shop", SCENE_GORON_SHOP, {}, {
|
||||
|
@ -100,7 +100,7 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_SHOP_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GORON_CITY, []{return true;}),
|
||||
ENTRANCE(RR_GORON_CITY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GC_GROTTO] = Region("GC Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -111,7 +111,7 @@ void RegionTable_Init_GoronCity() {
|
|||
LOCATION(RC_GC_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GC_GROTTO_PLATFORM, []{return true;}),
|
||||
ENTRANCE(RR_GC_GROTTO_PLATFORM, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -35,13 +35,13 @@ void RegionTable_Init_Graveyard() {
|
|||
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_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_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_GRAVEYARD_WARP_PAD_REGION, []{return false;}),
|
||||
ENTRANCE(RR_GRAVEYARD_SHIELD_GRAVE, logic->IsAdult || logic->AtNight),
|
||||
ENTRANCE(RR_GRAVEYARD_COMPOSERS_GRAVE, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
ENTRANCE(RR_GRAVEYARD_HEART_PIECE_GRAVE, logic->IsAdult || logic->AtNight),
|
||||
ENTRANCE(RR_GRAVEYARD_DAMPES_GRAVE, logic->IsAdult),
|
||||
ENTRANCE(RR_GRAVEYARD_DAMPES_HOUSE, logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/), //TODO: This needs to be handled in ToD rework
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
ENTRANCE(RR_GRAVEYARD_WARP_PAD_REGION, false),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_SHIELD_GRAVE] = Region("Graveyard Shield Grave", SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, {}, {
|
||||
|
@ -49,8 +49,8 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_GRAVEYARD_SHIELD_GRAVE_BACK, []{return Here(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->CanBreakMudWalls();});}),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
ENTRANCE(RR_GRAVEYARD_SHIELD_GRAVE_BACK, Here(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->CanBreakMudWalls();})),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_SHIELD_GRAVE_BACK] = Region("Graveyard Shield Grave Back", SCENE_GRAVE_WITH_FAIRYS_FOUNTAIN, {}, {
|
||||
|
@ -65,7 +65,7 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_SHIELD_GRAVE_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return true;}),
|
||||
ENTRANCE(RR_GRAVEYARD_SHIELD_GRAVE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_HEART_PIECE_GRAVE] = Region("Graveyard Heart Piece Grave", SCENE_REDEAD_GRAVE, {}, {
|
||||
|
@ -73,7 +73,7 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_HEART_PIECE_GRAVE_CHEST, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_COMPOSERS_GRAVE] = Region("Graveyard Composers Grave", SCENE_ROYAL_FAMILYS_TOMB, {}, {
|
||||
|
@ -83,7 +83,7 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_DAMPES_GRAVE] = Region("Graveyard Dampes Grave", SCENE_WINDMILL_AND_DAMPES_GRAVE, {
|
||||
|
@ -110,8 +110,8 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_DAMPE_RACE_RUPEE_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_KAK_WINDMILL, []{return logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME);}, false),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
ENTRANCE(RR_KAK_WINDMILL, logic->IsAdult && logic->CanUse(RG_SONG_OF_TIME), false),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_DAMPES_HOUSE] = Region("Graveyard Dampes House", SCENE_GRAVEKEEPERS_HUT, {}, {
|
||||
|
@ -119,7 +119,7 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_DAMPE_HINT, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_GRAVEYARD_WARP_PAD_REGION] = Region("Graveyard Warp Pad Region", SCENE_GRAVEYARD, {
|
||||
|
@ -132,8 +132,8 @@ void RegionTable_Init_Graveyard() {
|
|||
LOCATION(RC_GRAVEYARD_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS));}),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
ENTRANCE(RR_SHADOW_TEMPLE_ENTRYWAY, logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_GY_SHADOW_FIRE_ARROWS) && logic->IsAdult && logic->CanUse(RG_FIRE_ARROWS))),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -11,8 +11,8 @@ void RegionTable_Init_HauntedWasteland() {
|
|||
LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_OUTSIDE_GATE, []{return true;}),
|
||||
Entrance(RR_HAUNTED_WASTELAND, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}),
|
||||
ENTRANCE(RR_GF_OUTSIDE_GATE, true),
|
||||
ENTRANCE(RR_HAUNTED_WASTELAND, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING)),
|
||||
});
|
||||
|
||||
areaTable[RR_HAUNTED_WASTELAND] = Region("Haunted Wasteland", SCENE_HAUNTED_WASTELAND, {
|
||||
|
@ -34,8 +34,8 @@ void RegionTable_Init_HauntedWasteland() {
|
|||
LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH);}),
|
||||
Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}),
|
||||
ENTRANCE(RR_WASTELAND_NEAR_COLOSSUS, ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH)),
|
||||
ENTRANCE(RR_WASTELAND_NEAR_FORTRESS, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING)),
|
||||
});
|
||||
|
||||
areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", SCENE_HAUNTED_WASTELAND, {}, {
|
||||
|
@ -43,8 +43,8 @@ void RegionTable_Init_HauntedWasteland() {
|
|||
LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DESERT_COLOSSUS, []{return true;}),
|
||||
Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}),
|
||||
ENTRANCE(RR_DESERT_COLOSSUS, true),
|
||||
ENTRANCE(RR_HAUNTED_WASTELAND, ctx->GetTrickOption(RT_HW_REVERSE) || false),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -64,21 +64,21 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_NEAR_KF_GRASS_12, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BRIDGE, []{return true;}),
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
Entrance(RR_GERUDO_VALLEY, []{return true;}),
|
||||
Entrance(RR_MARKET_ENTRANCE, []{return true;}),
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_ZR_FRONT, []{return true;}),
|
||||
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_LW_BRIDGE, true),
|
||||
ENTRANCE(RR_LAKE_HYLIA, true),
|
||||
ENTRANCE(RR_GERUDO_VALLEY, true),
|
||||
ENTRANCE(RR_MARKET_ENTRANCE, true),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
ENTRANCE(RR_ZR_FRONT, true),
|
||||
ENTRANCE(RR_LON_LON_RANCH, true),
|
||||
ENTRANCE(RR_HF_SOUTHEAST_GROTTO, Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_HF_OPEN_GROTTO, true),
|
||||
ENTRANCE(RR_HF_INSIDE_FENCE_GROTTO, logic->CanOpenBombGrotto()),
|
||||
ENTRANCE(RR_HF_COW_GROTTO, (logic->CanUse(RG_MEGATON_HAMMER) || logic->IsChild) && logic->CanOpenBombGrotto()),
|
||||
ENTRANCE(RR_HF_NEAR_MARKET_GROTTO, Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_HF_FAIRY_GROTTO, Here(RR_HYRULE_FIELD, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_HF_NEAR_KAK_GROTTO, logic->CanOpenBombGrotto()),
|
||||
ENTRANCE(RR_HF_TEKTITE_GROTTO, logic->CanOpenBombGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_SOUTHEAST_GROTTO] = Region("HF Southeast Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -96,7 +96,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_SOUTHEAST_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_OPEN_GROTTO] = Region("HF Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -114,7 +114,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_INSIDE_FENCE_GROTTO] = Region("HF Inside Fence Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -124,13 +124,13 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_FENCE_GROTTO_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_COW_GROTTO] = Region("HF Cow Grotto", SCENE_GROTTOS, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_HF_COW_GROTTO_BEHIND_WEBS, []{return logic->HasFireSource();}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_HF_COW_GROTTO_BEHIND_WEBS, logic->HasFireSource()),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_COW_GROTTO_BEHIND_WEBS] = Region("HF Cow Grotto Behind Webs", SCENE_GROTTOS, {
|
||||
|
@ -150,7 +150,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_COW_GROTTO_GRASS_2, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HF_COW_GROTTO, []{return true;}),
|
||||
ENTRANCE(RR_HF_COW_GROTTO, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_NEAR_MARKET_GROTTO] = Region("HF Near Market Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -168,7 +168,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_NEAR_MARKET_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_FAIRY_GROTTO] = Region("HF Fairy Grotto", SCENE_GROTTOS, {
|
||||
|
@ -186,7 +186,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_FAIRY_GROTTO_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_NEAR_KAK_GROTTO] = Region("HF Near Kak Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -194,7 +194,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_GS_NEAR_KAK_GROTTO, logic->HookshotOrBoomerang()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_HF_TEKTITE_GROTTO] = Region("HF Tektite Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -202,7 +202,7 @@ void RegionTable_Init_HyruleField() {
|
|||
LOCATION(RC_HF_TEKTITE_GROTTO_FREESTANDING_POH, logic->HasItem(RG_GOLDEN_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -61,30 +61,30 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(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_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_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);}),
|
||||
Entrance(RR_KAK_IMPAS_ROOFTOP, []{return logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_ROOFTOP_GS) && logic->CanUse(RG_HOVER_BOOTS));}),
|
||||
Entrance(RR_THE_GRAVEYARD, []{return true;}),
|
||||
Entrance(RR_KAK_BEHIND_GATE, []{return logic->IsAdult || logic->KakarikoVillageGateOpen;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_KAK_CARPENTER_BOSS_HOUSE, logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY)),
|
||||
ENTRANCE(RR_KAK_HOUSE_OF_SKULLTULA, logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY)),
|
||||
ENTRANCE(RR_KAK_IMPAS_HOUSE, logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY)),
|
||||
ENTRANCE(RR_KAK_WINDMILL, logic->CanOpenOverworldDoor(RG_WINDMILL_KEY)),
|
||||
ENTRANCE(RR_KAK_BAZAAR, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY)),
|
||||
ENTRANCE(RR_KAK_SHOOTING_GALLERY, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY)),
|
||||
ENTRANCE(RR_KAK_WELL, 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, (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY)),
|
||||
ENTRANCE(RR_KAK_REDEAD_GROTTO, logic->CanOpenBombGrotto()),
|
||||
ENTRANCE(RR_KAK_IMPAS_LEDGE, (logic->IsChild && logic->AtDay) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION))),
|
||||
ENTRANCE(RR_KAK_WATCHTOWER, logic->IsAdult || logic->AtDay || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())),
|
||||
ENTRANCE(RR_KAK_ROOFTOP, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsAdult)),
|
||||
ENTRANCE(RR_KAK_IMPAS_ROOFTOP, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_KAK_ROOFTOP_GS) && logic->CanUse(RG_HOVER_BOOTS))),
|
||||
ENTRANCE(RR_THE_GRAVEYARD, true),
|
||||
ENTRANCE(RR_KAK_BEHIND_GATE, logic->IsAdult || logic->KakarikoVillageGateOpen),
|
||||
//adult can jump from the fence near the windmill to ledgegrab the fence near granny's shop. is in logic on N64
|
||||
Entrance(RR_KAK_BACKYARD, []{return logic->IsAdult || logic->AtDay;}),
|
||||
ENTRANCE(RR_KAK_BACKYARD, logic->IsAdult || logic->AtDay),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_IMPAS_LEDGE] = Region("Kak Impas Ledge", SCENE_KAKARIKO_VILLAGE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_IMPAS_HOUSE_BACK, []{return true;}),
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAK_IMPAS_HOUSE_BACK, true),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_IMPAS_ROOFTOP] = Region("Kak Impas Rooftop", SCENE_KAKARIKO_VILLAGE, {}, {
|
||||
|
@ -92,8 +92,8 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_GS_ABOVE_IMPAS_HOUSE, logic->IsAdult && logic->CanGetNightTimeGS() && logic->CanKillEnemy(RE_GOLD_SKULLTULA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return true;}),
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAK_IMPAS_LEDGE, true),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_WATCHTOWER] = Region("Kak Watchtower", SCENE_KAKARIKO_VILLAGE, {}, {
|
||||
|
@ -102,8 +102,8 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && logic->CanUse(RG_DINS_FIRE) && logic->CanGetNightTimeGS()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_KAK_ROOFTOP, []{return ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsChild;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
ENTRANCE(RR_KAK_ROOFTOP, ctx->GetTrickOption(RT_KAK_MAN_ON_ROOF) && logic->IsChild),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_ROOFTOP] = Region("Kak Rooftop", SCENE_KAKARIKO_VILLAGE, {}, {
|
||||
|
@ -111,8 +111,8 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_MAN_ON_ROOF, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return true;}),
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAK_BACKYARD, true),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_BACKYARD] = Region("Kak Backyard", SCENE_KAKARIKO_VILLAGE, {}, {
|
||||
|
@ -122,10 +122,10 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(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_KAKARIKO_VILLAGE, true),
|
||||
ENTRANCE(RR_KAK_OPEN_GROTTO, true),
|
||||
ENTRANCE(RR_KAK_ODD_POTION_BUILDING, logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY)),
|
||||
ENTRANCE(RR_KAK_POTION_SHOP_BACK, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_CARPENTER_BOSS_HOUSE] = Region("Kak Carpenter Boss House", SCENE_KAKARIKO_CENTER_GUEST_HOUSE, {
|
||||
|
@ -133,7 +133,7 @@ void RegionTable_Init_Kakariko() {
|
|||
EVENT_ACCESS(WakeUpAdultTalon, logic->IsAdult && logic->CanUse(RG_POCKET_EGG)),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_HOUSE_OF_SKULLTULA] = Region("Kak House of Skulltula", SCENE_HOUSE_OF_SKULLTULA, {}, {
|
||||
|
@ -146,7 +146,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_100_GOLD_SKULLTULA_REWARD, logic->GetGSCount() >= 100),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_IMPAS_HOUSE] = Region("Kak Impas House", SCENE_IMPAS_HOUSE, {}, {
|
||||
|
@ -154,7 +154,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_IMPAS_HOUSE_BACK] = Region("Kak Impas House Back", SCENE_IMPAS_HOUSE, {}, {
|
||||
|
@ -163,7 +163,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_IMPAS_HOUSE_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_IMPAS_LEDGE, []{return true;}),
|
||||
ENTRANCE(RR_KAK_IMPAS_LEDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_WINDMILL] = Region("Kak Windmill", SCENE_WINDMILL_AND_DAMPES_GRAVE, {
|
||||
|
@ -175,7 +175,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_SONG_FROM_WINDMILL, logic->IsAdult && logic->HasItem(RG_FAIRY_OCARINA)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_BAZAAR] = Region("Kak Bazaar", SCENE_BAZAAR, {}, {
|
||||
|
@ -190,7 +190,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_BAZAAR_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_SHOOTING_GALLERY] = Region("Kak Shooting Gallery", SCENE_SHOOTING_GALLERY, {}, {
|
||||
|
@ -198,7 +198,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_SHOOTING_GALLERY_REWARD, logic->HasItem(RG_CHILD_WALLET) && logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_POTION_SHOP_FRONT] = Region("Kak Potion Shop Front", SCENE_POTION_SHOP_KAKARIKO, {}, {
|
||||
|
@ -213,14 +213,14 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_POTION_SHOP_ITEM_8, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
Entrance(RR_KAK_POTION_SHOP_BACK, []{return logic->IsAdult;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
ENTRANCE(RR_KAK_POTION_SHOP_BACK, logic->IsAdult),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_POTION_SHOP_BACK] = Region("Kak Potion Shop Back", SCENE_POTION_SHOP_KAKARIKO, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return logic->IsAdult;}),
|
||||
Entrance(RR_KAK_POTION_SHOP_FRONT, []{return true;}),
|
||||
ENTRANCE(RR_KAK_BACKYARD, logic->IsAdult),
|
||||
ENTRANCE(RR_KAK_POTION_SHOP_FRONT, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_ODD_POTION_BUILDING] = Region("Kak Granny's Potion Shop", SCENE_POTION_SHOP_GRANNY, {
|
||||
|
@ -232,7 +232,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_GRANNYS_SHOP, logic->IsAdult && (logic->CanUse(RG_ODD_MUSHROOM) || logic->TradeQuestStep(RG_ODD_MUSHROOM))),
|
||||
}, {
|
||||
// Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return true;}),
|
||||
ENTRANCE(RR_KAK_BACKYARD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_REDEAD_GROTTO] = Region("Kak Redead Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -240,7 +240,7 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_REDEAD_GROTTO_CHEST, logic->CanKillEnemy(RE_REDEAD, ED_CLOSE, true, 2)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_OPEN_GROTTO] = Region("Kak Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -258,19 +258,19 @@ void RegionTable_Init_Kakariko() {
|
|||
LOCATION(RC_KAK_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KAK_BACKYARD, []{return true;}),
|
||||
ENTRANCE(RR_KAK_BACKYARD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_BEHIND_GATE] = Region("Kak Behind Gate", SCENE_KAKARIKO_VILLAGE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return logic->IsAdult || ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->KakarikoVillageGateOpen;}),
|
||||
Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, logic->IsAdult || ctx->GetTrickOption(RT_VISIBLE_COLLISION) || logic->KakarikoVillageGateOpen),
|
||||
ENTRANCE(RR_DEATH_MOUNTAIN_TRAIL, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KAK_WELL] = Region("Kak Well", SCENE_KAKARIKO_VILLAGE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KAKARIKO_VILLAGE, []{return logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell;}),
|
||||
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, []{return logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF));}),
|
||||
ENTRANCE(RR_KAKARIKO_VILLAGE, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE) || logic->DrainWell),
|
||||
ENTRANCE(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, logic->IsChild || (logic->DrainWell && ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -77,16 +77,16 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_ADULT_GRASS_20, logic->IsAdult && logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KF_LINKS_HOUSE, []{return true;}),
|
||||
Entrance(RR_KF_MIDOS_HOUSE, []{return true;}),
|
||||
Entrance(RR_KF_SARIAS_HOUSE, []{return true;}),
|
||||
Entrance(RR_KF_HOUSE_OF_TWINS, []{return true;}),
|
||||
Entrance(RR_KF_KNOW_IT_ALL_HOUSE, []{return true;}),
|
||||
Entrance(RR_KF_KOKIRI_SHOP, []{return true;}),
|
||||
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_LINKS_HOUSE, true),
|
||||
ENTRANCE(RR_KF_MIDOS_HOUSE, true),
|
||||
ENTRANCE(RR_KF_SARIAS_HOUSE, true),
|
||||
ENTRANCE(RR_KF_HOUSE_OF_TWINS, true),
|
||||
ENTRANCE(RR_KF_KNOW_IT_ALL_HOUSE, true),
|
||||
ENTRANCE(RR_KF_KOKIRI_SHOP, true),
|
||||
ENTRANCE(RR_KF_OUTSIDE_DEKU_TREE, (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, true),
|
||||
ENTRANCE(RR_LW_BRIDGE_FROM_FOREST, logic->IsAdult || ctx->GetOption(RSK_FOREST).IsNot(RO_CLOSED_FOREST_ON) || logic->DekuTreeClear),
|
||||
ENTRANCE(RR_KF_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_OUTSIDE_DEKU_TREE] = Region("KF Outside Deku Tree", SCENE_KOKIRI_FOREST, {
|
||||
|
@ -104,8 +104,8 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_DEKU_TREE_RIGHT_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_DEKU_TREE_ENTRYWAY, []{return logic->IsChild || (ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) && (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield));}),
|
||||
Entrance(RR_KOKIRI_FOREST, []{return (logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->ForestTempleClear)) || ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield;}),
|
||||
ENTRANCE(RR_DEKU_TREE_ENTRYWAY, logic->IsChild || (ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).IsNot(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) && (ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield))),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, (logic->IsAdult && (logic->CanPassEnemy(RE_BIG_SKULLTULA) || logic->ForestTempleClear)) || ctx->GetOption(RSK_FOREST).Is(RO_CLOSED_FOREST_OFF) || logic->ShowedMidoSwordAndShield),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_LINKS_HOUSE] = Region("KF Link's House", SCENE_LINKS_HOUSE, {}, {
|
||||
|
@ -114,7 +114,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_LINKS_HOUSE_POT, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true)
|
||||
});
|
||||
|
||||
areaTable[RR_KF_MIDOS_HOUSE] = Region("KF Mido's House", SCENE_MIDOS_HOUSE, {}, {
|
||||
|
@ -125,7 +125,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_MIDOS_BOTTOM_RIGHT_CHEST, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_SARIAS_HOUSE] = Region("KF Saria's House", SCENE_SARIAS_HOUSE, {}, {
|
||||
|
@ -136,7 +136,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_SARIAS_BOTTOM_RIGHT_HEART, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_HOUSE_OF_TWINS] = Region("KF House of Twins", SCENE_TWINS_HOUSE, {}, {
|
||||
|
@ -145,7 +145,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_TWINS_HOUSE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_KNOW_IT_ALL_HOUSE] = Region("KF Know It All House", SCENE_KNOW_IT_ALL_BROS_HOUSE, {}, {
|
||||
|
@ -154,7 +154,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_BROTHERS_HOUSE_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_KOKIRI_SHOP] = Region("KF Kokiri Shop", SCENE_KOKIRI_SHOP, {}, {
|
||||
|
@ -169,7 +169,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_SHOP_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
});
|
||||
|
||||
areaTable[RR_KF_STORMS_GROTTO] = Region("KF Storms Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -187,7 +187,7 @@ void RegionTable_Init_KokiriForest() {
|
|||
LOCATION(RC_KF_STORMS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true)
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -83,36 +83,36 @@ void RegionTable_Init_LakeHylia() {
|
|||
LOCATION(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_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_FROM_WATER_TEMPLE, []{return true;}),
|
||||
Entrance(RR_LH_GROTTO, []{return true;}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_LH_FROM_SHORTCUT, true),
|
||||
ENTRANCE(RR_LH_OWL_FLIGHT, logic->IsChild),
|
||||
ENTRANCE(RR_LH_FISHING_ISLAND, ((logic->IsChild || logic->WaterTempleClear) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && (logic->CanUse(RG_SCARECROW) || CanPlantBean(RR_LAKE_HYLIA)))),
|
||||
ENTRANCE(RR_LH_LAB, logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY)),
|
||||
ENTRANCE(RR_LH_FROM_WATER_TEMPLE, true),
|
||||
ENTRANCE(RR_LH_GROTTO, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_FROM_SHORTCUT] = Region("LH From Shortcut", SCENE_LAKE_HYLIA, TIME_DOESNT_PASS, {RA_LAKE_HYLIA}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->Hearts() > 1 || logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, logic->Hearts() > 1 || logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_FROM_WATER_TEMPLE] = Region("LH From Water Temple", SCENE_LAKE_HYLIA, TIME_DOESNT_PASS, {RA_LAKE_HYLIA}, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_WATER_TEMPLE_ENTRYWAY, []{return logic->CanUse(RG_HOOKSHOT) && ((logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_LH_WATER_HOOKSHOT) && logic->HasItem(RG_GOLDEN_SCALE))) || (logic->IsAdult && logic->CanUse(RG_LONGSHOT) && logic->HasItem(RG_GOLDEN_SCALE)));}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, logic->HasItem(RG_BRONZE_SCALE) || logic->HasItem(RG_BOTTLE_WITH_FAIRY) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_WATER_TEMPLE_ENTRYWAY, logic->CanUse(RG_HOOKSHOT) && ((logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_LH_WATER_HOOKSHOT) && logic->HasItem(RG_GOLDEN_SCALE))) || (logic->IsAdult && logic->CanUse(RG_LONGSHOT) && logic->HasItem(RG_GOLDEN_SCALE)))),
|
||||
});
|
||||
|
||||
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_LAKE_HYLIA, logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_LH_FISHING_POND, logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_OWL_FLIGHT] = Region("LH Owl Flight", SCENE_LAKE_HYLIA, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}, false),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true, false),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_LAB] = Region("LH Lab", SCENE_LAKESIDE_LABORATORY, {}, {
|
||||
|
@ -126,7 +126,7 @@ void RegionTable_Init_LakeHylia() {
|
|||
LOCATION(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, true),
|
||||
});
|
||||
|
||||
// TODO: should some of these helpers be done via events instead?
|
||||
|
@ -171,7 +171,7 @@ void RegionTable_Init_LakeHylia() {
|
|||
LOCATION(RC_FISHING_POLE_HINT, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LH_FISHING_ISLAND, []{return true;}),
|
||||
ENTRANCE(RR_LH_FISHING_ISLAND, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LH_GROTTO] = Region("LH Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -182,7 +182,7 @@ void RegionTable_Init_LakeHylia() {
|
|||
LOCATION(RC_LH_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LAKE_HYLIA, []{return true;}),
|
||||
ENTRANCE(RR_LAKE_HYLIA, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -26,11 +26,11 @@ void RegionTable_Init_LonLonRanch() {
|
|||
LOCATION(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_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_LLR_TALONS_HOUSE, logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY)),
|
||||
ENTRANCE(RR_LLR_STABLES, logic->CanOpenOverworldDoor(RG_STABLES_KEY)),
|
||||
ENTRANCE(RR_LLR_TOWER, logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY)),
|
||||
ENTRANCE(RR_LLR_GROTTO, logic->IsChild),
|
||||
});
|
||||
|
||||
areaTable[RR_LLR_TALONS_HOUSE] = Region("LLR Talons House", SCENE_LON_LON_BUILDINGS, {}, {
|
||||
|
@ -41,7 +41,7 @@ void RegionTable_Init_LonLonRanch() {
|
|||
LOCATION(RC_LLR_TALONS_HOUSE_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
ENTRANCE(RR_LON_LON_RANCH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LLR_STABLES] = Region("LLR Stables", SCENE_STABLE, {}, {
|
||||
|
@ -50,7 +50,7 @@ void RegionTable_Init_LonLonRanch() {
|
|||
LOCATION(RC_LLR_STABLES_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
ENTRANCE(RR_LON_LON_RANCH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LLR_TOWER] = Region("LLR Tower", SCENE_LON_LON_BUILDINGS, {}, {
|
||||
|
@ -60,7 +60,7 @@ void RegionTable_Init_LonLonRanch() {
|
|||
LOCATION(RC_LLR_TOWER_RIGHT_COW, logic->CanUse(RG_EPONAS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
ENTRANCE(RR_LON_LON_RANCH, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LLR_GROTTO] = Region("LLR Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -71,7 +71,7 @@ void RegionTable_Init_LonLonRanch() {
|
|||
LOCATION(RC_LLR_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LON_LON_RANCH, []{return true;}),
|
||||
ENTRANCE(RR_LON_LON_RANCH, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -7,7 +7,7 @@ void RegionTable_Init_LostWoods() {
|
|||
// clang-format off
|
||||
areaTable[RR_LW_FOREST_EXIT] = Region("LW Forest Exit", SCENE_LOST_WOODS, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;})
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true)
|
||||
});
|
||||
|
||||
areaTable[RR_THE_LOST_WOODS] = Region("Lost Woods", SCENE_LOST_WOODS, {
|
||||
|
@ -55,12 +55,12 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_GRASS_3, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_FOREST_EXIT, []{return true;}),
|
||||
Entrance(RR_GC_WOODS_WARP, []{return true;}),
|
||||
Entrance(RR_LW_BRIDGE, []{return (logic->IsAdult && (CanPlantBean(RR_THE_LOST_WOODS) || ctx->GetTrickOption(RT_LW_BRIDGE))) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT);}),
|
||||
Entrance(RR_ZR_FROM_SHORTCUT, []{return logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_LOST_WOOD_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash());}),
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return logic->IsChild || logic->CanUse(RG_SARIAS_SONG) || ctx->GetTrickOption(RT_LW_MIDO_BACKFLIP);}),
|
||||
Entrance(RR_LW_NEAR_SHORTCUTS_GROTTO, []{return Here(RR_THE_LOST_WOODS, []{return logic->BlastOrSmash();});}),
|
||||
ENTRANCE(RR_LW_FOREST_EXIT, true),
|
||||
ENTRANCE(RR_GC_WOODS_WARP, true),
|
||||
ENTRANCE(RR_LW_BRIDGE, (logic->IsAdult && (CanPlantBean(RR_THE_LOST_WOODS) || ctx->GetTrickOption(RT_LW_BRIDGE))) || logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT)),
|
||||
ENTRANCE(RR_ZR_FROM_SHORTCUT, logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_LOST_WOOD_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash())),
|
||||
ENTRANCE(RR_LW_BEYOND_MIDO, logic->IsChild || logic->CanUse(RG_SARIAS_SONG) || ctx->GetTrickOption(RT_LW_MIDO_BACKFLIP)),
|
||||
ENTRANCE(RR_LW_NEAR_SHORTCUTS_GROTTO, Here(RR_THE_LOST_WOODS, []{return logic->BlastOrSmash();})),
|
||||
});
|
||||
|
||||
areaTable[RR_LW_BEYOND_MIDO] = Region("LW Beyond Mido", SCENE_LOST_WOODS, {
|
||||
|
@ -84,11 +84,11 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_GRASS_9, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_FOREST_EXIT, []{return true;}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return logic->IsChild || logic->CanUse(RG_SARIAS_SONG);}),
|
||||
Entrance(RR_SFM_ENTRYWAY, []{return true;}),
|
||||
Entrance(RR_DEKU_THEATER, []{return true;}),
|
||||
Entrance(RR_LW_SCRUBS_GROTTO, []{return Here(RR_LW_BEYOND_MIDO, []{return logic->BlastOrSmash();});}),
|
||||
ENTRANCE(RR_LW_FOREST_EXIT, true),
|
||||
ENTRANCE(RR_THE_LOST_WOODS, logic->IsChild || logic->CanUse(RG_SARIAS_SONG)),
|
||||
ENTRANCE(RR_SFM_ENTRYWAY, true),
|
||||
ENTRANCE(RR_DEKU_THEATER, true),
|
||||
ENTRANCE(RR_LW_SCRUBS_GROTTO, Here(RR_LW_BEYOND_MIDO, []{return logic->BlastOrSmash();})),
|
||||
});
|
||||
|
||||
areaTable[RR_LW_NEAR_SHORTCUTS_GROTTO] = Region("LW Near Shortcuts Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -106,7 +106,7 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_NEAR_SHORTCUTS_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_LOST_WOODS, []{return true;}),
|
||||
ENTRANCE(RR_THE_LOST_WOODS, true),
|
||||
});
|
||||
|
||||
areaTable[RR_DEKU_THEATER] = Region("Deku Theater", SCENE_GROTTOS, {}, {
|
||||
|
@ -115,7 +115,7 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_DEKU_THEATER_MASK_OF_TRUTH, logic->IsChild && logic->BorrowRightMasks),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
ENTRANCE(RR_LW_BEYOND_MIDO, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LW_SCRUBS_GROTTO] = Region("LW Scrubs Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -126,7 +126,7 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BEYOND_MIDO, []{return true;}),
|
||||
ENTRANCE(RR_LW_BEYOND_MIDO, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LW_BRIDGE_FROM_FOREST] = Region("LW Bridge From Forest", SCENE_LOST_WOODS, {}, {
|
||||
|
@ -134,14 +134,14 @@ void RegionTable_Init_LostWoods() {
|
|||
LOCATION(RC_LW_GIFT_FROM_SARIA, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_LW_BRIDGE, []{return true;}),
|
||||
ENTRANCE(RR_LW_BRIDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_LW_BRIDGE] = Region("LW Bridge", SCENE_LOST_WOODS, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_KOKIRI_FOREST, []{return true;}),
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
Entrance(RR_THE_LOST_WOODS, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
ENTRANCE(RR_KOKIRI_FOREST, true),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
ENTRANCE(RR_THE_LOST_WOODS, logic->CanUse(RG_LONGSHOT)),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -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_THE_MARKET, []{return true;}),
|
||||
Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}),
|
||||
ENTRANCE(RR_HYRULE_FIELD, logic->IsAdult || logic->AtDay),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
ENTRANCE(RR_MARKET_GUARD_HOUSE, logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_THE_MARKET] = Region("Market", SCENE_MARKET_DAY, {}, {
|
||||
|
@ -29,24 +29,24 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, logic->IsChild /*&& logic->CanRoll()*/),
|
||||
}, {
|
||||
//Exits
|
||||
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_ENTRANCE, true),
|
||||
ENTRANCE(RR_TOT_ENTRANCE, true),
|
||||
ENTRANCE(RR_CASTLE_GROUNDS, true),
|
||||
ENTRANCE(RR_MARKET_BAZAAR, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY)),
|
||||
ENTRANCE(RR_MARKET_MASK_SHOP, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY)),
|
||||
ENTRANCE(RR_MARKET_SHOOTING_GALLERY, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY)),
|
||||
ENTRANCE(RR_MARKET_BOMBCHU_BOWLING, logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY)),
|
||||
ENTRANCE(RR_MARKET_TREASURE_CHEST_GAME, logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY)),
|
||||
ENTRANCE(RR_MARKET_POTION_SHOP, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY)),
|
||||
ENTRANCE(RR_MARKET_BACK_ALLEY, logic->IsChild),
|
||||
});
|
||||
|
||||
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_THE_MARKET, true),
|
||||
ENTRANCE(RR_MARKET_BOMBCHU_SHOP, logic->AtNight && logic->CanOpenOverworldDoor(RG_BOMBCHU_SHOP_KEY)),
|
||||
ENTRANCE(RR_MARKET_DOG_LADY_HOUSE, logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY)),
|
||||
ENTRANCE(RR_MARKET_MAN_IN_GREEN_HOUSE, logic->AtNight && logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY)),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_GUARD_HOUSE] = Region("Market Guard House", SCENE_MARKET_GUARD_HOUSE, {
|
||||
|
@ -118,7 +118,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_MARKET_ENTRANCE, []{return true;}),
|
||||
ENTRANCE(RR_MARKET_ENTRANCE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_BAZAAR] = Region("Market Bazaar", SCENE_BAZAAR, {}, {
|
||||
|
@ -133,7 +133,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MARKET_BAZAAR_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_MASK_SHOP] = Region("Market Mask Shop", SCENE_HAPPY_MASK_SHOP, {
|
||||
|
@ -151,7 +151,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MASK_SHOP_HINT, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_SHOOTING_GALLERY] = Region("Market Shooting Gallery", SCENE_SHOOTING_GALLERY, {}, {
|
||||
|
@ -159,7 +159,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MARKET_SHOOTING_GALLERY_REWARD, logic->IsChild && logic->HasItem(RG_CHILD_WALLET)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_BOMBCHU_BOWLING] = Region("Market Bombchu Bowling", SCENE_BOMBCHU_BOWLING_ALLEY, {
|
||||
|
@ -171,7 +171,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MARKET_BOMBCHU_BOWLING_SECOND_PRIZE, logic->CouldPlayBowling && logic->BombchusEnabled()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_POTION_SHOP] = Region("Market Potion Shop", SCENE_POTION_SHOP_MARKET, {}, {
|
||||
|
@ -186,7 +186,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MARKET_POTION_SHOP_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_TREASURE_CHEST_GAME] = Region("Market Treasure Chest Game", SCENE_TREASURE_BOX_SHOP, {}, {
|
||||
|
@ -205,7 +205,7 @@ void RegionTable_Init_Market() {
|
|||
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)))),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_BOMBCHU_SHOP] = Region("Market Bombchu Shop", SCENE_BOMBCHU_SHOP, {}, {
|
||||
|
@ -220,7 +220,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MARKET_BOMBCHU_SHOP_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
||||
ENTRANCE(RR_MARKET_BACK_ALLEY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", SCENE_DOG_LADY_HOUSE, {}, {
|
||||
|
@ -229,7 +229,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
||||
ENTRANCE(RR_MARKET_BACK_ALLEY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_MARKET_MAN_IN_GREEN_HOUSE] = Region("Market Man in Green House", SCENE_BACK_ALLEY_HOUSE, {}, {
|
||||
|
@ -239,7 +239,7 @@ void RegionTable_Init_Market() {
|
|||
LOCATION(RC_MK_BACK_ALLEY_HOUSE_POT_3, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_MARKET_BACK_ALLEY, []{return true;}),
|
||||
ENTRANCE(RR_MARKET_BACK_ALLEY, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -7,9 +7,9 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
// clang-format off
|
||||
areaTable[RR_SFM_ENTRYWAY] = Region("SFM Entryway", SCENE_SACRED_FOREST_MEADOW, {}, {}, {
|
||||
//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_LW_BEYOND_MIDO, true),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, logic->IsAdult || logic->CanKillEnemy(RE_WOLFOS)),
|
||||
ENTRANCE(RR_SFM_WOLFOS_GROTTO, logic->CanOpenBombGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_SACRED_FOREST_MEADOW] = Region("Sacred Forest Meadow", SCENE_SACRED_FOREST_MEADOW, {
|
||||
|
@ -31,10 +31,10 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
LOCATION(RC_SFM_SARIA_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
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_ENTRYWAY, true),
|
||||
ENTRANCE(RR_FOREST_TEMPLE_ENTRYWAY, logic->CanUse(RG_HOOKSHOT)),
|
||||
ENTRANCE(RR_SFM_FAIRY_GROTTO, true),
|
||||
ENTRANCE(RR_SFM_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_SFM_FAIRY_GROTTO] = Region("SFM Fairy Grotto", SCENE_GROTTOS, {
|
||||
|
@ -52,7 +52,7 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
LOCATION(RC_SFM_FAIRY_GROTTO_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SFM_WOLFOS_GROTTO] = Region("SFM Wolfos Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -60,7 +60,7 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
LOCATION(RC_SFM_WOLFOS_GROTTO_CHEST, logic->CanKillEnemy(RE_WOLFOS, ED_CLOSE, true, 2)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SFM_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_SFM_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_SFM_STORMS_GROTTO] = Region("SFM Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -70,7 +70,7 @@ void RegionTable_Init_SacredForestMeadow() {
|
|||
LOCATION(RC_SFM_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_SACRED_FOREST_MEADOW, []{return true;}),
|
||||
ENTRANCE(RR_SACRED_FOREST_MEADOW, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -24,8 +24,8 @@ void RegionTable_Init_TempleOfTime() {
|
|||
LOCATION(RC_TOT_RIGHTMOST_GOSSIP_STONE, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_THE_MARKET, []{return true;}),
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
ENTRANCE(RR_THE_MARKET, true),
|
||||
ENTRANCE(RR_TEMPLE_OF_TIME, true),
|
||||
});
|
||||
|
||||
areaTable[RR_TEMPLE_OF_TIME] = Region("Temple of Time", SCENE_TEMPLE_OF_TIME, {}, {
|
||||
|
@ -36,8 +36,8 @@ void RegionTable_Init_TempleOfTime() {
|
|||
LOCATION(RC_TOT_SHEIK_HINT, logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_TOT_ENTRANCE, []{return true;}),
|
||||
Entrance(RR_TOT_BEYOND_DOOR_OF_TIME, []{return ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN) || (logic->CanUse(RG_SONG_OF_TIME) && (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY) || (logic->StoneCount() == 3 && logic->HasItem(RG_OCARINA_OF_TIME))));}),
|
||||
ENTRANCE(RR_TOT_ENTRANCE, true),
|
||||
ENTRANCE(RR_TOT_BEYOND_DOOR_OF_TIME, ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_OPEN) || (logic->CanUse(RG_SONG_OF_TIME) && (ctx->GetOption(RSK_DOOR_OF_TIME).Is(RO_DOOROFTIME_SONGONLY) || (logic->StoneCount() == 3 && logic->HasItem(RG_OCARINA_OF_TIME))))),
|
||||
});
|
||||
|
||||
areaTable[RR_TOT_BEYOND_DOOR_OF_TIME] = Region("Beyond Door of Time", SCENE_TEMPLE_OF_TIME, {
|
||||
|
@ -50,7 +50,7 @@ void RegionTable_Init_TempleOfTime() {
|
|||
LOCATION(RC_SHEIK_AT_TEMPLE, logic->HasItem(RG_FOREST_MEDALLION) && logic->IsAdult),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_TEMPLE_OF_TIME, []{return true;}),
|
||||
ENTRANCE(RR_TEMPLE_OF_TIME, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -37,17 +37,17 @@ void RegionTable_Init_ZorasDomain() {
|
|||
LOCATION(RC_ZD_NEAR_SHOP_POT_5, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZR_BEHIND_WATERFALL, []{return true;}),
|
||||
Entrance(RR_LH_FROM_SHORTCUT, []{return logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS));}),
|
||||
Entrance(RR_ZD_BEHIND_KING_ZORA, []{return logic->DeliverLetter || ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult) || (ctx->GetTrickOption(RT_ZD_KING_ZORA_SKIP) && logic->IsAdult);}),
|
||||
Entrance(RR_ZD_SHOP, []{return logic->IsChild || logic->BlueFire();}),
|
||||
Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}),
|
||||
ENTRANCE(RR_ZR_BEHIND_WATERFALL, true),
|
||||
ENTRANCE(RR_LH_FROM_SHORTCUT, logic->IsChild && (logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS))),
|
||||
ENTRANCE(RR_ZD_BEHIND_KING_ZORA, logic->DeliverLetter || ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_OPEN) || (ctx->GetOption(RSK_ZORAS_FOUNTAIN).Is(RO_ZF_CLOSED_CHILD) && logic->IsAdult) || (ctx->GetTrickOption(RT_ZD_KING_ZORA_SKIP) && logic->IsAdult)),
|
||||
ENTRANCE(RR_ZD_SHOP, logic->IsChild || logic->BlueFire()),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN_ISLAND, true),
|
||||
});
|
||||
|
||||
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_ZORAS_DOMAIN, logic->IsAdult || logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_ZD_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
});
|
||||
|
||||
areaTable[RR_ZD_BEHIND_KING_ZORA] = Region("ZD Behind King Zora", SCENE_ZORAS_DOMAIN, {
|
||||
|
@ -58,8 +58,8 @@ void RegionTable_Init_ZorasDomain() {
|
|||
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_FOUNTAIN, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN, 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_FOUNTAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZD_SHOP] = Region("ZD Shop", SCENE_ZORA_SHOP, {}, {
|
||||
|
@ -74,7 +74,7 @@ void RegionTable_Init_ZorasDomain() {
|
|||
LOCATION(RC_ZD_SHOP_ITEM_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZD_STORMS_GROTTO] = Region("ZD Storms Grotto", SCENE_GROTTOS, {
|
||||
|
@ -92,7 +92,7 @@ void RegionTable_Init_ZorasDomain() {
|
|||
LOCATION(RC_ZD_FAIRY_GROTTO_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_DOMAIN_ISLAND, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN_ISLAND, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -25,14 +25,14 @@ void RegionTable_Init_ZorasFountain() {
|
|||
LOCATION(RC_ZF_NEAR_JABU_POT_4, logic->IsChild && logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZD_BEHIND_KING_ZORA, []{return true;}),
|
||||
Entrance(RR_ZF_ICEBERGS, []{return logic->IsAdult;}),
|
||||
Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
ENTRANCE(RR_ZD_BEHIND_KING_ZORA, true),
|
||||
ENTRANCE(RR_ZF_ICEBERGS, logic->IsAdult),
|
||||
ENTRANCE(RR_ZF_LAKEBED, logic->CanUse(RG_IRON_BOOTS)),
|
||||
//child can break the brown rock without lifting the silver rock and it stays gone for adult, but it's not intuitive and there's no reasonable case where it matters.
|
||||
Entrance(RR_ZF_HIDDEN_CAVE, []{return logic->CanUse(RG_SILVER_GAUNTLETS) && logic->BlastOrSmash();}),
|
||||
Entrance(RR_ZF_ROCK, []{return logic->IsAdult && logic->CanUse(RG_SCARECROW);}),
|
||||
Entrance(RR_JABU_JABUS_BELLY_ENTRYWAY, []{return logic->IsChild && (ctx->GetOption(RSK_JABU_OPEN).Is(RO_JABU_OPEN) || logic->CanUse(RG_BOTTLE_WITH_FISH));}),
|
||||
Entrance(RR_ZF_GREAT_FAIRY_FOUNTAIN, []{return logic->HasExplosives() || (ctx->GetTrickOption(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES) && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_SILVER_GAUNTLETS));}),
|
||||
ENTRANCE(RR_ZF_HIDDEN_CAVE, logic->CanUse(RG_SILVER_GAUNTLETS) && logic->BlastOrSmash()),
|
||||
ENTRANCE(RR_ZF_ROCK, logic->IsAdult && logic->CanUse(RG_SCARECROW)),
|
||||
ENTRANCE(RR_JABU_JABUS_BELLY_ENTRYWAY, logic->IsChild && (ctx->GetOption(RSK_JABU_OPEN).Is(RO_JABU_OPEN) || logic->CanUse(RG_BOTTLE_WITH_FISH))),
|
||||
ENTRANCE(RR_ZF_GREAT_FAIRY_FOUNTAIN, logic->HasExplosives() || (ctx->GetTrickOption(RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES) && logic->CanUse(RG_MEGATON_HAMMER) && logic->CanUse(RG_SILVER_GAUNTLETS))),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_ICEBERGS] = Region("ZF Icebergs", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
|
@ -41,9 +41,9 @@ void RegionTable_Init_ZorasFountain() {
|
|||
}, {
|
||||
//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
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS);}),
|
||||
Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ZF_LEDGE, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOVER_BOOTS)),
|
||||
ENTRANCE(RR_ZF_LAKEBED, logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_ZF_LEDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_LAKEBED] = Region("ZF Lakebed", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
|
@ -69,15 +69,15 @@ void RegionTable_Init_ZorasFountain() {
|
|||
LOCATION(RC_ZF_BOTTOM_NORTHWEST_OUTER_RUPEE, logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, logic->HasItem(RG_BRONZE_SCALE)),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_LEDGE] = Region("ZF Ledge", SCENE_ZORAS_FOUNTAIN, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE);}),
|
||||
Entrance(RR_ZF_ICEBERGS, []{return logic->IsAdult;}),
|
||||
Entrance(RR_ZF_LAKEBED, []{return logic->CanUse(RG_IRON_BOOTS);}),
|
||||
Entrance(RR_ICE_CAVERN_ENTRYWAY, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, logic->HasItem(RG_BRONZE_SCALE)),
|
||||
ENTRANCE(RR_ZF_ICEBERGS, logic->IsAdult),
|
||||
ENTRANCE(RR_ZF_LAKEBED, logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_ICE_CAVERN_ENTRYWAY, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_HIDDEN_CAVE] = Region("ZF Hidden Cave", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
|
@ -89,7 +89,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
//Exits
|
||||
//There are invisible big skultullas here as adult but they do not block the path and can be "seen" with Z-target
|
||||
//Lens is not currently needed for this either, implying they are not considered blocking, but it's open for discussion long-term
|
||||
Entrance(RR_ZF_HIDDEN_LEDGE, []{return true;}),
|
||||
ENTRANCE(RR_ZF_HIDDEN_LEDGE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_HIDDEN_LEDGE] = Region("ZF Hidden Ledge", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
|
@ -98,8 +98,8 @@ void RegionTable_Init_ZorasFountain() {
|
|||
}, {
|
||||
//Exits
|
||||
//It is possible to avoid fall damage by jumping towards the right and landing in deeper water, but this is basically never relevent
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage();}),
|
||||
Entrance(RR_ZF_HIDDEN_CAVE, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, logic->HasItem(RG_BRONZE_SCALE) || logic->TakeDamage()),
|
||||
ENTRANCE(RR_ZF_HIDDEN_CAVE, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_ROCK] = Region("ZF Rock", SCENE_ZORAS_FOUNTAIN, {}, {
|
||||
|
@ -107,7 +107,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
//Has a wonder item
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZF_GREAT_FAIRY_FOUNTAIN] = Region("ZF Great Fairy Fountain", SCENE_GREAT_FAIRYS_FOUNTAIN_SPELLS, {}, {
|
||||
|
@ -115,7 +115,7 @@ void RegionTable_Init_ZorasFountain() {
|
|||
LOCATION(RC_ZF_GREAT_FAIRY_REWARD, logic->CanUse(RG_ZELDAS_LULLABY)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_FOUNTAIN, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_FOUNTAIN, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
|
@ -22,8 +22,8 @@ void RegionTable_Init_ZoraRiver() {
|
|||
LOCATION(RC_ZR_GRASS_12, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return logic->IsAdult || logic->BlastOrSmash();}),
|
||||
Entrance(RR_HYRULE_FIELD, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_RIVER, logic->IsAdult || logic->BlastOrSmash()),
|
||||
ENTRANCE(RR_HYRULE_FIELD, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZORAS_RIVER] = Region("Zora River", SCENE_ZORAS_RIVER, {
|
||||
|
@ -63,12 +63,12 @@ void RegionTable_Init_ZoraRiver() {
|
|||
LOCATION(RC_ZR_NEAR_FREESTANDING_POH_GRASS, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//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_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_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));}),
|
||||
ENTRANCE(RR_ZR_FRONT, true),
|
||||
ENTRANCE(RR_ZR_OPEN_GROTTO, true),
|
||||
ENTRANCE(RR_ZR_FAIRY_GROTTO, Here(RR_ZORAS_RIVER, []{return logic->BlastOrSmash();})),
|
||||
ENTRANCE(RR_THE_LOST_WOODS, logic->HasItem(RG_SILVER_SCALE) || logic->CanUse(RG_IRON_BOOTS)),
|
||||
ENTRANCE(RR_ZR_STORMS_GROTTO, logic->CanOpenStormsGrotto()),
|
||||
ENTRANCE(RR_ZR_BEHIND_WATERFALL, 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))),
|
||||
});
|
||||
|
||||
areaTable[RR_ZR_FROM_SHORTCUT] = Region("ZR From Shortcut", SCENE_ZORAS_RIVER, TIME_DOESNT_PASS, {RA_ZORAS_RIVER}, {}, {}, {
|
||||
|
@ -79,8 +79,8 @@ void RegionTable_Init_ZoraRiver() {
|
|||
|
||||
areaTable[RR_ZR_BEHIND_WATERFALL] = Region("ZR Behind Waterfall", SCENE_ZORAS_RIVER, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||
Entrance(RR_ZORAS_DOMAIN, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_RIVER, true),
|
||||
ENTRANCE(RR_ZORAS_DOMAIN, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZR_OPEN_GROTTO] = Region("ZR Open Grotto", SCENE_GROTTOS, grottoEvents, {
|
||||
|
@ -98,7 +98,7 @@ void RegionTable_Init_ZoraRiver() {
|
|||
LOCATION(RC_ZR_OPEN_GROTTO_GRASS_4, logic->CanCutShrubs()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_RIVER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZR_FAIRY_GROTTO] = Region("ZR Fairy Grotto", SCENE_GROTTOS, {
|
||||
|
@ -116,7 +116,7 @@ void RegionTable_Init_ZoraRiver() {
|
|||
LOCATION(RC_ZR_FAIRY_GROTTO_FAIRY_8, true),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_RIVER, true),
|
||||
});
|
||||
|
||||
areaTable[RR_ZR_STORMS_GROTTO] = Region("ZR Storms Grotto", SCENE_GROTTOS, {}, {
|
||||
|
@ -126,7 +126,7 @@ void RegionTable_Init_ZoraRiver() {
|
|||
LOCATION(RC_ZR_STORMS_GROTTO_BEEHIVE, logic->CanBreakUpperBeehives()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_ZORAS_RIVER, []{return true;}),
|
||||
ENTRANCE(RR_ZORAS_RIVER, true),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue