mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-24 07:05:34 -07:00
Merge remote-tracking branch 'master/pr/5099' into SplitGF
This commit is contained in:
commit
415ada9631
28 changed files with 611 additions and 375 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -57,6 +57,8 @@ graphs/
|
|||
.extracted-assets.json
|
||||
|
||||
!OTRExporter/assets/**/*.png
|
||||
!soh/soh/Enhancements/randomizer/location_access/gerudo_fortress_regions.png
|
||||
!soh/soh/Enhancements/randomizer/location_access/gerudo_fortress_regions_no_labels.png
|
||||
|
||||
# Docs
|
||||
!docs/tutorial/
|
||||
|
|
3
soh/.gitignore
vendored
3
soh/.gitignore
vendored
|
@ -56,6 +56,9 @@ graphs/
|
|||
!*_custom*
|
||||
.extracted-assets.json
|
||||
|
||||
!soh/soh/Enhancements/randomizer/location_access/gerudo_fortress_regions.png
|
||||
!soh/soh/Enhancements/randomizer/location_access/gerudo_fortress_regions_no_labels.png
|
||||
|
||||
# Docs
|
||||
!docs/tutorial/
|
||||
|
||||
|
|
|
@ -551,22 +551,22 @@ const std::vector<FlagTable> flagTables = {
|
|||
{ RAND_INF_KF_TWINS_HOUSE_POT_2, "RAND_INF_KF_TWINS_HOUSE_POT_2" },
|
||||
{ RAND_INF_KF_BROTHERS_HOUSE_POT_1, "RAND_INF_KF_BROTHERS_HOUSE_POT_1" },
|
||||
{ RAND_INF_KF_BROTHERS_HOUSE_POT_2, "RAND_INF_KF_BROTHERS_HOUSE_POT_2" },
|
||||
{ RAND_INF_GF_BREAK_ROOM_POT_1, "RAND_INF_GF_BREAK_ROOM_POT_1" },
|
||||
{ RAND_INF_GF_BREAK_ROOM_POT_2, "RAND_INF_GF_BREAK_ROOM_POT_2" },
|
||||
{ RAND_INF_GF_KITCHEN_POT_1, "RAND_INF_GF_KITCHEN_POT_1" },
|
||||
{ RAND_INF_GF_KITCHEN_POT_2, "RAND_INF_GF_KITCHEN_POT_2" },
|
||||
{ RAND_INF_GF_NORTH_F1_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_1" },
|
||||
{ RAND_INF_GF_NORTH_F1_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_2" },
|
||||
{ RAND_INF_GF_NORTH_F1_CARPENTER_POT_3, "RAND_INF_GF_NORTH_F1_CARPENTER_POT_3" },
|
||||
{ RAND_INF_GF_NORTH_F2_CARPENTER_POT_1, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_1" },
|
||||
{ RAND_INF_GF_NORTH_F2_CARPENTER_POT_2, "RAND_INF_GF_NORTH_F2_CARPENTER_POT_2" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3" },
|
||||
{ RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4, "RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4" },
|
||||
{ RAND_INF_TH_BREAK_ROOM_POT_1, "RAND_INF_TH_BREAK_ROOM_POT_1" },
|
||||
{ RAND_INF_TH_BREAK_ROOM_POT_2, "RAND_INF_TH_BREAK_ROOM_POT_2" },
|
||||
{ RAND_INF_TH_KITCHEN_POT_1, "RAND_INF_TH_KITCHEN_POT_1" },
|
||||
{ RAND_INF_TH_KITCHEN_POT_2, "RAND_INF_TH_KITCHEN_POT_2" },
|
||||
{ RAND_INF_TH_NORTH_F1_CARPENTER_POT_1, "RAND_INF_TH_NORTH_F1_CARPENTER_POT_1" },
|
||||
{ RAND_INF_TH_NORTH_F1_CARPENTER_POT_2, "RAND_INF_TH_NORTH_F1_CARPENTER_POT_2" },
|
||||
{ RAND_INF_TH_NORTH_F1_CARPENTER_POT_3, "RAND_INF_TH_NORTH_F1_CARPENTER_POT_3" },
|
||||
{ RAND_INF_TH_NORTH_F2_CARPENTER_POT_1, "RAND_INF_TH_NORTH_F2_CARPENTER_POT_1" },
|
||||
{ RAND_INF_TH_NORTH_F2_CARPENTER_POT_2, "RAND_INF_TH_NORTH_F2_CARPENTER_POT_2" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1, "RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2, "RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3, "RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1, "RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2, "RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3, "RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3" },
|
||||
{ RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_4, "RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_4" },
|
||||
{ RAND_INF_WASTELAND_NEAR_GS_POT_1, "RAND_INF_WASTELAND_NEAR_GS_POT_1" },
|
||||
{ RAND_INF_WASTELAND_NEAR_GS_POT_2, "RAND_INF_WASTELAND_NEAR_GS_POT_2" },
|
||||
{ RAND_INF_WASTELAND_NEAR_GS_POT_3, "RAND_INF_WASTELAND_NEAR_GS_POT_3" },
|
||||
|
@ -1590,7 +1590,7 @@ const std::vector<FlagTable> flagTables = {
|
|||
{ RAND_INF_HF_POND_STORMS_FAIRY, "RAND_INF_HF_POND_STORMS_FAIRY" },
|
||||
{ RAND_INF_DMT_FLAG_SUN_FAIRY, "RAND_INF_DMT_FLAG_SUN_FAIRY" },
|
||||
{ RAND_INF_LW_SHORTCUT_STORMS_FAIRY, "RAND_INF_LW_SHORTCUT_STORMS_FAIRY" },
|
||||
{ RAND_INF_GF_KITCHEN_SUN_FAIRY, "RAND_INF_GF_KITCHEN_SUN_FAIRY" },
|
||||
{ RAND_INF_TH_KITCHEN_SUN_FAIRY, "RAND_INF_TH_KITCHEN_SUN_FAIRY" },
|
||||
{ RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY" },
|
||||
{ RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, "RAND_INF_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY" },
|
||||
{ RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, "RAND_INF_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY" },
|
||||
|
|
|
@ -1949,7 +1949,7 @@ void StaticData::HintTable_Init_Exclude_Overworld() {
|
|||
|
||||
hintTextTable[RHT_LW_SHORTCUT_STORMS_FAIRY] = HintText(CustomMessage("They say that #making it rain in the Lost Woods# reveals #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||
|
||||
hintTextTable[RHT_GF_KITCHEN_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a guarded kitchen# exposes #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||
hintTextTable[RHT_TH_KITCHEN_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a guarded kitchen# exposes #[[1]]#.", {QM_RED, QM_GREEN}));
|
||||
|
||||
hintTextTable[RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun for scrubs in the Lost Woods# reveals #[[1]]#.", { QM_RED, QM_GREEN }));
|
||||
|
||||
|
|
|
@ -811,16 +811,16 @@ void GenerateItemPool() {
|
|||
|
||||
// Gerudo Fortress
|
||||
if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE)) {
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
} else if (ctx->GetOption(RSK_GERUDO_KEYS).IsNot(RO_GERUDO_KEYS_VANILLA)) {
|
||||
if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) {
|
||||
AddItemToMainPool(RG_GERUDO_FORTRESS_SMALL_KEY);
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
} else {
|
||||
// Only add key ring if 4 Fortress keys necessary
|
||||
if (ctx->GetOption(RSK_KEYRINGS_GERUDO_FORTRESS) && ctx->GetOption(RSK_KEYRINGS)) {
|
||||
|
@ -843,15 +843,15 @@ void GenerateItemPool() {
|
|||
}
|
||||
} else {
|
||||
if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST)) {
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F1_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F2_CARPENTER, RG_RECOVERY_HEART, false, true);
|
||||
} else {
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -862,9 +862,9 @@ void GenerateItemPool() {
|
|||
ctx->possibleIceTrapModels.push_back(RG_GERUDO_MEMBERSHIP_CARD);
|
||||
} else if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) {
|
||||
AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD);
|
||||
ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_ICE_TRAP, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_GERUDO_MEMBERSHIP_CARD, RG_ICE_TRAP, false, true);
|
||||
} else {
|
||||
ctx->PlaceItemInLocation(RC_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, false, true);
|
||||
ctx->PlaceItemInLocation(RC_TH_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, false, true);
|
||||
}
|
||||
|
||||
// Keys
|
||||
|
|
|
@ -383,7 +383,7 @@ void Rando::StaticData::RegisterFairyLocations() {
|
|||
locationTable[RC_DMT_FLAG_SUN_FAIRY] = Location::Fairy(RC_DMT_FLAG_SUN_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_DEATH_MOUNTAIN_TRAIL, TWO_ACTOR_PARAMS(0x1000, 464), "Flag Sun's Song Fairy", RHT_DMT_FLAG_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_FLAG_SUN_FAIRY));
|
||||
locationTable[RC_DMT_COW_GROTTO_STORMS_FAIRY] = Location::Fairy(RC_DMT_COW_GROTTO_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_TRAIL, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, -311), "Cow Grotto Song of Storms Fairy", RHT_DMT_COW_GROTTO_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMT_COW_GROTTO_STORMS_FAIRY));
|
||||
locationTable[RC_LW_SHORTCUT_STORMS_FAIRY] = Location::Fairy(RC_LW_SHORTCUT_STORMS_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_LOST_WOODS, TWO_ACTOR_PARAMS(0x1000, -795), "Shortcuts Song of Storms Fairy", RHT_LW_SHORTCUT_STORMS_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_SHORTCUT_STORMS_FAIRY));
|
||||
locationTable[RC_GF_KITCHEN_SUN_FAIRY] = Location::Fairy(RC_GF_KITCHEN_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(0x1000, -621), "Kitchen Sun's Song Fairy", RHT_GF_KITCHEN_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_SUN_FAIRY));
|
||||
locationTable[RC_TH_KITCHEN_SUN_FAIRY] = Location::Fairy(RC_TH_KITCHEN_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(0x1000, -621), "Kitchen Sun's Song Fairy", RHT_TH_KITCHEN_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_KITCHEN_SUN_FAIRY));
|
||||
locationTable[RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY] = Location::Fairy(RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, RCQUEST_BOTH, RCAREA_LOST_WOODS, SCENE_GROTTOS, TWO_ACTOR_PARAMS(0x1000, 741), "Scrub Grotto Sun's Song Fairy", RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY));
|
||||
locationTable[RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY] = Location::Fairy(RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_ROYAL_FAMILYS_TOMB, TWO_ACTOR_PARAMS(0x1000, 1476), "Royal Family's Tomb Sun's Song Fairy", RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY));
|
||||
|
||||
|
|
|
@ -108,22 +108,22 @@ void Rando::StaticData::RegisterPotLocations() {
|
|||
locationTable[RC_KF_TWINS_HOUSE_POT_1] = Location::Pot(RC_KF_TWINS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_TWINS_HOUSE, TWO_ACTOR_PARAMS(33, -55), "Twins House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_TWINS_HOUSE_POT_1));
|
||||
locationTable[RC_KF_BROTHERS_HOUSE_POT_1] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_1, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-134, -29), "Brothers House Pot 1", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_1));
|
||||
locationTable[RC_KF_BROTHERS_HOUSE_POT_2] = Location::Pot(RC_KF_BROTHERS_HOUSE_POT_2, RCQUEST_BOTH, RCAREA_KOKIRI_FOREST, SCENE_KNOW_IT_ALL_BROS_HOUSE, TWO_ACTOR_PARAMS(-68, 114), "Brothers House Pot 2", RHT_POT_KOKIRI_FOREST, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KF_BROTHERS_HOUSE_POT_2));
|
||||
locationTable[RC_GF_BREAK_ROOM_POT_1] = Location::Pot(RC_GF_BREAK_ROOM_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1438, -3629), "Break Room Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_1));
|
||||
locationTable[RC_GF_BREAK_ROOM_POT_2] = Location::Pot(RC_GF_BREAK_ROOM_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1403, -3679), "Break Room Pot 2", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_POT_2));
|
||||
locationTable[RC_GF_KITCHEN_POT_1] = Location::Pot(RC_GF_KITCHEN_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1908, -789), "Kitchen Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_1));
|
||||
locationTable[RC_GF_KITCHEN_POT_2] = Location::Pot(RC_GF_KITCHEN_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1951, -850), "Kitchen Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_POT_2));
|
||||
locationTable[RC_GF_NORTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-475, -2622), "North F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_1));
|
||||
locationTable[RC_GF_NORTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-512, -2621), "North F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_2));
|
||||
locationTable[RC_GF_NORTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_NORTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-511, -2582), "North F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_POT_3));
|
||||
locationTable[RC_GF_NORTH_F2_CARPENTER_POT_1] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(67, -1975), "North F2 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_1));
|
||||
locationTable[RC_GF_NORTH_F2_CARPENTER_POT_2] = Location::Pot(RC_GF_NORTH_F2_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(39, -1943), "North F2 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F2_CARPENTER_POT_2));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 48), "South F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 16), "South F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(661, 16), "South F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(26, 524), "South F1 Carpenter Cell Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(61, 549), "South F1 Carpenter Cell Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(215, 549), "South F1 Carpenter Cell Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3));
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4] = Location::Pot(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(254, 529), "South F1 Carpenter Cell Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4));
|
||||
locationTable[RC_TH_BREAK_ROOM_POT_1] = Location::Pot(RC_TH_BREAK_ROOM_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1438, -3629), "Break Room Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_ROOM_POT_1));
|
||||
locationTable[RC_TH_BREAK_ROOM_POT_2] = Location::Pot(RC_TH_BREAK_ROOM_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1403, -3679), "Break Room Pot 2", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_ROOM_POT_2));
|
||||
locationTable[RC_TH_KITCHEN_POT_1] = Location::Pot(RC_TH_KITCHEN_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1908, -789), "Kitchen Pot 1", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_KITCHEN_POT_1));
|
||||
locationTable[RC_TH_KITCHEN_POT_2] = Location::Pot(RC_TH_KITCHEN_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1951, -850), "Kitchen Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_KITCHEN_POT_2));
|
||||
locationTable[RC_TH_NORTH_F1_CARPENTER_POT_1] = Location::Pot(RC_TH_NORTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-475, -2622), "North F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NORTH_F1_CARPENTER_POT_1));
|
||||
locationTable[RC_TH_NORTH_F1_CARPENTER_POT_2] = Location::Pot(RC_TH_NORTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-512, -2621), "North F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NORTH_F1_CARPENTER_POT_2));
|
||||
locationTable[RC_TH_NORTH_F1_CARPENTER_POT_3] = Location::Pot(RC_TH_NORTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-511, -2582), "North F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NORTH_F1_CARPENTER_POT_3));
|
||||
locationTable[RC_TH_NORTH_F2_CARPENTER_POT_1] = Location::Pot(RC_TH_NORTH_F2_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(67, -1975), "North F2 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NORTH_F2_CARPENTER_POT_1));
|
||||
locationTable[RC_TH_NORTH_F2_CARPENTER_POT_2] = Location::Pot(RC_TH_NORTH_F2_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(39, -1943), "North F2 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NORTH_F2_CARPENTER_POT_2));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_POT_1] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 48), "South F1 Carpenter Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_POT_2] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(691, 16), "South F1 Carpenter Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_POT_3] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(661, 16), "South F1 Carpenter Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_CELL_POT_1] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(26, 524), "South F1 Carpenter Cell Pot 1", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_CELL_POT_2] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(61, 549), "South F1 Carpenter Cell Pot 2", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_CELL_POT_3] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(215, 549), "South F1 Carpenter Cell Pot 3", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3));
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER_CELL_POT_4] = Location::Pot(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(254, 529), "South F1 Carpenter Cell Pot 4", RHT_POT_GERUDO_FORTRESS, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_4));
|
||||
locationTable[RC_WASTELAND_NEAR_GS_POT_1] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_1, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(488, -2424), "Near GS Pot 1", RHT_POT_GERUDO_FORTRESS, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_1));
|
||||
locationTable[RC_WASTELAND_NEAR_GS_POT_2] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_2, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(485, -2463), "Near GS Pot 2", RHT_POT_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_2));
|
||||
locationTable[RC_WASTELAND_NEAR_GS_POT_3] = Location::Pot(RC_WASTELAND_NEAR_GS_POT_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(806, -2426), "Near GS Pot 3", RHT_POT_GERUDO_FORTRESS, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WASTELAND_NEAR_GS_POT_3));
|
||||
|
|
|
@ -880,8 +880,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
{ EntranceType::Dungeon, RR_BOTTOM_OF_THE_WELL_ENTRYWAY, RR_KAK_WELL, ENTR_KAKARIKO_VILLAGE_OUTSIDE_BOTTOM_OF_THE_WELL } },
|
||||
{ { EntranceType::Dungeon, RR_ZORAS_FOUNTAIN, RR_ICE_CAVERN_ENTRYWAY, ENTR_ICE_CAVERN_ENTRANCE },
|
||||
{ EntranceType::Dungeon, RR_ICE_CAVERN_ENTRYWAY, RR_ZORAS_FOUNTAIN, ENTR_ZORAS_FOUNTAIN_OUTSIDE_ICE_CAVERN } },
|
||||
{ { EntranceType::Dungeon, RR_GERUDO_FORTRESS, RR_GERUDO_TRAINING_GROUND_ENTRYWAY, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE },
|
||||
{ EntranceType::Dungeon, RR_GERUDO_TRAINING_GROUND_ENTRYWAY, RR_GERUDO_FORTRESS, ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND } },
|
||||
{ { EntranceType::Dungeon, RR_GF_GROUND_OUTSIDE_GTG, RR_GERUDO_TRAINING_GROUND_ENTRYWAY, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE },
|
||||
{ EntranceType::Dungeon, RR_GERUDO_TRAINING_GROUND_ENTRYWAY, RR_GF_GROUND_OUTSIDE_GTG, ENTR_GERUDOS_FORTRESS_OUTSIDE_GERUDO_TRAINING_GROUND } },
|
||||
{ { EntranceType::GanonDungeon, RR_GANONS_CASTLE_LEDGE, RR_GANONS_CASTLE_ENTRYWAY, ENTR_INSIDE_GANONS_CASTLE_ENTRANCE },
|
||||
{ EntranceType::GanonDungeon, RR_GANONS_CASTLE_ENTRYWAY, RR_CASTLE_GROUNDS_FROM_GANONS_CASTLE, ENTR_CASTLE_GROUNDS_RAINBOW_BRIDGE_EXIT } },
|
||||
|
||||
|
@ -1033,8 +1033,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
{ EntranceType::GrottoGrave, RR_KF_STORMS_GROTTO, RR_KOKIRI_FOREST, ENTRANCE_GROTTO_EXIT(GROTTO_KF_STORMS_OFFSET) } },
|
||||
{ { EntranceType::GrottoGrave, RR_ZORAS_DOMAIN_ISLAND, RR_ZD_STORMS_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_ZD_STORMS_OFFSET) },
|
||||
{ EntranceType::GrottoGrave, RR_ZD_STORMS_GROTTO, RR_ZORAS_DOMAIN_ISLAND, ENTRANCE_GROTTO_EXIT(GROTTO_ZD_STORMS_OFFSET) } },
|
||||
{ { EntranceType::GrottoGrave, RR_GERUDO_FORTRESS, RR_GF_STORMS_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET) },
|
||||
{ EntranceType::GrottoGrave, RR_GF_STORMS_GROTTO, RR_GERUDO_FORTRESS, ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET) } },
|
||||
{ { EntranceType::GrottoGrave, RR_GF_GROUND_NEAR_GROTTO, RR_GF_STORMS_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET) },
|
||||
{ EntranceType::GrottoGrave, RR_GF_STORMS_GROTTO, RR_GF_GROUND_NEAR_GROTTO, ENTRANCE_GROTTO_EXIT(GROTTO_GF_STORMS_OFFSET) } },
|
||||
{ { EntranceType::GrottoGrave, RR_GV_FORTRESS_SIDE, RR_GV_STORMS_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_GV_STORMS_OFFSET) },
|
||||
{ EntranceType::GrottoGrave, RR_GV_STORMS_GROTTO, RR_GV_FORTRESS_SIDE, ENTRANCE_GROTTO_EXIT(GROTTO_GV_STORMS_OFFSET) } },
|
||||
{ { EntranceType::GrottoGrave, RR_GV_GROTTO_LEDGE, RR_GV_OCTOROK_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_GV_OCTOROK_OFFSET) },
|
||||
|
@ -1078,8 +1078,8 @@ int EntranceShuffler::ShuffleAllEntrances() {
|
|||
{ EntranceType::Overworld, RR_LON_LON_RANCH, RR_HYRULE_FIELD, ENTR_HYRULE_FIELD_CENTER_EXIT } },
|
||||
{ { EntranceType::Overworld, RR_LAKE_HYLIA, RR_ZORAS_DOMAIN, ENTR_ZORAS_DOMAIN_UNDERWATER_SHORTCUT },
|
||||
{ EntranceType::Overworld, RR_ZORAS_DOMAIN, RR_LAKE_HYLIA, ENTR_LAKE_HYLIA_UNDERWATER_SHORTCUT } },
|
||||
{ { EntranceType::Overworld, RR_GV_FORTRESS_SIDE, RR_GERUDO_FORTRESS, ENTR_GERUDOS_FORTRESS_EAST_EXIT },
|
||||
{ EntranceType::Overworld, RR_GERUDO_FORTRESS, RR_GV_FORTRESS_SIDE, ENTR_GERUDO_VALLEY_WEST_EXIT } },
|
||||
{ { EntranceType::Overworld, RR_GV_FORTRESS_SIDE, RR_GF_GROUND_BOTTOM, ENTR_GERUDOS_FORTRESS_EAST_EXIT },
|
||||
{ EntranceType::Overworld, RR_GF_GROUND_BOTTOM, RR_GV_FORTRESS_SIDE, ENTR_GERUDO_VALLEY_WEST_EXIT } },
|
||||
{ { EntranceType::Overworld, RR_GF_OUTSIDE_GATE, RR_WASTELAND_NEAR_FORTRESS, ENTR_HAUNTED_WASTELAND_EAST_EXIT },
|
||||
{ EntranceType::Overworld, RR_WASTELAND_NEAR_FORTRESS, RR_GF_OUTSIDE_GATE, ENTR_GERUDOS_FORTRESS_GATE_EXIT } },
|
||||
{ { EntranceType::Overworld, RR_WASTELAND_NEAR_COLOSSUS, RR_DESERT_COLOSSUS, ENTR_DESERT_COLOSSUS_EAST_EXIT },
|
||||
|
|
|
@ -1436,7 +1436,7 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
|||
break;
|
||||
}
|
||||
case VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD: {
|
||||
Flags_SetRandomizerInf(RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS);
|
||||
Flags_SetRandomizerInf(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS);
|
||||
*should = false;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -327,6 +327,11 @@ void RegionTable_Init() {
|
|||
//The big poes bottle softlock safety check does not account for the guard house lock if the guard house is not shuffled, so the key is needed before we can safely allow bottle use in logic
|
||||
//RANDOTODO a setting that lets you drink/dump big poes so we don't need this logic
|
||||
EventAccess(&logic->CouldEmptyBigPoes, []{return !ctx->GetOption(RSK_SHUFFLE_INTERIOR_ENTRANCES).Is(RO_INTERIOR_ENTRANCE_SHUFFLE_OFF) || logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}),
|
||||
EventAccess(&logic->TH_CouldRescueF1NorthCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}),
|
||||
EventAccess(&logic->TH_CouldRescueF1SouthCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
|
||||
EventAccess(&logic->TH_CouldRescueF2NorthCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
|
||||
EventAccess(&logic->TH_CouldRescueF2SouthCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
|
||||
EventAccess(&logic->TH_RescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_LINKS_POCKET, true),
|
||||
|
|
|
@ -385,5 +385,6 @@ void RegionTable_Init_SpiritTemple();
|
|||
void RegionTable_Init_ShadowTemple();
|
||||
void RegionTable_Init_BottomOfTheWell();
|
||||
void RegionTable_Init_IceCavern();
|
||||
void RegionTable_Init_ThievesHideout();
|
||||
void RegionTable_Init_GerudoTrainingGround();
|
||||
void RegionTable_Init_GanonsCastle();
|
|
@ -11,7 +11,7 @@ void RegionTable_Init_GerudoTrainingGround() {
|
|||
//Exits
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsVanilla();}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsMQ();}),
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
|
||||
});
|
||||
|
||||
#pragma region Vanilla
|
||||
|
|
|
@ -1,120 +0,0 @@
|
|||
#include "soh/Enhancements/randomizer/location_access.h"
|
||||
#include "soh/Enhancements/randomizer/entrance.h"
|
||||
|
||||
using namespace Rando;
|
||||
|
||||
/*
|
||||
* This file should be split into "gerudo_fortress.cpp" (overworld) & "thieves_hideout.cpp" (dungeons)
|
||||
* when the gerudo fortress refactor is done
|
||||
*/
|
||||
|
||||
void RegionTable_Init_GerudoFortress() {
|
||||
// clang-format off
|
||||
areaTable[RR_GERUDO_FORTRESS] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->CarpenterRescue, []{return logic->CanFinishGerudoFortress();}),
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
|
||||
EventAccess(&logic->GtG_GateOpen, []{return logic->GtG_GateOpen || (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET));}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GF_CHEST, logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_SCARECROW)) || logic->CanUse(RG_LONGSHOT)),
|
||||
LOCATION(RC_GF_HBA_1000_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION(RC_GF_HBA_1500_POINTS, logic->HasItem(RG_CHILD_WALLET) && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_EPONA) && logic->CanUse(RG_FAIRY_BOW) && logic->AtDay),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_NORTH_F2_CARPENTER, (logic->CanKillEnemy(RE_GERUDO_WARRIOR)) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN))),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_GF_GERUDO_MEMBERSHIP_CARD, logic->CanFinishGerudoFortress()),
|
||||
LOCATION(RC_GF_GS_ARCHERY_RANGE, logic->IsAdult && logic->HookshotOrBoomerang() && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && (logic->CanJumpslashExceptHammer() || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->HasExplosives() || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_DINS_FIRE)) && (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN) || ctx->GetTrickOption(RT_GF_JUMP)) && logic->CanGetNightTimeGS()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_POT_1, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_POT_2, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_KITCHEN_POT_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_KITCHEN_POT_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_NORTH_F2_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_NORTH_F2_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots()),
|
||||
LOCATION(RC_GF_ABOVE_JAIL_CRATE, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_1, logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_4, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_5, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_6, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RANGE_CRATE_7, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_START_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_START_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, logic->IsChild && logic->HasExplosives() && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_KITCHEN_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_KITCHEN_CRATE_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_KITCHEN_CRATE_3, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_KITCHEN_CRATE_4, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_KITCHEN_CRATE_5, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_CRATE_1, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_CRATE_2, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_CRATE_3, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_BREAK_ROOM_CRATE_4, ((logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_NORTH_F1_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_NORTH_F3_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, logic->CanBreakCrates()),
|
||||
LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, logic->CanBreakCrates()),
|
||||
|
||||
|
||||
//RANDOTODO doublecheck when GF isn't a blob
|
||||
LOCATION(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}),
|
||||
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES));}),
|
||||
Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
|
||||
});
|
||||
|
||||
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_GERUDO_FORTRESS, []{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_GERUDO_FORTRESS, []{return true;}),
|
||||
});
|
||||
|
||||
// clang-format on
|
||||
}
|
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
Binary file not shown.
Binary file not shown.
After Width: | Height: | Size: 1.3 MiB |
|
@ -0,0 +1,212 @@
|
|||
#include "soh/Enhancements/randomizer/location_access.h"
|
||||
#include "soh/Enhancements/randomizer/entrance.h"
|
||||
|
||||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_GerudoFortress() {
|
||||
#pragma region Ground
|
||||
|
||||
areaTable[RR_GF_GROUND_BOTTOM] = Region("Gerudo Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
|
||||
}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
|
||||
Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}),
|
||||
// RANDTODO: Add tricks for getting past the gerudo guarding the hba range
|
||||
Entrance(RR_GF_GROUND_RED, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_GROUND_RED] = Region("GF Ground Red", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_NORTH_F1_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_GROUND_GREY] = Region("GF Ground Grey", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_RED, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
|
||||
Entrance(RR_GF_GROUND_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
|
||||
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_GROUND_NEAR_GROTTO] = Region("GF Ground Near Grotto", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_KITCHEN_BOTTOM, []{return true;}),
|
||||
Entrance(RR_TH_NORTH_F1_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_TH_SOUTH_F1_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_GF_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_GROUND_OUTSIDE_GTG] = Region("GF Ground 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_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES));}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
Entrance(RR_GF_HBA_RANGE, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
|
||||
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_ABOVE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_UPPER_VINES, []{return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_LONGSHOT);}),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Rooftops
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_YELLOW] = Region("GF Rooftop Yellow", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_BREAK_ROOM, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_RED, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_LIMEGREEN] = Region("GF Rooftop Limegreen", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_YELLOW, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_RED, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_ABOVE_GTG] = Region("GF Rooftop Above GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_KITCHEN_BOTTOM, []{return true;}),
|
||||
// need to explicitly convert it into a bool
|
||||
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
|
||||
Entrance(RR_TH_SOUTH_F2_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_OUTSIDE_GTG, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES] = Region("GF Rooftop Bottom of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_SOUTH_F1_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true /* logic->CanClimb() */;}),
|
||||
Entrance(RR_GF_ROOFTOP_ABOVE_GTG, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_GREY, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_TOP_OF_LOWER_VINES] = Region("GF Rooftop Top of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_KITCHEN_TOP, []{return true;}),
|
||||
Entrance(RR_TH_SOUTH_F2_CARPENTER_AREA, []{return true;}),
|
||||
// need to explicitly convert it into a bool
|
||||
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_UPPER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_BOTTOM_OF_UPPER_VINES] = Region("GF Rooftop Bottom of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_UPPER_VINES, []{return true /* logic->CanClimb() */;}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_OUTSIDE_GTG, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_BELOW_GS] = Region("GF Rooftop 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_NORTH_F2_CARPENTER_AREA, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_NEAR_GS] = Region("GF Rooftop 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_ROOFTOP_BOTTOM_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BELOW_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_LIMEGREEN, []{return logic->CanUse(RG_HOVER_BOOTS) /* || bunny hood jump */;}),
|
||||
Entrance(RR_GF_ROOFTOP_SLOPED, []{return logic->IsAdult;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_SLOPED] = Region("GF Rooftop Sloped", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_UPPER_VINES, []{return logic->IsAdult;}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_NEAR_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_TOP_OF_UPPER_VINES] = Region("GF Rooftop Top of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_SHORT_JUMPSLASH) /* && logic->CanClimb() (to get back up) */ && logic->CanGetNightTimeGS()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_UPPER_VINES, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_NEAR_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BELOW_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_SLOPED, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_CHEST, []{return logic->CanUse(RG_HOVER_BOOTS) || (logic->IsAdult && logic->CanUse(RG_SCARECROW) && logic->CanUse(RG_HOOKSHOT)) || logic->CanUse(RG_LONGSHOT);}),
|
||||
});
|
||||
|
||||
areaTable[RR_GF_ROOFTOP_CHEST] = Region("GF Rooftop 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_ROOFTOP_NEAR_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_BELOW_GS, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_LIMEGREEN, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_YELLOW, []{return true;}),
|
||||
});
|
||||
|
||||
#pragma endregion
|
||||
|
||||
areaTable[RR_GF_TOP_LEDGE] = Region("GF Top of Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
|
||||
//Locations
|
||||
// 1 crate
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_RED, []{return 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_GS_ARCHERY_RANGE, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_OUTSIDE_GTG, []{return 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_GROUND_BOTTOM, []{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_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
}
|
|
@ -17,7 +17,7 @@ void RegionTable_Init_GerudoValley() {
|
|||
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->CarpenterRescue)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}),
|
||||
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->TH_RescuedAllCarpenters)) || (logic->IsChild && logic->CanUse(RG_HOOKSHOT));}),
|
||||
Entrance(RR_GV_LOWER_STREAM, []{return logic->IsChild;}), //can use cucco as child
|
||||
});
|
||||
|
||||
|
@ -78,9 +78,9 @@ void RegionTable_Init_GerudoValley() {
|
|||
LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GERUDO_FORTRESS, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_BOTTOM, []{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->CarpenterRescue;}),
|
||||
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->TH_RescuedAllCarpenters;}),
|
||||
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();}),
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
#include "soh/Enhancements/randomizer/location_access.h"
|
||||
#include "soh/Enhancements/randomizer/entrance.h"
|
||||
|
||||
using namespace Rando;
|
||||
|
||||
void RegionTable_Init_ThievesHideout() {
|
||||
areaTable[RR_TH_NORTH_F1_CARPENTER_AREA] = Region("Thieves Hideout North F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->TH_CouldRescueF1NorthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
|
||||
EventAccess(&logic->TH_RescuedAllCarpenters, []{return logic->SmallKeys(RR_GF_GROUND_BOTTOM, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->TH_CouldRescueF1NorthCarpenter && logic->TH_CouldRescueF1SouthCarpenter && logic->TH_CouldRescueF2NorthCarpenter && logic->TH_CouldRescueF2SouthCarpenter;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TH_NORTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_TH_NORTH_F1_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_NORTH_F1_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_NORTH_F1_CARPENTER_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_GERUDO_MEMBERSHIP_CARD, logic->TH_RescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_RED, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_SOUTH_F1_CARPENTER_AREA] = Region("Thieves Hideout South F1 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->TH_CouldRescueF1SouthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
|
||||
EventAccess(&logic->TH_RescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_GROUND_BOTTOM, 4) && logic->TH_CouldRescueF1NorthCarpenter && logic->TH_CouldRescueF1SouthCarpenter && logic->TH_CouldRescueF2NorthCarpenter && logic->TH_CouldRescueF2SouthCarpenter;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_GERUDO_MEMBERSHIP_CARD, logic->TH_RescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_RED, []{return true;}),
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_NORTH_F2_CARPENTER_AREA] = Region("Thieves Hideout North F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->TH_CouldRescueF2NorthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
|
||||
EventAccess(&logic->TH_RescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_GROUND_BOTTOM, 4) && logic->TH_CouldRescueF1NorthCarpenter && logic->TH_CouldRescueF1SouthCarpenter && logic->TH_CouldRescueF2NorthCarpenter && logic->TH_CouldRescueF2SouthCarpenter;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TH_NORTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_TH_NORTH_F2_CARPENTER_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_NORTH_F2_CARPENTER_POT_2, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_GERUDO_MEMBERSHIP_CARD, logic->TH_RescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_BELOW_GS, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_SOUTH_F2_CARPENTER_AREA] = Region("Thieves Hideout South F2 Carpenter Area", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
|
||||
//Events
|
||||
EventAccess(&logic->TH_CouldRescueF2SouthCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
|
||||
EventAccess(&logic->TH_RescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_GROUND_BOTTOM, 4) && logic->TH_CouldRescueF1NorthCarpenter && logic->TH_CouldRescueF1SouthCarpenter && logic->TH_CouldRescueF2NorthCarpenter && logic->TH_CouldRescueF2SouthCarpenter;}),
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_TH_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
|
||||
LOCATION(RC_TH_GERUDO_MEMBERSHIP_CARD, logic->TH_RescuedAllCarpenters),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_ABOVE_GTG, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true;}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_KITCHEN_BOTTOM] = Region("Thieves Hideout Kitchen Bottom", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_ABOVE_GTG, []{return true;}),
|
||||
Entrance(RR_TH_KITCHEN_MAIN, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || ctx->GetTrickOption(RT_TH_KITCHEN);}),
|
||||
});
|
||||
|
||||
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_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_KITCHEN_BOTTOM, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
|
||||
Entrance(RR_TH_KITCHEN_TOP, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || ctx->GetTrickOption(RT_TH_KITCHEN);}),
|
||||
});
|
||||
|
||||
areaTable[RR_TH_KITCHEN_TOP] = Region("Thieves Hideout Kitchen Top", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
|
||||
//Exits
|
||||
Entrance(RR_TH_KITCHEN_MAIN, []{return true;}),
|
||||
Entrance(RR_GF_ROOFTOP_NEAR_GS, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_TH_KITCHEN);}),
|
||||
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_TH_KITCHEN);}),
|
||||
});
|
||||
|
||||
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_POT_1, logic->CanBreakPots()),
|
||||
LOCATION(RC_TH_BREAK_ROOM_POT_2, logic->CanBreakPots()),
|
||||
}, {
|
||||
//Exits
|
||||
Entrance(RR_GF_ROOFTOP_YELLOW, []{return true;}),
|
||||
Entrance(RR_GF_TOP_LEDGE, []{return true;}),
|
||||
});
|
||||
}
|
|
@ -173,12 +173,12 @@ void Rando::StaticData::InitLocationTable() {
|
|||
locationTable[RC_GF_CHEST] = Location::Chest(RC_GF_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_EN_BOX, SCENE_GERUDOS_FORTRESS, 1984, 0x00, "Chest", RHT_GF_CHEST, RG_PIECE_OF_HEART, true);
|
||||
locationTable[RC_GF_HBA_1000_POINTS] = Location::Base(RC_GF_HBA_1000_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1000 Points", RHT_GF_HBA_1000_POINTS, RG_PIECE_OF_HEART, SpoilerCollectionCheck::InfTable(INFTABLE_190), true);
|
||||
locationTable[RC_GF_HBA_1500_POINTS] = Location::Base(RC_GF_HBA_1500_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, "HBA 1500 Points", RHT_GF_HBA_1500_POINTS, RG_PROGRESSIVE_BOW, SpoilerCollectionCheck::ItemGetInf(15), true);
|
||||
// RandoTodo: Do we replace these with the RC_HIDEOUT keys or keep these?
|
||||
locationTable[RC_GF_GERUDO_MEMBERSHIP_CARD] = Location::Base(RC_GF_GERUDO_MEMBERSHIP_CARD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, "Gerudo Membership Card", RHT_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS), true);
|
||||
locationTable[RC_GF_NORTH_F1_CARPENTER] = Location::Collectable(RC_GF_NORTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "North F1 Carpenter", RHT_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_GF_NORTH_F2_CARPENTER] = Location::Collectable(RC_GF_NORTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "North F2 Carpenter", RHT_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "South F1 Carpenter", RHT_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_GF_SOUTH_F2_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "South F2 Carpenter", RHT_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
// Thieves Hideout
|
||||
locationTable[RC_TH_GERUDO_MEMBERSHIP_CARD] = Location::Base(RC_TH_GERUDO_MEMBERSHIP_CARD, RCQUEST_BOTH, RCTYPE_STANDARD, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, "Gerudo Membership Card", RHT_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS), true);
|
||||
locationTable[RC_TH_NORTH_F1_CARPENTER] = Location::Collectable(RC_TH_NORTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "North F1 Carpenter", RHT_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_TH_NORTH_F2_CARPENTER] = Location::Collectable(RC_TH_NORTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "North F2 Carpenter", RHT_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_TH_SOUTH_F1_CARPENTER] = Location::Collectable(RC_TH_SOUTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "South F1 Carpenter", RHT_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
locationTable[RC_TH_SOUTH_F2_CARPENTER] = Location::Collectable(RC_TH_SOUTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3857, 0x0F, "South F2 Carpenter", RHT_GF_SOUTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, true);
|
||||
// Haunted Wasteland
|
||||
locationTable[RC_WASTELAND_CHEST] = Location::Chest(RC_WASTELAND_CHEST, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_WASTELAND, ACTOR_EN_BOX, SCENE_HAUNTED_WASTELAND, -30048, 0x00, "Chest", RHT_WASTELAND_CHEST, RG_PURPLE_RUPEE);
|
||||
locationTable[RC_WASTELAND_BOMBCHU_SALESMAN] = Location::Base(RC_WASTELAND_BOMBCHU_SALESMAN, RCQUEST_BOTH, RCTYPE_MERCHANT, RCAREA_WASTELAND, ACTOR_ID_MAX, SCENE_HAUNTED_WASTELAND, 0x00, "Carpet Salesman", RHT_WASTELAND_BOMBCHU_SALESMAN, RG_BUY_BOMBCHUS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MERCHANTS_CARPET_SALESMAN), false, 200);
|
||||
|
|
|
@ -486,6 +486,8 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
|
|||
bool inWater) {
|
||||
bool killed = false;
|
||||
switch (enemy) {
|
||||
case RE_GERUDO_GUARD:
|
||||
return false;
|
||||
case RE_GOLD_SKULLTULA:
|
||||
switch (distance) {
|
||||
case ED_CLOSE:
|
||||
|
@ -842,6 +844,8 @@ bool Logic::CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
|
|||
case RE_PURPLE_LEEVER:
|
||||
case RE_OCTOROK:
|
||||
return true;
|
||||
case RE_GERUDO_GUARD:
|
||||
return HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT);
|
||||
case RE_BIG_SKULLTULA:
|
||||
// hammer jumpslash can pass, but only on flat land where you can kill with hammer swing
|
||||
return CanUse(RG_NUTS) || CanUse(RG_BOOMERANG);
|
||||
|
@ -1267,14 +1271,14 @@ bool Logic::HasFireSourceWithTorch() {
|
|||
return HasFireSource() || CanUse(RG_STICKS);
|
||||
}
|
||||
|
||||
// Is this best off signaling what you have already traded, or what step you are currently on?
|
||||
bool Logic::TradeQuestStep(RandomizerGet rg) {
|
||||
if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)) {
|
||||
return false; // This does not apply when we are shuffling trade items
|
||||
//Is this best off signaling what you have already traded, or what step you are currently on?
|
||||
bool Logic::TradeQuestStep(RandomizerGet rg){
|
||||
if (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE)){
|
||||
return false; //This does not apply when we are shuffling trade items
|
||||
}
|
||||
bool hasState = false;
|
||||
// Falling through each case to test each possibility
|
||||
switch (rg) {
|
||||
//Falling through each case to test each possibility
|
||||
switch (rg){
|
||||
case RG_POCKET_EGG:
|
||||
hasState = hasState || HasItem(RG_POCKET_EGG);
|
||||
[[fallthrough]];
|
||||
|
@ -1303,23 +1307,12 @@ bool Logic::TradeQuestStep(RandomizerGet rg) {
|
|||
hasState = hasState || HasItem(RG_CLAIM_CHECK);
|
||||
break;
|
||||
default:
|
||||
SPDLOG_ERROR("TradeQuestStep reached `return false;`. Missing case for RandomizerGet of {}",
|
||||
static_cast<uint32_t>(rg));
|
||||
SPDLOG_ERROR("TradeQuestStep reached `return false;`. Missing case for RandomizerGet of {}", static_cast<uint32_t>(rg));
|
||||
assert(false);
|
||||
return false;
|
||||
}
|
||||
return hasState;
|
||||
}
|
||||
|
||||
bool Logic::CanFinishGerudoFortress() {
|
||||
return (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && SmallKeys(RR_GERUDO_FORTRESS, 4) &&
|
||||
CanKillEnemy(RE_GERUDO_WARRIOR) &&
|
||||
(HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT) ||
|
||||
CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_GF_KITCHEN))) ||
|
||||
(ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST) && SmallKeys(RR_GERUDO_FORTRESS, 1) &&
|
||||
CanKillEnemy(RE_GERUDO_WARRIOR)) ||
|
||||
ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);
|
||||
}
|
||||
}
|
||||
|
||||
bool Logic::CanStandingShield() {
|
||||
return CanUse(RG_MIRROR_SHIELD) || (IsAdult && HasItem(RG_HYLIAN_SHIELD)) || CanUse(RG_DEKU_SHIELD);
|
||||
|
@ -1442,7 +1435,7 @@ bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless
|
|||
}*/
|
||||
return GetSmallKeyCount(SCENE_TREASURE_BOX_SHOP) >= requiredAmountGlitchless;
|
||||
|
||||
case RR_GERUDO_FORTRESS:
|
||||
case RR_GF_GROUND_BOTTOM:
|
||||
return GetSmallKeyCount(SCENE_THIEVES_HIDEOUT) >= requiredAmountGlitchless;
|
||||
|
||||
default:
|
||||
|
@ -2464,9 +2457,12 @@ void Logic::Reset() {
|
|||
AtNight = false;
|
||||
GetSaveContext()->linkAge = !ctx->GetOption(RSK_SELECTED_STARTING_AGE).Get();
|
||||
|
||||
// Events
|
||||
//Events
|
||||
ShowedMidoSwordAndShield = false;
|
||||
CarpenterRescue = false;
|
||||
TH_CouldRescueF1NorthCarpenter = false;
|
||||
TH_CouldRescueF1SouthCarpenter = false;
|
||||
TH_CouldRescueF2NorthCarpenter = false;
|
||||
TH_CouldRescueF2SouthCarpenter = false;
|
||||
GF_GateOpen = false;
|
||||
GtG_GateOpen = false;
|
||||
DampesWindmillAccess = false;
|
||||
|
@ -2518,7 +2514,7 @@ void Logic::Reset() {
|
|||
MQWaterStalfosPit = false;
|
||||
MQWaterDragonTorches = false;
|
||||
MQWaterB1Switch = false;
|
||||
// MQWaterPillarSoTBlock = false;
|
||||
//MQWaterPillarSoTBlock = false;
|
||||
MQWaterOpenedPillarB1 = false;
|
||||
MQSpiritCrawlBoulder = false;
|
||||
MQSpiritMapRoomEnemies = false;
|
||||
|
|
|
@ -116,7 +116,11 @@ class Logic {
|
|||
|
||||
// Events
|
||||
bool ShowedMidoSwordAndShield = false;
|
||||
bool CarpenterRescue = false;
|
||||
bool TH_CouldRescueF1NorthCarpenter = false;
|
||||
bool TH_CouldRescueF1SouthCarpenter = false;
|
||||
bool TH_CouldRescueF2NorthCarpenter = false;
|
||||
bool TH_CouldRescueF2SouthCarpenter = false;
|
||||
bool TH_RescuedAllCarpenters = false;
|
||||
bool GF_GateOpen = false;
|
||||
bool GtG_GateOpen = false;
|
||||
bool DampesWindmillAccess = false;
|
||||
|
@ -247,7 +251,6 @@ class Logic {
|
|||
bool HasFireSource();
|
||||
bool HasFireSourceWithTorch();
|
||||
bool TradeQuestStep(RandomizerGet rg);
|
||||
bool CanFinishGerudoFortress();
|
||||
bool CanStandingShield();
|
||||
bool CanShield();
|
||||
bool CanUseProjectile();
|
||||
|
|
|
@ -1564,22 +1564,22 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
|
|||
{ RC_KF_TWINS_HOUSE_POT_2, RAND_INF_KF_TWINS_HOUSE_POT_2 },
|
||||
{ RC_KF_BROTHERS_HOUSE_POT_1, RAND_INF_KF_BROTHERS_HOUSE_POT_1 },
|
||||
{ RC_KF_BROTHERS_HOUSE_POT_2, RAND_INF_KF_BROTHERS_HOUSE_POT_2 },
|
||||
{ RC_GF_BREAK_ROOM_POT_1, RAND_INF_GF_BREAK_ROOM_POT_1 },
|
||||
{ RC_GF_BREAK_ROOM_POT_2, RAND_INF_GF_BREAK_ROOM_POT_2 },
|
||||
{ RC_GF_KITCHEN_POT_1, RAND_INF_GF_KITCHEN_POT_1 },
|
||||
{ RC_GF_KITCHEN_POT_2, RAND_INF_GF_KITCHEN_POT_2 },
|
||||
{ RC_GF_NORTH_F1_CARPENTER_POT_1, RAND_INF_GF_NORTH_F1_CARPENTER_POT_1 },
|
||||
{ RC_GF_NORTH_F1_CARPENTER_POT_2, RAND_INF_GF_NORTH_F1_CARPENTER_POT_2 },
|
||||
{ RC_GF_NORTH_F1_CARPENTER_POT_3, RAND_INF_GF_NORTH_F1_CARPENTER_POT_3 },
|
||||
{ RC_GF_NORTH_F2_CARPENTER_POT_1, RAND_INF_GF_NORTH_F2_CARPENTER_POT_1 },
|
||||
{ RC_GF_NORTH_F2_CARPENTER_POT_2, RAND_INF_GF_NORTH_F2_CARPENTER_POT_2 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3 },
|
||||
{ RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4 },
|
||||
{ RC_TH_BREAK_ROOM_POT_1, RAND_INF_TH_BREAK_ROOM_POT_1 },
|
||||
{ RC_TH_BREAK_ROOM_POT_2, RAND_INF_TH_BREAK_ROOM_POT_2 },
|
||||
{ RC_TH_KITCHEN_POT_1, RAND_INF_TH_KITCHEN_POT_1 },
|
||||
{ RC_TH_KITCHEN_POT_2, RAND_INF_TH_KITCHEN_POT_2 },
|
||||
{ RC_TH_NORTH_F1_CARPENTER_POT_1, RAND_INF_TH_NORTH_F1_CARPENTER_POT_1 },
|
||||
{ RC_TH_NORTH_F1_CARPENTER_POT_2, RAND_INF_TH_NORTH_F1_CARPENTER_POT_2 },
|
||||
{ RC_TH_NORTH_F1_CARPENTER_POT_3, RAND_INF_TH_NORTH_F1_CARPENTER_POT_3 },
|
||||
{ RC_TH_NORTH_F2_CARPENTER_POT_1, RAND_INF_TH_NORTH_F2_CARPENTER_POT_1 },
|
||||
{ RC_TH_NORTH_F2_CARPENTER_POT_2, RAND_INF_TH_NORTH_F2_CARPENTER_POT_2 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_POT_1, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_POT_2, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_POT_3, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_CELL_POT_1, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_CELL_POT_2, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_CELL_POT_3, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3 },
|
||||
{ RC_TH_SOUTH_F1_CARPENTER_CELL_POT_4, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_4 },
|
||||
{ RC_WASTELAND_NEAR_GS_POT_1, RAND_INF_WASTELAND_NEAR_GS_POT_1 },
|
||||
{ RC_WASTELAND_NEAR_GS_POT_2, RAND_INF_WASTELAND_NEAR_GS_POT_2 },
|
||||
{ RC_WASTELAND_NEAR_GS_POT_3, RAND_INF_WASTELAND_NEAR_GS_POT_3 },
|
||||
|
|
|
@ -408,9 +408,34 @@ typedef enum {
|
|||
RR_GV_FORTRESS_SIDE,
|
||||
RR_GV_CARPENTER_TENT,
|
||||
RR_GV_STORMS_GROTTO,
|
||||
RR_GERUDO_FORTRESS,
|
||||
RR_GF_GROUND_BOTTOM,
|
||||
RR_GF_GROUND_RED,
|
||||
RR_GF_GROUND_GREY,
|
||||
RR_GF_GROUND_OUTSIDE_GTG,
|
||||
RR_GF_GROUND_NEAR_GROTTO,
|
||||
RR_GF_ROOFTOP_YELLOW,
|
||||
RR_GF_ROOFTOP_LIMEGREEN,
|
||||
RR_GF_ROOFTOP_ABOVE_GTG,
|
||||
RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES,
|
||||
RR_GF_ROOFTOP_TOP_OF_LOWER_VINES,
|
||||
RR_GF_ROOFTOP_BOTTOM_OF_UPPER_VINES,
|
||||
RR_GF_ROOFTOP_BELOW_GS,
|
||||
RR_GF_ROOFTOP_NEAR_GS,
|
||||
RR_GF_ROOFTOP_SLOPED,
|
||||
RR_GF_ROOFTOP_TOP_OF_UPPER_VINES,
|
||||
RR_GF_ROOFTOP_CHEST,
|
||||
RR_GF_HBA_RANGE,
|
||||
RR_GF_TOP_LEDGE,
|
||||
RR_GF_OUTSIDE_GATE,
|
||||
RR_GF_STORMS_GROTTO,
|
||||
RR_TH_NORTH_F1_CARPENTER_AREA,
|
||||
RR_TH_SOUTH_F1_CARPENTER_AREA,
|
||||
RR_TH_NORTH_F2_CARPENTER_AREA,
|
||||
RR_TH_SOUTH_F2_CARPENTER_AREA,
|
||||
RR_TH_KITCHEN_BOTTOM,
|
||||
RR_TH_KITCHEN_MAIN,
|
||||
RR_TH_KITCHEN_TOP,
|
||||
RR_TH_BREAK_ROOM,
|
||||
RR_WASTELAND_NEAR_FORTRESS,
|
||||
RR_HAUNTED_WASTELAND,
|
||||
RR_WASTELAND_NEAR_COLOSSUS,
|
||||
|
@ -1372,11 +1397,11 @@ typedef enum {
|
|||
RC_GF_CHEST,
|
||||
RC_GF_HBA_1000_POINTS,
|
||||
RC_GF_HBA_1500_POINTS,
|
||||
RC_GF_GERUDO_MEMBERSHIP_CARD,
|
||||
RC_GF_NORTH_F1_CARPENTER,
|
||||
RC_GF_NORTH_F2_CARPENTER,
|
||||
RC_GF_SOUTH_F1_CARPENTER,
|
||||
RC_GF_SOUTH_F2_CARPENTER,
|
||||
RC_TH_GERUDO_MEMBERSHIP_CARD,
|
||||
RC_TH_NORTH_F1_CARPENTER,
|
||||
RC_TH_NORTH_F2_CARPENTER,
|
||||
RC_TH_SOUTH_F1_CARPENTER,
|
||||
RC_TH_SOUTH_F2_CARPENTER,
|
||||
RC_GF_GS_TOP_FLOOR,
|
||||
RC_GF_GS_ARCHERY_RANGE,
|
||||
RC_HIDEOUT_JAIL_GUARD_1_TORCH,
|
||||
|
@ -1796,22 +1821,22 @@ typedef enum {
|
|||
RC_KF_TWINS_HOUSE_POT_2,
|
||||
RC_KF_BROTHERS_HOUSE_POT_1,
|
||||
RC_KF_BROTHERS_HOUSE_POT_2,
|
||||
RC_GF_BREAK_ROOM_POT_1,
|
||||
RC_GF_BREAK_ROOM_POT_2,
|
||||
RC_GF_KITCHEN_POT_1,
|
||||
RC_GF_KITCHEN_POT_2,
|
||||
RC_GF_NORTH_F1_CARPENTER_POT_1,
|
||||
RC_GF_NORTH_F1_CARPENTER_POT_2,
|
||||
RC_GF_NORTH_F1_CARPENTER_POT_3,
|
||||
RC_GF_NORTH_F2_CARPENTER_POT_1,
|
||||
RC_GF_NORTH_F2_CARPENTER_POT_2,
|
||||
RC_GF_SOUTH_F1_CARPENTER_POT_1,
|
||||
RC_GF_SOUTH_F1_CARPENTER_POT_2,
|
||||
RC_GF_SOUTH_F1_CARPENTER_POT_3,
|
||||
RC_GF_SOUTH_F1_CARPENTER_CELL_POT_1,
|
||||
RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2,
|
||||
RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3,
|
||||
RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4,
|
||||
RC_TH_BREAK_ROOM_POT_1,
|
||||
RC_TH_BREAK_ROOM_POT_2,
|
||||
RC_TH_KITCHEN_POT_1,
|
||||
RC_TH_KITCHEN_POT_2,
|
||||
RC_TH_NORTH_F1_CARPENTER_POT_1,
|
||||
RC_TH_NORTH_F1_CARPENTER_POT_2,
|
||||
RC_TH_NORTH_F1_CARPENTER_POT_3,
|
||||
RC_TH_NORTH_F2_CARPENTER_POT_1,
|
||||
RC_TH_NORTH_F2_CARPENTER_POT_2,
|
||||
RC_TH_SOUTH_F1_CARPENTER_POT_1,
|
||||
RC_TH_SOUTH_F1_CARPENTER_POT_2,
|
||||
RC_TH_SOUTH_F1_CARPENTER_POT_3,
|
||||
RC_TH_SOUTH_F1_CARPENTER_CELL_POT_1,
|
||||
RC_TH_SOUTH_F1_CARPENTER_CELL_POT_2,
|
||||
RC_TH_SOUTH_F1_CARPENTER_CELL_POT_3,
|
||||
RC_TH_SOUTH_F1_CARPENTER_CELL_POT_4,
|
||||
RC_WASTELAND_NEAR_GS_POT_1,
|
||||
RC_WASTELAND_NEAR_GS_POT_2,
|
||||
RC_WASTELAND_NEAR_GS_POT_3,
|
||||
|
@ -3089,7 +3114,7 @@ typedef enum {
|
|||
RC_DMT_FLAG_SUN_FAIRY,
|
||||
RC_DMT_COW_GROTTO_STORMS_FAIRY,
|
||||
RC_LW_SHORTCUT_STORMS_FAIRY,
|
||||
RC_GF_KITCHEN_SUN_FAIRY,
|
||||
RC_TH_KITCHEN_SUN_FAIRY,
|
||||
RC_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
|
||||
RC_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
|
||||
RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
|
||||
|
@ -3526,7 +3551,7 @@ typedef enum {
|
|||
RT_LH_LAB_DIVING,
|
||||
RT_LH_WATER_HOOKSHOT,
|
||||
RT_GV_CRATE_HOVERS,
|
||||
RT_GF_KITCHEN,
|
||||
RT_TH_KITCHEN,
|
||||
RT_GF_JUMP,
|
||||
RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON,
|
||||
RT_HW_BUNNY_CROSSING,
|
||||
|
@ -5551,7 +5576,7 @@ typedef enum {
|
|||
RHT_DMT_FLAG_SUN_FAIRY,
|
||||
RHT_DMT_COW_GROTTO_STORMS_FAIRY,
|
||||
RHT_LW_SHORTCUT_STORMS_FAIRY,
|
||||
RHT_GF_KITCHEN_SUN_FAIRY,
|
||||
RHT_TH_KITCHEN_SUN_FAIRY,
|
||||
RHT_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
|
||||
RHT_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
|
||||
RHT_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
|
||||
|
@ -6419,6 +6444,7 @@ typedef enum {
|
|||
RE_STINGER,
|
||||
RE_BIG_OCTO,
|
||||
RE_GERUDO_WARRIOR,
|
||||
RE_GERUDO_GUARD,
|
||||
RE_GIBDO,
|
||||
RE_GOHMA,
|
||||
RE_KING_DODONGO,
|
||||
|
|
|
@ -231,20 +231,20 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() {
|
|||
(location.GetRandomizerCheck() != RC_KAK_100_GOLD_SKULLTULA_REWARD ||
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGanonBossKey"), RO_GANON_BOSS_KEY_VANILLA) !=
|
||||
RO_GANON_BOSS_KEY_KAK_TOKENS) && // 100 skull reward ganon boss key
|
||||
(location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_GF_GERUDO_MEMBERSHIP_CARD ||
|
||||
(location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_TH_GERUDO_MEMBERSHIP_CARD ||
|
||||
(CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) ==
|
||||
RO_GF_CARPENTERS_FREE &&
|
||||
location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_GF_GERUDO_MEMBERSHIP_CARD) ||
|
||||
location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_TH_GERUDO_MEMBERSHIP_CARD) ||
|
||||
(CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) ==
|
||||
RO_GF_CARPENTERS_FAST &&
|
||||
((location.GetRandomizerCheck() == RC_GF_GERUDO_MEMBERSHIP_CARD &&
|
||||
((location.GetRandomizerCheck() == RC_TH_GERUDO_MEMBERSHIP_CARD &&
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_NO) == RO_GENERIC_YES) ||
|
||||
(location.GetRandomizerCheck() == RC_GF_NORTH_F1_CARPENTER &&
|
||||
(location.GetRandomizerCheck() == RC_TH_NORTH_F1_CARPENTER &&
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) !=
|
||||
RO_GERUDO_KEYS_VANILLA))) ||
|
||||
(CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) ==
|
||||
RO_GF_CARPENTERS_NORMAL &&
|
||||
((location.GetRandomizerCheck() == RC_GF_GERUDO_MEMBERSHIP_CARD &&
|
||||
((location.GetRandomizerCheck() == RC_TH_GERUDO_MEMBERSHIP_CARD &&
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_NO) == RO_GENERIC_YES) ||
|
||||
(location.GetRCType() == RCTYPE_GF_KEY &&
|
||||
CVarGetInteger(CVAR_RANDOMIZER_SETTING("GerudoKeys"), RO_GERUDO_KEYS_VANILLA) !=
|
||||
|
|
|
@ -746,7 +746,7 @@ void CheckTrackerFlagSet(int16_t flagType, int32_t flag) {
|
|||
if ((flag == EVENTCHKINF_CARPENTERS_FREE(0) || flag == EVENTCHKINF_CARPENTERS_FREE(1) ||
|
||||
flag == EVENTCHKINF_CARPENTERS_FREE(2) || flag == EVENTCHKINF_CARPENTERS_FREE(3)) &&
|
||||
GET_EVENTCHKINF_CARPENTERS_FREE_ALL()) {
|
||||
SetCheckCollected(RC_GF_GERUDO_MEMBERSHIP_CARD);
|
||||
SetCheckCollected(RC_TH_GERUDO_MEMBERSHIP_CARD);
|
||||
return;
|
||||
}
|
||||
checkMatchType = SpoilerCollectionCheckType::SPOILER_CHK_EVENT_CHK_INF;
|
||||
|
@ -1549,10 +1549,10 @@ bool IsCheckShuffled(RandomizerCheck rc) {
|
|||
(loc->GetRCType() != RCTYPE_BOSS_KEY || showBossKeysanity) &&
|
||||
(loc->GetRCType() != RCTYPE_GANON_BOSS_KEY || showGanonBossKey) &&
|
||||
(rc != RC_KAK_100_GOLD_SKULLTULA_REWARD || show100SkullReward) &&
|
||||
(loc->GetRCType() != RCTYPE_GF_KEY && rc != RC_GF_GERUDO_MEMBERSHIP_CARD ||
|
||||
(showGerudoCard && rc == RC_GF_GERUDO_MEMBERSHIP_CARD) ||
|
||||
(loc->GetRCType() != RCTYPE_GF_KEY && rc != RC_TH_GERUDO_MEMBERSHIP_CARD ||
|
||||
(showGerudoCard && rc == RC_TH_GERUDO_MEMBERSHIP_CARD) ||
|
||||
(fortressNormal && showGerudoFortressKeys && loc->GetRCType() == RCTYPE_GF_KEY) ||
|
||||
(fortressFast && showGerudoFortressKeys && rc == RC_GF_NORTH_F1_CARPENTER));
|
||||
(fortressFast && showGerudoFortressKeys && rc == RC_TH_NORTH_F1_CARPENTER));
|
||||
} else if (loc->IsVanillaCompletion()) {
|
||||
return (OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) || rc == RC_GIFT_FROM_RAURU) &&
|
||||
rc != RC_LINKS_POCKET;
|
||||
|
|
|
@ -206,22 +206,22 @@ typedef enum {
|
|||
RAND_INF_KF_TWINS_HOUSE_POT_2,
|
||||
RAND_INF_KF_BROTHERS_HOUSE_POT_1,
|
||||
RAND_INF_KF_BROTHERS_HOUSE_POT_2,
|
||||
RAND_INF_GF_BREAK_ROOM_POT_1,
|
||||
RAND_INF_GF_BREAK_ROOM_POT_2,
|
||||
RAND_INF_GF_KITCHEN_POT_1,
|
||||
RAND_INF_GF_KITCHEN_POT_2,
|
||||
RAND_INF_GF_NORTH_F1_CARPENTER_POT_1,
|
||||
RAND_INF_GF_NORTH_F1_CARPENTER_POT_2,
|
||||
RAND_INF_GF_NORTH_F1_CARPENTER_POT_3,
|
||||
RAND_INF_GF_NORTH_F2_CARPENTER_POT_1,
|
||||
RAND_INF_GF_NORTH_F2_CARPENTER_POT_2,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_POT_1,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_POT_2,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_POT_3,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_1,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_2,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_3,
|
||||
RAND_INF_GF_SOUTH_F1_CARPENTER_CELL_POT_4,
|
||||
RAND_INF_TH_BREAK_ROOM_POT_1,
|
||||
RAND_INF_TH_BREAK_ROOM_POT_2,
|
||||
RAND_INF_TH_KITCHEN_POT_1,
|
||||
RAND_INF_TH_KITCHEN_POT_2,
|
||||
RAND_INF_TH_NORTH_F1_CARPENTER_POT_1,
|
||||
RAND_INF_TH_NORTH_F1_CARPENTER_POT_2,
|
||||
RAND_INF_TH_NORTH_F1_CARPENTER_POT_3,
|
||||
RAND_INF_TH_NORTH_F2_CARPENTER_POT_1,
|
||||
RAND_INF_TH_NORTH_F2_CARPENTER_POT_2,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3,
|
||||
RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_4,
|
||||
RAND_INF_WASTELAND_NEAR_GS_POT_1,
|
||||
RAND_INF_WASTELAND_NEAR_GS_POT_2,
|
||||
RAND_INF_WASTELAND_NEAR_GS_POT_3,
|
||||
|
@ -1090,7 +1090,7 @@ typedef enum {
|
|||
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||
|
||||
RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS,
|
||||
RAND_INF_TH_ITEM_FROM_LEADER_OF_FORTRESS,
|
||||
RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN,
|
||||
|
||||
RAND_INF_ZELDAS_LETTER,
|
||||
|
@ -1505,7 +1505,7 @@ typedef enum {
|
|||
RAND_INF_DMT_COW_GROTTO_STORMS_FAIRY,
|
||||
RAND_INF_HF_FENCE_GROTTO_STORMS_FAIRY,
|
||||
RAND_INF_LW_SHORTCUT_STORMS_FAIRY,
|
||||
RAND_INF_GF_KITCHEN_SUN_FAIRY,
|
||||
RAND_INF_TH_KITCHEN_SUN_FAIRY,
|
||||
RAND_INF_LW_DEKU_SCRUB_GROTTO_SUN_FAIRY,
|
||||
RAND_INF_GRAVEYARD_ROYAL_FAMILYS_TOMB_SUN_FAIRY,
|
||||
RAND_INF_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY,
|
||||
|
|
|
@ -569,7 +569,7 @@ void Settings::CreateOptions() {
|
|||
"Gerudo Valley Crate PoH as Adult with Hover Boots",
|
||||
"From the far side of Gerudo Valley, a precise Hover Boots movement and jump-slash recoil can allow "
|
||||
"adult to reach the ledge with the crate PoH without needing Longshot. You will take fall damage.");
|
||||
OPT_TRICK(RT_GF_KITCHEN, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
|
||||
OPT_TRICK(RT_TH_KITCHEN, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
|
||||
"Thieves\' Hideout \"Kitchen\" with No Additional Items",
|
||||
"Allows passing through the kitchen by avoiding being seen by the guards. The logic normally guarantees "
|
||||
"Bow or Hookshot to stun them from a distance, or Hover Boots to cross the room without needing to deal "
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue