From 4add37c09d97c2505800a8cd8ce1cd14b62b0620 Mon Sep 17 00:00:00 2001 From: Pepper0ni <93387759+Pepper0ni@users.noreply.github.com> Date: Sun, 6 Apr 2025 15:39:33 +0100 Subject: [PATCH] final reordering --- .../overworld/gerudo_fortress.cpp | 152 +++++++++--------- .../overworld/thieves_hideout.cpp | 1 + .../Enhancements/randomizer/randomizerTypes.h | 10 +- 3 files changed, 80 insertions(+), 83 deletions(-) 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 73a4ef0d9..88519b735 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_fortress.cpp @@ -17,8 +17,8 @@ void RegionTable_Init_GerudoFortress() { }, { //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_OUTSIDE_GATE, []{return logic->GF_GateOpen;}), 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 @@ -33,13 +33,14 @@ void RegionTable_Init_GerudoFortress() { 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_TH_KITCHEN_CORRIDOR, []{return true;}), + //Jail Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}), + Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}), }); areaTable[RR_GF_OUTSIDE_GTG] = Region("GF Outside GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, { @@ -47,72 +48,108 @@ void RegionTable_Init_GerudoFortress() { 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));}), + //Jail + Entrance(RR_GF_OUTSKIRTS, []{return true;}), 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);}), + Entrance(RR_GF_HBA_RANGE, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}), }); #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_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_DOUBLE_CELL, []{return true;}), Entrance(RR_TH_KITCHEN_CORRIDOR, []{return true;}), + //Jail + Entrance(RR_GF_OUTSKIRTS, []{return true;}), + Entrance(RR_GF_NEAR_GROTTO, []{return true;}), + Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}), // 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_NEAR_GROTTO, []{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;}), + Entrance(RR_GF_ABOVE_GTG, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{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;}), + }); + + 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_NEAR_GROTTO, []{return true;}), - Entrance(RR_GF_ABOVE_GTG, []{return true;}), + Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult;}), + Entrance(RR_GF_LONG_ROOF, []{return logic->CanUse(RG_HOVER_BOOTS) /* || bunny hood jump */ || logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP);}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), + Entrance(RR_GF_BELOW_GS, []{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_LOWER_VINES, []{return true;}), + Entrance(RR_GF_NEAR_GS, []{return true;}), + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->IsAdult;}), }); 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_TOP_OF_LOWER_VINES, []{return true;}), Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS);}), + Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return true /* logic->CanClimb() */;}), + }); + + 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_SLOPED_ROOF, []{return true;}), + Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{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_BOOMERANG) && logic->CanGetNightTimeGS()), + }, { + //Exits + Entrance(RR_GF_NEAR_GS, []{return true;}), + Entrance(RR_GF_LONG_ROOF, []{return true;}), + }); + + areaTable[RR_GF_LONG_ROOF] = Region("GF Long Roof", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { + //Exits + Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}), + Entrance(RR_GF_NEAR_GS, []{return (logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP)) || logic->CanUse(RG_HOVER_BOOTS);}), + Entrance(RR_GF_BELOW_GS, []{return true;}), + Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}), + Entrance(RR_GF_BELOW_CHEST, []{return true;}), }); areaTable[RR_GF_BELOW_GS] = Region("GF Below GS", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, { @@ -124,53 +161,12 @@ void RegionTable_Init_GerudoFortress() { 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()), - }, { + areaTable[RR_GF_BELOW_CHEST] = Region("GF Below Chest", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, { //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);}), + Entrance(RR_TH_BREAK_ROOM, []{return true;}), + Entrance(RR_GF_OUTSKIRTS, []{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_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 @@ -182,8 +178,8 @@ void RegionTable_Init_GerudoFortress() { //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_BELOW_CHEST, []{return logic->TakeDamage();}), Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}), }); 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 7423d0650..0a58a9242 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/thieves_hideout.cpp @@ -4,6 +4,7 @@ using namespace Rando; // clang-format off +// When Thieve's hideout entrances are shuffled, getting caught by guards should behave like void outs to avoid logic headaches. 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 diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index a539dcb4d..62e0ae7c1 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -409,19 +409,19 @@ typedef enum { RR_GV_CARPENTER_TENT, RR_GV_STORMS_GROTTO, RR_GF_OUTSKIRTS, - RR_GF_OUTSIDE_GTG, RR_GF_NEAR_GROTTO, - RR_GF_BELOW_CHEST, - RR_GF_LONG_ROOF, + RR_GF_OUTSIDE_GTG, RR_GF_ABOVE_GTG, RR_GF_BOTTOM_OF_LOWER_VINES, RR_GF_TOP_OF_LOWER_VINES, - RR_GF_BOTTOM_OF_UPPER_VINES, - RR_GF_BELOW_GS, RR_GF_NEAR_GS, RR_GF_SLOPED_ROOF, + RR_GF_BOTTOM_OF_UPPER_VINES, RR_GF_TOP_OF_UPPER_VINES, RR_GF_NEAR_CHEST, + RR_GF_LONG_ROOF, + RR_GF_BELOW_GS, + RR_GF_BELOW_CHEST, RR_GF_HBA_RANGE, RR_GF_ABOVE_JAIL, RR_GF_JAIL_WINDOW,