diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index f364ca477..6036cd5b2 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -300,7 +300,7 @@ void Rando::StaticData::RegisterCrateLocations() { registered = true; // clang-format off // Overworld Crates - // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check locationTable[RC_GV_FREESTANDING_POH_CRATE] = Location::Crate(RC_GV_FREESTANDING_POH_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-350, 1480), "Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_CRATE)); locationTable[RC_GV_NEAR_COW_CRATE] = Location::Crate(RC_GV_NEAR_COW_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-449, 123), "Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE)); locationTable[RC_GF_ABOVE_JAIL_CRATE] = Location::Crate(RC_GF_ABOVE_JAIL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(51, -2997), "Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp index 468f8d796..73a4ef0d9 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp @@ -3,345 +3,247 @@ using namespace Rando; +// clang-format off void RegionTable_Init_GerudoFortress() { #pragma region Ground - areaTable[RR_GF_OUTSKIRTS] = Region( - "Gerudo Fortress Outskirts", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->GF_GateOpen, - [] { return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD); }), // needs climb - }, - { - // Locations - LOCATION(RC_GF_OUTSKIRTS_NE_CRATE, - (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates()), - LOCATION(RC_GF_OUTSKIRTS_NW_CRATE, logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)), - }, - { - // Exits - Entrance(RR_GV_FORTRESS_SIDE, [] { return true; }), - Entrance(RR_GF_OUTSIDE_GATE, [] { return logic->GF_GateOpen; }), - Entrance(RR_TH_1_TORCH_CELL, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - Entrance(RR_GF_OUTSIDE_GTG, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - // As of now there is no infinitly repeatable way to get thrown in jail, once one is added getting here only - // needs hookshot from jail - Entrance(RR_GF_JAIL_WINDOW, [] { return logic->CanUse(RG_LONGSHOT); }), - }); + areaTable[RR_GF_OUTSKIRTS] = Region("Gerudo Fortress Outskirts", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}), //needs climb + }, { + //Locations + LOCATION(RC_GF_OUTSKIRTS_NE_CRATE, (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSKIRTS_NW_CRATE, logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)), + }, { + //Exits + Entrance(RR_GV_FORTRESS_SIDE, []{return true;}), + Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}), + Entrance(RR_TH_1_TORCH_CELL, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + //As of now there is no infinitly repeatable way to get thrown in jail, once one is added getting here only needs hookshot from jail + Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_LONGSHOT);}), + }); - areaTable[RR_GF_NEAR_GROTTO] = - Region("GF Near Grotto", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_SOUTHMOST_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_MID_SOUTH_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_MID_NORTH_CENTER_CRATE, logic->CanBreakCrates()), - LOCATION(RR_GF_NORTHMOST_CENTER_CRATE, logic->CanBreakCrates()), - }, - { - // Exits - Entrance(RR_TH_KITCHEN_CORRIDOR, [] { return true; }), - Entrance(RR_TH_1_TORCH_CELL, [] { return true; }), - Entrance(RR_TH_DOUBLE_CELL, [] { return true; }), - Entrance(RR_GF_STORMS_GROTTO, [] { return logic->IsAdult && logic->CanOpenStormsGrotto(); }), - Entrance(RR_GF_TOP_OF_UPPER_VINES, [] { return logic->CanUse(RG_LONGSHOT); }), - Entrance(RR_GF_OUTSIDE_GTG, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - }); + areaTable[RR_GF_NEAR_GROTTO] = Region("GF Near Grotto", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_SOUTHMOST_CENTER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_MID_SOUTH_CENTER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_MID_NORTH_CENTER_CRATE, logic->CanBreakCrates()), + LOCATION(RR_GF_NORTHMOST_CENTER_CRATE, logic->CanBreakCrates()), + }, { + //Exits + Entrance(RR_TH_KITCHEN_CORRIDOR, []{return true;}), + Entrance(RR_TH_1_TORCH_CELL, []{return true;}), + Entrance(RR_TH_DOUBLE_CELL, []{return true;}), + Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}), + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}), + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + }); - areaTable[RR_GF_OUTSIDE_GTG] = Region( - "GF Outside GTG", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->GtG_GateOpen, - [] { - return (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && - logic->HasItem(RG_CHILD_WALLET)); - }), - }, - {}, - { - // Exits - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GTG_ENTRYWAY, - [] { - return logic->GtG_GateOpen && - (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES)); - }), - Entrance(RR_GF_NEAR_GROTTO, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - // RANDTODO: Add tricks for getting past the gerudo guarding the hba range - Entrance(RR_GF_HBA_RANGE, [] { return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD); }), - Entrance(RR_GF_ABOVE_GTG, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - Entrance(RR_GF_TOP_OF_UPPER_VINES, - [] { return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_LONGSHOT); }), - }); + areaTable[RR_GF_OUTSIDE_GTG] = Region("GF Outside GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->GtG_GateOpen, []{return (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET));}), + }, {}, { + //Exits + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GTG_ENTRYWAY, []{return logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES));}), + Entrance(RR_GF_NEAR_GROTTO, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + // RANDTODO: Add tricks for getting past the gerudo guarding the hba range + Entrance(RR_GF_HBA_RANGE, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}), + Entrance(RR_GF_ABOVE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_LONGSHOT);}), + }); #pragma endregion #pragma region Rooftops - areaTable[RR_GF_BELOW_CHEST] = - Region("GF Below Chest", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_TH_BREAK_ROOM, [] { return true; }), - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - }); + areaTable[RR_GF_BELOW_CHEST] = Region("GF Below Chest", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_TH_BREAK_ROOM, []{return true;}), + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + }); - areaTable[RR_GF_LONG_ROOF] = Region( - "GF Long Roof", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_GF_BELOW_CHEST, [] { return true; }), - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_BELOW_GS, [] { return true; }), - Entrance( - RR_GF_NEAR_GS, - [] { return (logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP)) || logic->CanUse(RG_HOVER_BOOTS); }), - Entrance(RR_GF_NEAR_CHEST, [] { return logic->CanUse(RG_LONGSHOT); }), - }); + areaTable[RR_GF_LONG_ROOF] = Region("GF Long Roof", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_GF_BELOW_CHEST, []{return true;}), + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_BELOW_GS, []{return true;}), + Entrance(RR_GF_NEAR_GS, []{return (logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP)) || logic->CanUse(RG_HOVER_BOOTS);}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), + }); - areaTable[RR_GF_ABOVE_GTG] = - Region("GF Above GTG", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_TH_KITCHEN_CORRIDOR, [] { return true; }), - // need to explicitly convert it into a bool - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0; }), - Entrance(RR_TH_DOUBLE_CELL, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GF_OUTSIDE_GTG, [] { return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD); }), - }); + areaTable[RR_GF_ABOVE_GTG] = Region("GF Above GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_TH_KITCHEN_CORRIDOR, []{return true;}), + // need to explicitly convert it into a bool + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0 ;}), + Entrance(RR_TH_DOUBLE_CELL, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + }); - areaTable[RR_GF_BOTTOM_OF_LOWER_VINES] = - Region("GF Bottom of Lower Vines", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_TH_STEEP_SLOPE_CELL, [] { return true; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true /* logic->CanClimb() */; }), - Entrance(RR_GF_ABOVE_GTG, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - }); + areaTable[RR_GF_BOTTOM_OF_LOWER_VINES] = Region("GF Bottom of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_TH_STEEP_SLOPE_CELL, []{return true;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true /* logic->CanClimb() */;}), + Entrance(RR_GF_ABOVE_GTG, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + }); - areaTable[RR_GF_TOP_OF_LOWER_VINES] = - Region("GF Top of Lower Vines", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_TH_KITCHEN_TOP, [] { return true; }), - Entrance(RR_TH_DOUBLE_CELL, [] { return true; }), - // need to explicitly convert it into a bool - Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, [] { return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0; }), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - Entrance(RR_GF_ABOVE_GTG, [] { return true; }), - }); + areaTable[RR_GF_TOP_OF_LOWER_VINES] = Region("GF Top of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_TH_KITCHEN_TOP, []{return true;}), + Entrance(RR_TH_DOUBLE_CELL, []{return true;}), + // need to explicitly convert it into a bool + Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + Entrance(RR_GF_ABOVE_GTG, []{return true;}), + }); - areaTable[RR_GF_BOTTOM_OF_UPPER_VINES] = - Region("GF Bottom of Upper Vines", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_GF_TOP_OF_UPPER_VINES, [] { return true /* logic->CanClimb() */; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_OUTSIDE_GTG, [] { return true; }), - Entrance(RR_GF_SLOPED_ROOF, [] { return logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS); }), - }); + areaTable[RR_GF_BOTTOM_OF_UPPER_VINES] = Region("GF Bottom of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return true /* logic->CanClimb() */;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_OUTSIDE_GTG, []{return true;}), + Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS);}), + }); - areaTable[RR_GF_BELOW_GS] = Region( - "GF Below GS", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) && - logic->CanGetNightTimeGS()), - }, - { - // Exits - Entrance(RR_TH_DEAD_END_CELL, [] { return true; }), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return true; }), - }); + areaTable[RR_GF_BELOW_GS] = Region("GF Below GS", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) && logic->CanGetNightTimeGS()), + }, { + //Exits + Entrance(RR_TH_DEAD_END_CELL, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + }); - areaTable[RR_GF_NEAR_GS] = Region( - "GF Near GS", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOMB_THROW) && - logic->CanGetNightTimeGS()), - }, - { - // Exits - Entrance(RR_TH_KITCHEN_TOP, [] { return true; }), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_BELOW_GS, [] { return true; }), - Entrance(RR_GF_LONG_ROOF, - [] { - return logic->CanUse(RG_HOVER_BOOTS) /* || bunny hood jump */ || - logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP); - }), - Entrance(RR_GF_SLOPED_ROOF, [] { return logic->IsAdult; }), - Entrance(RR_GF_NEAR_CHEST, [] { return logic->CanUse(RG_LONGSHOT); }), - }); + areaTable[RR_GF_NEAR_GS] = Region("GF Near GS", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOMB_THROW) && logic->CanGetNightTimeGS()), + }, { + //Exits + Entrance(RR_TH_KITCHEN_TOP, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_BELOW_GS, []{return true;}), + Entrance(RR_GF_LONG_ROOF, []{return logic->CanUse(RG_HOVER_BOOTS) /* || bunny hood jump */ || logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP);}), + Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult;}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), + }); - areaTable[RR_GF_SLOPED_ROOF] = - Region("GF Sloped Roof", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_GF_TOP_OF_UPPER_VINES, [] { return logic->IsAdult; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_NEAR_GS, [] { return true; }), - Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - }); + areaTable[RR_GF_SLOPED_ROOF] = Region("GF Sloped Roof", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->IsAdult;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_NEAR_GS, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + }); - areaTable[RR_GF_TOP_OF_UPPER_VINES] = - Region("GF Top of Upper Vines", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - // if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_GF_JUMP, climb is needed - // to get back up - LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && - logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH) && - logic->CanGetNightTimeGS()), - }, - { - // Exits - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, [] { return true; }), - Entrance(RR_GF_NEAR_GS, [] { return true; }), - Entrance(RR_GF_SLOPED_ROOF, [] { return true; }), - Entrance(RR_GF_NEAR_CHEST, - [] { - return logic->CanUse(RG_HOVER_BOOTS) || - (logic->IsAdult && logic->CanUse(RG_SCARECROW) && logic->CanUse(RG_HOOKSHOT)) || - logic->CanUse(RG_LONGSHOT); - }), - }); + areaTable[RR_GF_TOP_OF_UPPER_VINES] = Region("GF Top of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + //if RR_GF_SLOPED_ROOF > RR_GF_TOP_OF_UPPER_VINES is ever made part of RT_GF_JUMP, climb is needed to get back up + LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH) && logic->CanGetNightTimeGS()), + }, { + //Exits + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return true;}), + Entrance(RR_GF_NEAR_GS, []{return true;}), + Entrance(RR_GF_SLOPED_ROOF, []{return true;}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_SCARECROW) && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_LONGSHOT);}), + }); - areaTable[RR_GF_NEAR_CHEST] = - Region("GF Near Chest", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_CHEST, true), - LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && - logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONG_JUMPSLASH) && - logic->CanGetNightTimeGS()), - }, - { - // Exits - Entrance(RR_GF_NEAR_GS, [] { return true; }), - Entrance(RR_GF_BELOW_GS, [] { return true; }), - Entrance(RR_GF_LONG_ROOF, [] { return true; }), - Entrance(RR_GF_BELOW_CHEST, [] { return true; }), - }); + areaTable[RR_GF_NEAR_CHEST] = Region("GF Near Chest", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_CHEST, true), + LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONG_JUMPSLASH) && logic->CanGetNightTimeGS()), + }, { + //Exits + Entrance(RR_GF_NEAR_GS, []{return true;}), + Entrance(RR_GF_BELOW_GS, []{return true;}), + Entrance(RR_GF_LONG_ROOF, []{return true;}), + Entrance(RR_GF_BELOW_CHEST, []{return true;}), + }); #pragma endregion - areaTable[RR_GF_ABOVE_JAIL] = - Region("GF Above Jail", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_ABOVE_JAIL_CRATE, true), - }, - { - // Exits - // you don't take fall damage if you land on the rock with the flag on for some reason - // there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP - Entrance(RR_GF_OUTSKIRTS, [] { return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0; }), - Entrance(RR_GF_BELOW_CHEST, [] { return logic->TakeDamage(); }), - Entrance(RR_GF_NEAR_CHEST, [] { return logic->CanUse(RG_LONGSHOT); }), - Entrance(RR_GF_JAIL_WINDOW, [] { return logic->CanUse(RG_HOOKSHOT); }), - }); + areaTable[RR_GF_ABOVE_JAIL] = Region("GF Above Jail", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_ABOVE_JAIL_CRATE, true), + }, { + //Exits + //you don't take fall damage if you land on the rock with the flag on for some reason + //there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP + Entrance(RR_GF_OUTSKIRTS, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}), + Entrance(RR_GF_BELOW_CHEST, []{return logic->TakeDamage();}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), + Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), + }); - areaTable[RR_GF_JAIL_WINDOW] = - Region("GF Jail Window", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - // There's a trick where hovers backwalk into backflip gives access to RR_GF_LONG_ROOF from here - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GF_BELOW_CHEST, [] { return true; }), - }); + areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + //There's a trick where hovers backwalk into backflip gives access to RR_GF_LONG_ROOF from here + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_BELOW_CHEST, []{return true;}), + }); - areaTable[RR_GF_HBA_RANGE] = Region( - "GF HBA Range", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_GF_HBA_1000_POINTS, logic->IsAdult && logic->HasItem(RG_CHILD_WALLET) && - logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && - logic->CanUse(RG_FAIRY_BOW) && logic->AtDay), - LOCATION(RC_GF_HBA_1500_POINTS, logic->IsAdult && logic->HasItem(RG_CHILD_WALLET) && - logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && - logic->CanUse(RG_FAIRY_BOW) && logic->AtDay), - LOCATION(RC_GF_HBA_RANGE_GS, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && - logic->CanGetNightTimeGS()), - LOCATION(RC_GF_HBA_RANGE_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_RANGE_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_CANOPY_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_HBA_CANOPY_WEST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_NORTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_NORTH_TARGET_WEST_CRATE, - logic->IsAdult || - (logic->BlastOrSmash() || logic->HookshotOrBoomerang() || logic->CanUse(RG_HOVER_BOOTS))), - // implies logic->CanBreakCrates() - LOCATION(RC_GF_NORTH_TARGET_CHILD_CRATE, logic->IsChild && logic->BlastOrSmash()), - LOCATION(RC_GF_SOUTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GF_SOUTH_TARGET_WEST_CRATE, logic->CanBreakCrates()), - }, - { - // Exits - Entrance(RR_GF_OUTSIDE_GTG, [] { return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD); }), - }); + areaTable[RR_GF_HBA_RANGE] = Region("GF HBA Range", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_GF_HBA_1000_POINTS, logic->IsAdult && logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay), + LOCATION(RC_GF_HBA_1500_POINTS, logic->IsAdult && logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay), + LOCATION(RC_GF_HBA_RANGE_GS, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()), + LOCATION(RC_GF_HBA_RANGE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_RANGE_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_CANOPY_EAST_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_HBA_CANOPY_WEST_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_TARGET_WEST_CRATE, logic->IsAdult || (logic->BlastOrSmash() || logic->HookshotOrBoomerang() || logic->CanUse(RG_HOVER_BOOTS))), + //implies logic->CanBreakCrates() + LOCATION(RC_GF_NORTH_TARGET_CHILD_CRATE, logic->IsChild && logic->BlastOrSmash()), + LOCATION(RC_GF_SOUTH_TARGET_EAST_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GF_SOUTH_TARGET_WEST_CRATE, logic->CanBreakCrates()), + }, { + //Exits + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}), + }); - areaTable[RR_GF_OUTSIDE_GATE] = - Region("GF Outside Gate", "Gerudo Fortress", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->GF_GateOpen, - [] { - return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && - (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || - ctx->GetOption( - RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/); - }), - }, - {}, - { - // Exits - Entrance(RR_GF_OUTSKIRTS, - [] { - return (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || - !ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES))) || - logic->GF_GateOpen; - }), - Entrance(RR_WASTELAND_NEAR_FORTRESS, [] { return true; }), - }); + areaTable[RR_GF_OUTSIDE_GATE] = Region("GF Outside Gate", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD) || ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES) /*|| ShuffleSpecialIndoorEntrances*/);}), + }, {}, { + //Exits + Entrance(RR_GF_OUTSKIRTS, []{return (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || !ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES))) || logic->GF_GateOpen;}), + Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return true;}), + }); - areaTable[RR_GF_STORMS_GROTTO] = Region("GF Storms Grotto", "GF Storms Grotto", {}, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->FreeFairies, [] { return true; }), - }, - { - // Locations - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_1, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_2, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_3, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_4, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_5, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_6, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_7, true), - LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_8, true), - }, - { - // Exits - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - }); -} \ No newline at end of file + areaTable[RR_GF_STORMS_GROTTO] = Region("GF Storms Grotto", "GF Storms Grotto", {}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->FreeFairies, []{return true;}), + }, { + //Locations + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_1, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_2, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_3, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_4, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_5, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_6, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_7, true), + LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_8, true), + }, { + //Exits + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + }); +} +// clang-format on \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp index 959fe77a6..7423d0650 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp @@ -3,200 +3,139 @@ using namespace Rando; +// clang-format off void RegionTable_Init_ThievesHideout() { - areaTable[RR_TH_1_TORCH_CELL] = Region( - "Thieves Hideout 1 Torch Cell", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->THCouldFree1TorchCarpenter, [] { return logic->CanKillEnemy(RE_GERUDO_WARRIOR); }), - EventAccess(&logic->THRescuedAllCarpenters, - [] { - return logic->SmallKeys( - RR_GF_OUTSKIRTS, - ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && - logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && - logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter; - }), - }, - { - // Locations - LOCATION(RC_TH_1_TORCH_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_1_TORCH_CELL_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_MID_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_1_TORCH_CELL_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), - }, - { - // Exits - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - }); + areaTable[RR_TH_1_TORCH_CELL] = Region("Thieves Hideout 1 Torch Cell", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->THCouldFree1TorchCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), + EventAccess(&logic->THRescuedAllCarpenters, []{return logic->SmallKeys(RR_GF_OUTSKIRTS, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}), + }, { + //Locations + LOCATION(RC_TH_1_TORCH_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), + LOCATION(RC_TH_1_TORCH_CELL_RIGHT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_1_TORCH_CELL_MID_POT, logic->CanBreakPots()), + LOCATION(RC_TH_1_TORCH_CELL_LEFT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_1_TORCH_CELL_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), + }, { + //Exits + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + }); - areaTable[RR_TH_DOUBLE_CELL] = Region( - "Thieves Hideout Double Cell", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->THCouldFreeDoubleCellCarpenter, [] { return logic->CanKillEnemy(RE_GERUDO_WARRIOR); }), - EventAccess(&logic->THRescuedAllCarpenters, - [] { - return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && - logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && - logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && - logic->THCouldRescueSlopeCarpenter; - }), - }, - { - // Locations - LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()), - LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()), - LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), - }, - { - // Exits - Entrance(RR_GF_OUTSKIRTS, [] { return true; }), - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - }); + areaTable[RR_TH_DOUBLE_CELL] = Region("Thieves Hideout Double Cell", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->THCouldFreeDoubleCellCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), + EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}), + }, { + //Locations + LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), + LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()), + LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()), + LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()), + LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()), + LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()), + LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), + }, { + //Exits + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + }); - areaTable[RR_TH_DEAD_END_CELL] = Region( - "Thieves Hideout Dead End Cell", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, [] { return logic->CanKillEnemy(RE_GERUDO_WARRIOR); }), - EventAccess(&logic->THRescuedAllCarpenters, - [] { - return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && - logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && - logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && - logic->THCouldRescueSlopeCarpenter; - }), - }, - { - // Locations - LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), - }, - { - // Exits - Entrance(RR_GF_BELOW_GS, [] { return true; }), - }); + areaTable[RR_TH_DEAD_END_CELL] = Region("Thieves Hideout Dead End Cell", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), + EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}), + }, { + //Locations + LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), + LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), + }, { + //Exits + Entrance(RR_GF_BELOW_GS, []{return true;}), + }); - areaTable[RR_TH_STEEP_SLOPE_CELL] = Region( - "Thieves Hideout Steep Slope Cell", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, - { - // Events - EventAccess(&logic->THCouldRescueSlopeCarpenter, [] { return logic->CanKillEnemy(RE_GERUDO_WARRIOR); }), - EventAccess(&logic->THRescuedAllCarpenters, - [] { - return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && - logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && - logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && - logic->THCouldRescueSlopeCarpenter; - }), - }, - { - // Locations - LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), - LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()), - LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), - }, - { - // Exits - Entrance(RR_GF_ABOVE_GTG, [] { return true; }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, [] { return true; }), - }); + areaTable[RR_TH_STEEP_SLOPE_CELL] = Region("Thieves Hideout Steep Slope Cell", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { + //Events + EventAccess(&logic->THCouldRescueSlopeCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}), + EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}), + }, { + //Locations + LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)), + LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()), + LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters), + }, { + //Exits + Entrance(RR_GF_ABOVE_GTG, []{return true;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + }); - areaTable[RR_TH_KITCHEN_CORRIDOR] = - Region("Thieves Hideout Kitchen Corridor", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE, logic->CanBreakCrates()), - }, - { - // Exits - Entrance(RR_GF_NEAR_GROTTO, [] { return true; }), - Entrance(RR_GF_ABOVE_GTG, [] { return true; }), - Entrance(RR_TH_KITCHEN_MAIN, [] { return logic->CanPassEnemy(RE_GERUDO_GUARD); }), - }); + areaTable[RR_TH_KITCHEN_CORRIDOR] = Region("Thieves Hideout Kitchen Corridor", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE, logic->CanBreakCrates()), + }, { + //Exits + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + Entrance(RR_GF_ABOVE_GTG, []{return true;}), + Entrance(RR_TH_KITCHEN_MAIN, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), + }); - areaTable[RR_TH_KITCHEN_MAIN] = Region( - "Thieves Hideout Kitchen Bottom", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_TH_KITCHEN_POT_1, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)), - LOCATION(RC_TH_KITCHEN_POT_2, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)), - LOCATION(RC_TH_KITCHEN_CRATE, logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD)), - LOCATION(RC_TH_KITCHEN_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)), - }, - { - // Exits - Entrance(RR_TH_KITCHEN_CORRIDOR, [] { return logic->CanPassEnemy(RE_GERUDO_GUARD); }), - Entrance(RR_TH_KITCHEN_TOP, [] { return logic->CanPassEnemy(RE_GERUDO_GUARD); }), - }); + areaTable[RR_TH_KITCHEN_MAIN] = Region("Thieves Hideout Kitchen Bottom", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_TH_KITCHEN_POT_1, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)), + LOCATION(RC_TH_KITCHEN_POT_2, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)), + LOCATION(RC_TH_KITCHEN_CRATE, logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD)), + LOCATION(RC_TH_KITCHEN_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)), + }, { + //Exits + Entrance(RR_TH_KITCHEN_CORRIDOR, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), + Entrance(RR_TH_KITCHEN_TOP, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), + }); - areaTable[RR_TH_KITCHEN_TOP] = - Region("Thieves Hideout Kitchen Top", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_TH_KITCHEN_POT_1, logic->CanUse(RG_BOOMERANG)), - LOCATION(RC_TH_KITCHEN_POT_2, logic->CanUse(RG_BOOMERANG)), - }, - { - // Exits - Entrance(RR_TH_KITCHEN_MAIN, [] { return true; }), - // hookshot to cross using the rafters is implied in logic->CanPassEnemy(RE_GERUDO_GUARD) - Entrance(RR_GF_NEAR_GS, - [] { return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS); }), - Entrance(RR_GF_TOP_OF_LOWER_VINES, - [] { return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS); }), - }); + areaTable[RR_TH_KITCHEN_TOP] = Region("Thieves Hideout Kitchen Top", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_TH_KITCHEN_POT_1, logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_TH_KITCHEN_POT_2, logic->CanUse(RG_BOOMERANG)), + }, { + //Exits + Entrance(RR_TH_KITCHEN_MAIN, []{return true;}), + //hookshot to cross using the rafters is implied in logic->CanPassEnemy(RE_GERUDO_GUARD) + Entrance(RR_GF_NEAR_GS, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS);}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS);}), + }); - areaTable[RR_TH_BREAK_ROOM] = - Region("Thieves Hideout Break Room", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, - { - // Locations - LOCATION(RC_TH_BREAK_ROOM_FRONT_POT, - (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || - (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_TH_BREAK_ROOM_BACK_POT, - (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || - (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_TH_BREAK_HALLWAY_OUTER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_BREAK_HALLWAY_INNER_CRATE, logic->CanBreakCrates()), - LOCATION(RC_TH_BREAK_ROOM_RIGHT_CRATE, - (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || - (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && - logic->CanUse(RG_BOOMERANG))), - LOCATION(RC_TH_BREAK_ROOM_LEFT_CRATE, - (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || - (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && - logic->CanUse(RG_BOOMERANG))), - }, - { - // Exits - Entrance(RR_GF_BELOW_CHEST, [] { return logic->CanPassEnemy(RE_GERUDO_GUARD); }), - // Implies logic->CanPassEnemy(RE_GERUDO_GUARD) - Entrance(RR_TH_BREAK_ROOM_CORRIDOR, [] { return logic->CanUse(RG_HOOKSHOT); }), - }); + areaTable[RR_TH_BREAK_ROOM] = Region("Thieves Hideout Break Room", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { + //Locations + LOCATION(RC_TH_BREAK_ROOM_FRONT_POT, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || + (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_TH_BREAK_ROOM_BACK_POT, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) || + (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_TH_BREAK_HALLWAY_OUTER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_BREAK_HALLWAY_INNER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_TH_BREAK_ROOM_RIGHT_CRATE, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || + (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_TH_BREAK_ROOM_LEFT_CRATE, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) || + (logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))), + }, { + //Exits + Entrance(RR_GF_BELOW_CHEST, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}), + //Implies logic->CanPassEnemy(RE_GERUDO_GUARD) + Entrance(RR_TH_BREAK_ROOM_CORRIDOR, []{return logic->CanUse(RG_HOOKSHOT);}), + }); - areaTable[RR_TH_BREAK_ROOM_CORRIDOR] = - Region("Thieves Hideout Break Room", "Thieves Hideout", { RA_GERUDO_FORTRESS }, NO_DAY_NIGHT_CYCLE, {}, {}, - { - // Exits - Entrance(RR_TH_BREAK_ROOM, [] { return logic->CanUse(RG_HOOKSHOT); }), - Entrance(RR_GF_ABOVE_JAIL, [] { return true; }), - }); -} \ No newline at end of file + areaTable[RR_TH_BREAK_ROOM_CORRIDOR] = Region("Thieves Hideout Break Room", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_TH_BREAK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}), + Entrance(RR_GF_ABOVE_JAIL, []{return true;}), + }); +} +// clang-format on \ No newline at end of file