update logic, get it working

This commit is contained in:
Pepper0ni 2025-04-05 23:41:00 +01:00
commit f64aaeadeb
21 changed files with 753 additions and 681 deletions

View file

@ -811,16 +811,16 @@ void GenerateItemPool() {
// Gerudo Fortress
if (ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE)) {
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);
ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_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_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);
ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_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_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);
ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_RECOVERY_HEART, false, true);
ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_CARPENTER, RG_RECOVERY_HEART, false, true);
} else {
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);
ctx->PlaceItemInLocation(RC_TH_1_TORCH_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
ctx->PlaceItemInLocation(RC_TH_DEAD_END_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
ctx->PlaceItemInLocation(RC_TH_DOUBLE_CELL_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, false, true);
ctx->PlaceItemInLocation(RC_TH_STEEP_SLOPE_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_TH_GERUDO_MEMBERSHIP_CARD, RG_ICE_TRAP, false, true);
ctx->PlaceItemInLocation(RC_TH_FREED_CARPENTERS, RG_ICE_TRAP, false, true);
} else {
ctx->PlaceItemInLocation(RC_TH_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, false, true);
ctx->PlaceItemInLocation(RC_TH_FREED_CARPENTERS, RG_GERUDO_MEMBERSHIP_CARD, false, true);
}
// Keys

View file

@ -304,38 +304,38 @@ void Rando::StaticData::RegisterCrateLocations() {
locationTable[RC_GV_FREESTANDING_POH_CRATE] = Location::Crate(RC_GV_FREESTANDING_POH_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-350, 1480), "Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_CRATE));
locationTable[RC_GV_NEAR_COW_CRATE] = Location::Crate(RC_GV_NEAR_COW_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-449, 123), "Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE));
locationTable[RC_GF_ABOVE_JAIL_CRATE] = Location::Crate(RC_GF_ABOVE_JAIL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(51, -2997), "Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE));
locationTable[RC_GF_OUTSIDE_CENTER_CRATE_1] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1534), "Outside Center Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_1));
locationTable[RC_GF_OUTSIDE_CENTER_CRATE_2] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1594), "Outside Center Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2));
locationTable[RC_GF_OUTSIDE_CENTER_CRATE_3] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1782), "Outside Center Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3));
locationTable[RC_GF_OUTSIDE_CENTER_CRATE_4] = Location::Crate(RC_GF_OUTSIDE_CENTER_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1842), "Outside Center Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_4));
locationTable[RC_GF_OUTSIDE_LEFT_CRATE_1] = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-60, -2210), "Outside Left Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_1));
locationTable[RC_GF_OUTSIDE_LEFT_CRATE_2] = Location::Crate(RC_GF_OUTSIDE_LEFT_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-120, -2210), "Outside Left Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_2));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_2] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1780), "Archery Range Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_2));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_3] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2020), "Archery Range Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_3));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_4] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2260), "Archery Range Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_4));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_1] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1540), "Archery Range Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_5] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2500), "Archery Range Crate 5", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_5));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_6] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2740), "Archery Range Crate 6", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_6));
locationTable[RC_GF_ARCHERY_RANGE_CRATE_7] = Location::Crate(RC_GF_ARCHERY_RANGE_CRATE_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2980), "Archery Range Crate 7", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_7));
locationTable[RC_GF_ARCHERY_START_CRATE_1] = Location::Crate(RC_GF_ARCHERY_START_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3727, -243), "Near Archery Start Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_1));
locationTable[RC_GF_ARCHERY_START_CRATE_2] = Location::Crate(RC_GF_ARCHERY_START_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3667, -243), "Near Archery Start Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_START_CRATE_2));
locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_1] = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3446, -4875), "Archery Left End Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1));
locationTable[RC_GF_ARCHERY_LEFT_END_CRATE_2] = Location::Crate(RC_GF_ARCHERY_LEFT_END_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3303, -5018), "Archery Left End Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2));
locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_1] = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3406, 414), "Archery Right End Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1));
locationTable[RC_GF_ARCHERY_RIGHT_END_CRATE_2] = Location::Crate(RC_GF_ARCHERY_RIGHT_END_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3330, 406), "Archery Right End Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2));
locationTable[RC_GF_KITCHEN_CRATE_1] = Location::Crate(RC_GF_KITCHEN_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1251), "Kitchen Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_1));
locationTable[RC_GF_KITCHEN_CRATE_2] = Location::Crate(RC_GF_KITCHEN_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1191), "Kitchen Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_2));
locationTable[RC_GF_KITCHEN_CRATE_3] = Location::Crate(RC_GF_KITCHEN_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -847), "Kitchen Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3));
locationTable[RC_GF_KITCHEN_CRATE_4] = Location::Crate(RC_GF_KITCHEN_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -787), "Kitchen Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_4));
locationTable[RC_GF_KITCHEN_CRATE_5] = Location::Crate(RC_GF_KITCHEN_CRATE_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1610, -624), "Kitchen Crate 5", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_5));
locationTable[RC_GF_BREAK_ROOM_CRATE_1] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1260, -3155), "Break Room Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_1));
locationTable[RC_GF_BREAK_ROOM_CRATE_4] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3550), "Break Room Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_4));
locationTable[RC_GF_BREAK_ROOM_CRATE_2] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1360, -3325), "Break Room Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_2));
locationTable[RC_GF_BREAK_ROOM_CRATE_3] = Location::Crate(RC_GF_BREAK_ROOM_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3502), "Break Room Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_BREAK_ROOM_CRATE_3));
locationTable[RC_GF_NORTH_F1_CARPENTER_CRATE] = Location::Crate(RC_GF_NORTH_F1_CARPENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-510, -2213), "North F1 Carpenter Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F1_CARPENTER_CRATE));
locationTable[RC_GF_NORTH_F3_CARPENTER_CRATE] = Location::Crate(RC_GF_NORTH_F3_CARPENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1090, -2210), "North F3 Carpenter Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_F3_CARPENTER_CRATE));
locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_1] = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-49, 11), "South F2 Carpenter Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1));
locationTable[RC_GF_SOUTH_F2_CARPENTER_CRATE_2] = Location::Crate(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(11, 11), "South F2 Carpenter Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2));
locationTable[RC_GF_SOUTHMOST_CENTER_CRATE] = Location::Crate(RC_GF_SOUTHMOST_CENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1534), "Southmost Center Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTHMOST_CENTER_CRATE));
locationTable[RC_GF_MID_SOUTH_CENTER_CRATE] = Location::Crate(RC_GF_MID_SOUTH_CENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(315, -1594), "Middle South Center Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_MID_SOUTH_CENTER_CRATE));
locationTable[RC_GF_MID_NORTH_CENTER_CRATE] = Location::Crate(RC_GF_MID_NORTH_CENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1782), "Middle North Center Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_MID_NORTH_CENTER_CRATE));
locationTable[RR_GF_NORTHMOST_CENTER_CRATE] = Location::Crate(RR_GF_NORTHMOST_CENTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(310, -1842), "Northmost Center Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTHMOST_CENTER_CRATE));
locationTable[RC_GF_OUTSKIRTS_NE_CRATE] = Location::Crate(RC_GF_OUTSKIRTS_NE_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-60, -2210), "Outskirts Northeast Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSKIRTS_NE_CRATE));
locationTable[RC_GF_OUTSKIRTS_NW_CRATE] = Location::Crate(RC_GF_OUTSKIRTS_NW_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-120, -2210), "Outskirts Northwest Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSKIRTS_NW_CRATE));
locationTable[RC_GF_HBA_RANGE_CRATE_2] = Location::Crate(RC_GF_HBA_RANGE_CRATE_2, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1780), "Horseback Archery Range Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_2));
locationTable[RC_GF_HBA_RANGE_CRATE_3] = Location::Crate(RC_GF_HBA_RANGE_CRATE_3, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2020), "Horseback Archery Range Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_3));
locationTable[RC_GF_HBA_RANGE_CRATE_4] = Location::Crate(RC_GF_HBA_RANGE_CRATE_4, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2260), "Horseback Archery Range Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_4));
locationTable[RC_GF_HBA_RANGE_CRATE_1] = Location::Crate(RC_GF_HBA_RANGE_CRATE_1, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -1540), "Horseback Archery Range Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_1));
locationTable[RC_GF_HBA_RANGE_CRATE_5] = Location::Crate(RC_GF_HBA_RANGE_CRATE_5, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2500), "Horseback Archery Range Crate 5", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_5));
locationTable[RC_GF_HBA_RANGE_CRATE_6] = Location::Crate(RC_GF_HBA_RANGE_CRATE_6, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2740), "Horseback Archery Range Crate 6", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_6));
locationTable[RC_GF_HBA_RANGE_CRATE_7] = Location::Crate(RC_GF_HBA_RANGE_CRATE_7, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(4090, -2980), "Horseback Archery Range Crate 7", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_RANGE_CRATE_7));
locationTable[RC_GF_HBA_CANOPY_EAST_CRATE] = Location::Crate(RC_GF_HBA_CANOPY_EAST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3727, -243), "Horseback Archery Canopy East Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_CANOPY_EAST_CRATE));
locationTable[RC_GF_HBA_CANOPY_WEST_CRATE] = Location::Crate(RC_GF_HBA_CANOPY_WEST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3667, -243), "Horseback Archery Canopy West Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_HBA_CANOPY_WEST_CRATE));
locationTable[RC_GF_NORTH_TARGET_EAST_CRATE] = Location::Crate(RC_GF_NORTH_TARGET_EAST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3446, -4875), "North Target East Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_TARGET_EAST_CRATE));
locationTable[RC_GF_NORTH_TARGET_WEST_CRATE] = Location::Crate(RC_GF_NORTH_TARGET_WEST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3303, -5018), "North Target West Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_TARGET_WEST_CRATE));
locationTable[RC_GF_SOUTH_TARGET_EAST_CRATE] = Location::Crate(RC_GF_SOUTH_TARGET_EAST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3406, 414), "South Target East Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_TARGET_EAST_CRATE));
locationTable[RC_GF_SOUTH_TARGET_WEST_CRATE] = Location::Crate(RC_GF_SOUTH_TARGET_WEST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3330, 406), "South Target West Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_TARGET_WEST_CRATE));
locationTable[RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE] = Location::Crate(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1251), "Near Kitchen Leftmost Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NEAR_KITCHEN_LEFTMOST_CRATE));
locationTable[RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE] = Location::Crate(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1144, -1191), "Near Kitchen Middle Left Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NEAR_KITCHEN_MID_LEFT_CRATE));
locationTable[RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE] = Location::Crate(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -847), "Near Kitchen Middle Right Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NEAR_KITCHEN_MID_RIGHT_CRATE));
locationTable[RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE] = Location::Crate(RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1256, -787), "Near Kitchen Rightmost Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_NEAR_KITCHEN_RIGHTMOST_CRATE));
locationTable[RC_TH_KITCHEN_CRATE] = Location::Crate(RC_TH_KITCHEN_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1610, -624), "Kitchen Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_KITCHEN_CRATE));
locationTable[RC_TH_BREAK_HALLWAY_OUTER_CRATE] = Location::Crate(RC_TH_BREAK_HALLWAY_OUTER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1260, -3155), "Break Hallway Outer Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_HALLWAY_OUTER_CRATE));
locationTable[RC_TH_BREAK_ROOM_LEFT_CRATE] = Location::Crate(RC_TH_BREAK_ROOM_LEFT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3550), "Break Room Left Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_ROOM_LEFT_CRATE));
locationTable[RC_TH_BREAK_HALLWAY_INNER_CRATE] = Location::Crate(RC_TH_BREAK_HALLWAY_INNER_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1360, -3325), "Break Hallway Inner Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_HALLWAY_INNER_CRATE));
locationTable[RC_TH_BREAK_ROOM_RIGHT_CRATE] = Location::Crate(RC_TH_BREAK_ROOM_RIGHT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1600, -3502), "Break Room Right Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_BREAK_ROOM_RIGHT_CRATE));
locationTable[RC_TH_1_TORCH_CELL_CRATE] = Location::Crate(RC_TH_1_TORCH_CELL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-510, -2213), "1 Torch Cell Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_1_TORCH_CELL_CRATE));
locationTable[RC_TH_DEAD_END_CELL_CRATE] = Location::Crate(RC_TH_DEAD_END_CELL_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(1090, -2210), "Dead End Cell Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_DEAD_END_CELL_CRATE));
locationTable[RC_TH_DOUBLE_CELL_LEFT_CRATE] = Location::Crate(RC_TH_DOUBLE_CELL_LEFT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(-49, 11), "Double Cell Left Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_DOUBLE_CELL_LEFT_CRATE));
locationTable[RC_TH_DOUBLE_CELL_RIGHT_CRATE] = Location::Crate(RC_TH_DOUBLE_CELL_RIGHT_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_THIEVES_HIDEOUT, TWO_ACTOR_PARAMS(11, 11), "Double Cell Right Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_TH_DOUBLE_CELL_RIGHT_CRATE));
locationTable[RC_HW_BEFORE_QUICKSAND_CRATE] = Location::Crate(RC_HW_BEFORE_QUICKSAND_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3832, 2840), "Before Quicksand Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_BEFORE_QUICKSAND_CRATE));
locationTable[RC_HW_AFTER_QUICKSAND_CRATE_1] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_1, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3235, 2313), "After Quicksand Crate 1", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_1));
locationTable[RC_HW_AFTER_QUICKSAND_CRATE_2] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_2, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3125, 2459), "After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2));
@ -380,7 +380,7 @@ void Rando::StaticData::RegisterCrateLocations() {
locationTable[RC_GV_CRATE_BRIDGE_2] = Location::NLCrate(RC_GV_CRATE_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -125), "Near Bridge Crate 2", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_2));
locationTable[RC_GV_CRATE_BRIDGE_3] = Location::NLCrate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3));
locationTable[RC_GV_CRATE_BRIDGE_4] = Location::NLCrate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4));
locationTable[RC_GF_ARCHERY_LEFT_END_CHILD_CRATE] = Location::NLCrate(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "Archery Left End Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE));
locationTable[RC_GF_NORTH_TARGET_CHILD_CRATE] = Location::NLCrate(RC_GF_NORTH_TARGET_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "North Target Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_TARGET_CHILD_CRATE));
// MQ Crates
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check

View file

@ -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_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_BREAK_ROOM_FRONT_POT] = Location::Pot(RC_TH_BREAK_ROOM_FRONT_POT, 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_BACK_POT] = Location::Pot(RC_TH_BREAK_ROOM_BACK_POT, 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_TH_1_TORCH_CELL_RIGHT_POT] = Location::Pot(RC_TH_1_TORCH_CELL_RIGHT_POT, 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_1_TORCH_CELL_MID_POT] = Location::Pot(RC_TH_1_TORCH_CELL_MID_POT, 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_1_TORCH_CELL_LEFT_POT] = Location::Pot(RC_TH_1_TORCH_CELL_LEFT_POT, 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_STEEP_SLOPE_RIGHT_POT] = Location::Pot(RC_TH_STEEP_SLOPE_RIGHT_POT, 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_STEEP_SLOPE_LEFT_POT] = Location::Pot(RC_TH_STEEP_SLOPE_LEFT_POT, 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_NEAR_DOUBLE_CELL_RIGHT_POT] = Location::Pot(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, 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_NEAR_DOUBLE_CELL_MID_POT] = Location::Pot(RC_TH_NEAR_DOUBLE_CELL_MID_POT, 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_NEAR_DOUBLE_CELL_LEFT_POT] = Location::Pot(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, 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_RIGHTMOST_JAILED_POT] = Location::Pot(RC_TH_RIGHTMOST_JAILED_POT, 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_RIGHT_MIDDLE_JAILED_POT] = Location::Pot(RC_TH_RIGHT_MIDDLE_JAILED_POT, 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_LEFT_MIDDLE_JAILED_POT] = Location::Pot(RC_TH_LEFT_MIDDLE_JAILED_POT, 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_LEFTMOST_JAILED_POT] = Location::Pot(RC_TH_LEFTMOST_JAILED_POT, 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));

View file

@ -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_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::Dungeon, RR_GF_OUTSIDE_GTG, RR_GTG_ENTRYWAY, ENTR_GERUDO_TRAINING_GROUND_ENTRANCE },
{ EntranceType::Dungeon, RR_GTG_ENTRYWAY, RR_GF_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_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_GF_NEAR_GROTTO, RR_GF_STORMS_GROTTO, ENTRANCE_GROTTO_LOAD(GROTTO_GF_STORMS_OFFSET) },
{ EntranceType::GrottoGrave, RR_GF_STORMS_GROTTO, RR_GF_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_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_GV_FORTRESS_SIDE, RR_GF_OUTSKIRTS, ENTR_GERUDOS_FORTRESS_EAST_EXIT },
{ EntranceType::Overworld, RR_GF_OUTSKIRTS, 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 },

View file

@ -327,11 +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);}),
EventAccess(&logic->THCouldFree1TorchCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}),
EventAccess(&logic->THCouldFreeDoubleCellCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
EventAccess(&logic->THCouldRescueSlopeCarpenter, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FAST);}),
EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE);}),
}, {
//Locations
LOCATION(RC_LINKS_POCKET, true),
@ -416,6 +416,7 @@ void RegionTable_Init() {
RegionTable_Init_ZorasFountain();
RegionTable_Init_GerudoValley();
RegionTable_Init_GerudoFortress();
RegionTable_Init_ThievesHideout();
RegionTable_Init_HauntedWasteland();
RegionTable_Init_DesertColossus();
// Dungeons

View file

@ -7,11 +7,11 @@ using namespace Rando;
void RegionTable_Init_GerudoTrainingGround() {
// clang-format off
// Vanilla/MQ Decider
areaTable[RR_GERUDO_TRAINING_GROUND_ENTRYWAY] = Region("Gerudo Training Ground Entryway", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GTG_ENTRYWAY] = Region("Gerudo Training Ground Entryway", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsVanilla();}),
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LOBBY, []{return ctx->GetDungeon(GERUDO_TRAINING_GROUND)->IsMQ();}),
Entrance(RR_GF_GROUND_BOTTOM, []{return true;}),
Entrance(RR_GF_OUTSIDE_GTG, []{return true;}),
});
#pragma region Vanilla
@ -27,7 +27,7 @@ void RegionTable_Init_GerudoTrainingGround() {
LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true),
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
Entrance(RR_GTG_ENTRYWAY, []{return true;}),
Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}),
Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}),
Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}),
@ -124,7 +124,7 @@ void RegionTable_Init_GerudoTrainingGround() {
LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, logic->CanBreakPots()),
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}),
Entrance(RR_GTG_ENTRYWAY, []{return true;}),
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM, []{return ctx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH);}),
Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 1);}),
//It's possible to use the torch in RR_GERUDO_TRAINING_GROUND_MQ_MAZE_HIDDEN_ROOM with flame storage to light these

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

View file

@ -6,181 +6,216 @@ 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, {
areaTable[RR_GF_OUTSKIRTS] = Region("Gerudo Fortress Outskirts", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
}, {}, {
EventAccess(&logic->GF_GateOpen, []{return logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}), //needs climb
}, {
//Locations
LOCATION(RC_GF_OUTSKIRTS_NE_CRATE, (logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)) && logic->CanBreakCrates()),
LOCATION(RC_GF_OUTSKIRTS_NW_CRATE, logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD)),
}, {
//Exits
Entrance(RR_GV_FORTRESS_SIDE, []{return true;}),
Entrance(RR_GF_OUTSIDE_GATE, []{return logic->GF_GateOpen;}),
// 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;}),
Entrance(RR_TH_1_TORCH_CELL, []{return true;}),
Entrance(RR_GF_NEAR_GROTTO, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
//As of now there is no infinitly repeatable way to get thrown in jail, once one is added getting here only needs hookshot from jail
Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_LONGSHOT);}),
});
areaTable[RR_GF_GROUND_RED] = Region("GF Ground Red", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GF_NEAR_GROTTO] = Region("GF Near Grotto", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_GF_SOUTHMOST_CENTER_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_MID_SOUTH_CENTER_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_MID_NORTH_CENTER_CRATE, logic->CanBreakCrates()),
LOCATION(RR_GF_NORTHMOST_CENTER_CRATE, logic->CanBreakCrates()),
}, {
//Exits
Entrance(RR_TH_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_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_GROUND_GREY, []{return true;}),
Entrance(RR_GF_ROOFTOP_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
});
areaTable[RR_GF_GROUND_OUTSIDE_GTG] = Region("GF Ground Outside GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
areaTable[RR_GF_OUTSIDE_GTG] = Region("GF Outside GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->GtG_GateOpen, []{return (logic->IsAdult && logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->HasItem(RG_CHILD_WALLET));}),
}, {}, {
//Exits
Entrance(RR_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_OUTSKIRTS, []{return true;}),
Entrance(RR_GTG_ENTRYWAY, []{return logic->GtG_GateOpen && (logic->IsAdult || ctx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES));}),
Entrance(RR_GF_NEAR_GROTTO, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
// RANDTODO: Add tricks for getting past the gerudo guarding the hba range
Entrance(RR_GF_HBA_RANGE, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
Entrance(RR_GF_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);}),
Entrance(RR_GF_ABOVE_GTG, []{return logic->IsChild || logic->CanPassEnemy(RE_GERUDO_GUARD);}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) && logic->CanUse(RG_LONGSHOT);}),
});
#pragma endregion
#pragma region Rooftops
areaTable[RR_GF_ROOFTOP_YELLOW] = Region("GF Rooftop Yellow", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
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_GROUND_RED, []{return true;}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
});
areaTable[RR_GF_ROOFTOP_LIMEGREEN] = Region("GF Rooftop Limegreen", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GF_LONG_ROOF] = Region("GF Long Roof", "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;}),
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_ROOFTOP_ABOVE_GTG] = Region("GF Rooftop Above GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GF_ABOVE_GTG] = Region("GF Above GTG", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
//Exits
Entrance(RR_TH_KITCHEN_BOTTOM, []{return true;}),
Entrance(RR_TH_KITCHEN_CORRIDOR, []{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;}),
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_ROOFTOP_BOTTOM_OF_LOWER_VINES] = Region("GF Rooftop Bottom of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
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_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;}),
Entrance(RR_TH_STEEP_SLOPE_CELL, []{return true;}),
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true /* logic->CanClimb() */;}),
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
});
areaTable[RR_GF_ROOFTOP_TOP_OF_LOWER_VINES] = Region("GF Rooftop Top of Lower Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
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_SOUTH_F2_CARPENTER_AREA, []{return true;}),
Entrance(RR_TH_DOUBLE_CELL, []{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;}),
Entrance(RR_GF_BOTTOM_OF_UPPER_VINES, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
});
areaTable[RR_GF_ROOFTOP_BOTTOM_OF_UPPER_VINES] = Region("GF Rooftop Bottom of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
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_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;}),
Entrance(RR_GF_TOP_OF_UPPER_VINES, []{return true /* logic->CanClimb() */;}),
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_OUTSIDE_GTG, []{return true;}),
Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS);}),
});
areaTable[RR_GF_ROOFTOP_BELOW_GS] = Region("GF Rooftop Below GS", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
areaTable[RR_GF_BELOW_GS] = Region("GF Below GS", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_GF_GS_TOP_FLOOR, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_LONGSHOT) && logic->CanGetNightTimeGS()),
}, {
//Exits
Entrance(RR_TH_NORTH_F2_CARPENTER_AREA, []{return true;}),
Entrance(RR_GF_ROOFTOP_BOTTOM_OF_LOWER_VINES, []{return true;}),
Entrance(RR_TH_DEAD_END_CELL, []{return true;}),
Entrance(RR_GF_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, {}, {
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_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;}),
Entrance(RR_GF_BOTTOM_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_BELOW_GS, []{return true;}),
Entrance(RR_GF_LONG_ROOF, []{return logic->CanUse(RG_HOVER_BOOTS) /* || bunny hood jump */ || logic->IsAdult && ctx->GetTrickOption(RT_GF_JUMP);}),
Entrance(RR_GF_SLOPED_ROOF, []{return logic->IsAdult;}),
Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}),
});
areaTable[RR_GF_ROOFTOP_SLOPED] = Region("GF Rooftop Sloped", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_GF_SLOPED_ROOF] = Region("GF Sloped Roof", "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;}),
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_ROOFTOP_TOP_OF_UPPER_VINES] = Region("GF Rooftop Top of Upper Vines", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
areaTable[RR_GF_TOP_OF_UPPER_VINES] = Region("GF 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()),
//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_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);}),
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_ROOFTOP_CHEST] = Region("GF Rooftop Chest", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
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_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;}),
Entrance(RR_GF_NEAR_GS, []{return true;}),
Entrance(RR_GF_BELOW_GS, []{return true;}),
Entrance(RR_GF_LONG_ROOF, []{return true;}),
Entrance(RR_GF_BELOW_CHEST, []{return true;}),
});
#pragma endregion
areaTable[RR_GF_TOP_LEDGE] = Region("GF Top of Fortress", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
areaTable[RR_GF_ABOVE_JAIL] = Region("GF Above Jail", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
// 1 crate
LOCATION(RC_GF_ABOVE_JAIL_CRATE, true),
}, {
//Exits
Entrance(RR_GF_GROUND_RED, []{return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
//you don't take fall damage if you land on the rock with the flag on for some reason
//there's a trick to reach RR_GF_LONG_ROOF but that's too intricate for GF_JUMP
Entrance(RR_GF_OUTSKIRTS, []{return ctx->GetTrickOption(RT_GF_JUMP).Get() != 0;}),
Entrance(RR_GF_BELOW_CHEST, []{return logic->TakeDamage();}),
Entrance(RR_GF_NEAR_CHEST, []{return logic->CanUse(RG_LONGSHOT);}),
Entrance(RR_GF_JAIL_WINDOW, []{return logic->CanUse(RG_HOOKSHOT);}),
});
areaTable[RR_GF_JAIL_WINDOW] = Region("GF Jail Window", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
//Exits
//There's a trick where hovers backwalk into backflip gives access to RR_GF_LONG_ROOF from here
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
Entrance(RR_GF_BELOW_CHEST, []{return true;}),
});
areaTable[RR_GF_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()),
LOCATION(RC_GF_HBA_RANGE_GS, logic->IsAdult && logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG) && logic->CanGetNightTimeGS()),
LOCATION(RC_GF_HBA_RANGE_CRATE_1, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_2, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_3, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_4, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_5, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_6, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_RANGE_CRATE_7, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_CANOPY_EAST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_HBA_CANOPY_WEST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_NORTH_TARGET_EAST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_NORTH_TARGET_WEST_CRATE, logic->IsAdult || (logic->BlastOrSmash() || logic->HookshotOrBoomerang() || logic->CanUse(RG_HOVER_BOOTS))),
//implies logic->CanBreakCrates()
LOCATION(RC_GF_NORTH_TARGET_CHILD_CRATE, logic->IsChild && logic->BlastOrSmash()),
LOCATION(RC_GF_SOUTH_TARGET_EAST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_GF_SOUTH_TARGET_WEST_CRATE, logic->CanBreakCrates()),
}, {
//Exits
Entrance(RR_GF_GROUND_OUTSIDE_GTG, []{return logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
Entrance(RR_GF_OUTSIDE_GTG, []{return logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD);}),
});
areaTable[RR_GF_OUTSIDE_GATE] = Region("GF Outside Gate", "Gerudo Fortress", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
@ -188,7 +223,7 @@ void RegionTable_Init_GerudoFortress() {
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_GF_OUTSKIRTS, []{return (logic->IsAdult && (logic->CanUse(RG_HOOKSHOT) || !ctx->GetOption(RSK_SHUFFLE_OVERWORLD_ENTRANCES))) || logic->GF_GateOpen;}),
Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return true;}),
});
@ -207,6 +242,6 @@ void RegionTable_Init_GerudoFortress() {
LOCATION(RC_GF_FAIRY_GROTTO_FAIRY_8, true),
}, {
//Exits
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
});
}

View file

@ -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->TH_RescuedAllCarpenters)) || (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->THRescuedAllCarpenters)) || (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_GF_GROUND_BOTTOM, []{return true;}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
Entrance(RR_GV_UPPER_STREAM, []{return true;}),
Entrance(RR_GERUDO_VALLEY, []{return logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->TH_RescuedAllCarpenters;}),
Entrance(RR_GERUDO_VALLEY, []{return logic->IsChild || logic->CanUse(RG_EPONA) || logic->CanUse(RG_LONGSHOT) || ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_FREE) || logic->THRescuedAllCarpenters;}),
Entrance(RR_GV_CARPENTER_TENT, []{return logic->IsAdult;}),
Entrance(RR_GV_STORMS_GROTTO, []{return logic->IsAdult && logic->CanOpenStormsGrotto();}),
Entrance(RR_GV_CRATE_LEDGE, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}),

View file

@ -4,105 +4,136 @@
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, {
areaTable[RR_TH_1_TORCH_CELL] = Region("Thieves Hideout 1 Torch Cell", "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;}),
EventAccess(&logic->THCouldFree1TorchCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
EventAccess(&logic->THRescuedAllCarpenters, []{return logic->SmallKeys(RR_GF_OUTSKIRTS, ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) ? 4 : 1) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}),
}, {
//Locations
LOCATION(RC_TH_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),
LOCATION(RC_TH_1_TORCH_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_1_TORCH_CELL_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_1_TORCH_CELL_MID_POT, logic->CanBreakPots()),
LOCATION(RC_TH_1_TORCH_CELL_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_1_TORCH_CELL_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
}, {
//Exits
Entrance(RR_GF_GROUND_RED, []{return true;}),
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
Entrance(RR_GF_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, {
areaTable[RR_TH_DOUBLE_CELL] = Region("Thieves Hideout Double Cell", "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;}),
EventAccess(&logic->THCouldFreeDoubleCellCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}),
}, {
//Locations
LOCATION(RC_TH_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),
LOCATION(RC_TH_DOUBLE_CELL_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_MID_POT, logic->CanBreakPots()),
LOCATION(RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_RIGHT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFT_MIDDLE_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_LEFTMOST_JAILED_POT, logic->CanBreakPots()),
LOCATION(RC_TH_DOUBLE_CELL_LEFT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_DOUBLE_CELL_RIGHT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
}, {
//Exits
Entrance(RR_GF_GROUND_RED, []{return true;}),
Entrance(RR_GF_GROUND_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_OUTSKIRTS, []{return true;}),
Entrance(RR_GF_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, {
areaTable[RR_TH_DEAD_END_CELL] = Region("Thieves Hideout Dead End Cell", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->TH_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;}),
EventAccess(&logic->TH_CouldFreeDeadEndCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}),
}, {
//Locations
LOCATION(RC_TH_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),
LOCATION(RC_TH_DEAD_END_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_DEAD_END_CELL_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
}, {
//Exits
Entrance(RR_GF_ROOFTOP_BELOW_GS, []{return true;}),
Entrance(RR_GF_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, {
areaTable[RR_TH_STEEP_SLOPE_CELL] = Region("Thieves Hideout Steep Slope Cell", "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;}),
EventAccess(&logic->THCouldRescueSlopeCarpenter, []{return logic->CanKillEnemy(RE_GERUDO_WARRIOR);}),
EventAccess(&logic->THRescuedAllCarpenters, []{return ctx->GetOption(RSK_GERUDO_FORTRESS).Is(RO_GF_CARPENTERS_NORMAL) && logic->SmallKeys(RR_GF_OUTSKIRTS, 4) && logic->THCouldFree1TorchCarpenter && logic->THCouldFreeDoubleCellCarpenter && logic->TH_CouldFreeDeadEndCarpenter && logic->THCouldRescueSlopeCarpenter;}),
}, {
//Locations
LOCATION(RC_TH_SOUTH_F2_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_GERUDO_MEMBERSHIP_CARD, logic->TH_RescuedAllCarpenters),
LOCATION(RC_TH_STEEP_SLOPE_CARPENTER, logic->CanKillEnemy(RE_GERUDO_WARRIOR)),
LOCATION(RC_TH_STEEP_SLOPE_RIGHT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_STEEP_SLOPE_LEFT_POT, logic->CanBreakPots()),
LOCATION(RC_TH_FREED_CARPENTERS, logic->THRescuedAllCarpenters),
}, {
//Exits
Entrance(RR_GF_ROOFTOP_ABOVE_GTG, []{return true;}),
Entrance(RR_GF_ROOFTOP_TOP_OF_LOWER_VINES, []{return true;}),
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
Entrance(RR_GF_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, {}, {}, {
areaTable[RR_TH_KITCHEN_CORRIDOR] = Region("Thieves Hideout Kitchen Corridor", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE, logic->CanBreakCrates()),
}, {
//Exits
Entrance(RR_GF_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);}),
Entrance(RR_GF_NEAR_GROTTO, []{return true;}),
Entrance(RR_GF_ABOVE_GTG, []{return true;}),
Entrance(RR_TH_KITCHEN_MAIN, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
});
areaTable[RR_TH_KITCHEN_MAIN] = Region("Thieves Hideout Kitchen Bottom", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_TH_KITCHEN_POT_1, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_POT_2, logic->CanBreakPots() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_CRATE, logic->CanBreakCrates() && logic->CanPassEnemy(RE_GERUDO_GUARD)),
LOCATION(RC_TH_KITCHEN_SUN_FAIRY, logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_SUNS_SONG)),
}, {
//Exits
Entrance(RR_TH_KITCHEN_BOTTOM, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
Entrance(RR_TH_KITCHEN_TOP, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || ctx->GetTrickOption(RT_TH_KITCHEN);}),
Entrance(RR_TH_KITCHEN_CORRIDOR, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
Entrance(RR_TH_KITCHEN_TOP, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
});
areaTable[RR_TH_KITCHEN_TOP] = Region("Thieves Hideout Kitchen Top", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
areaTable[RR_TH_KITCHEN_TOP] = Region("Thieves Hideout Kitchen Top", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_TH_KITCHEN_POT_1, logic->CanUse(RG_BOOMERANG)),
LOCATION(RC_TH_KITCHEN_POT_2, logic->CanUse(RG_BOOMERANG)),
}, {
//Exits
Entrance(RR_TH_KITCHEN_MAIN, []{return true;}),
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);}),
//hookshot to cross using the rafters is implied in logic->CanPassEnemy(RE_GERUDO_GUARD)
Entrance(RR_GF_NEAR_GS, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS);}),
Entrance(RR_GF_TOP_OF_LOWER_VINES, []{return logic->CanPassEnemy(RE_GERUDO_GUARD) || logic->CanUse(RG_HOVER_BOOTS);}),
});
areaTable[RR_TH_BREAK_ROOM] = Region("Thieves Hideout Break Room", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LOCATION(RC_TH_BREAK_ROOM_POT_1, logic->CanBreakPots()),
LOCATION(RC_TH_BREAK_ROOM_POT_2, logic->CanBreakPots()),
LOCATION(RC_TH_BREAK_ROOM_FRONT_POT, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) ||
(logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_TH_BREAK_ROOM_BACK_POT, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakPots()) ||
(logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_TH_BREAK_HALLWAY_OUTER_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_BREAK_HALLWAY_INNER_CRATE, logic->CanBreakCrates()),
LOCATION(RC_TH_BREAK_ROOM_RIGHT_CRATE, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) ||
(logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))),
LOCATION(RC_TH_BREAK_ROOM_LEFT_CRATE, (logic->CanPassEnemy(RE_BREAK_ROOM_GUARD) && logic->CanBreakCrates()) ||
(logic->CanPassEnemy(RE_GERUDO_GUARD) && logic->HasExplosives() && logic->CanUse(RG_BOOMERANG))),
}, {
//Exits
Entrance(RR_GF_ROOFTOP_YELLOW, []{return true;}),
Entrance(RR_GF_TOP_LEDGE, []{return true;}),
Entrance(RR_GF_BELOW_CHEST, []{return logic->CanPassEnemy(RE_GERUDO_GUARD);}),
//Implies logic->CanPassEnemy(RE_GERUDO_GUARD)
Entrance(RR_TH_BREAK_ROOM_CORRIDOR, []{return logic->CanUse(RG_HOOKSHOT);}),
});
areaTable[RR_TH_BREAK_ROOM_CORRIDOR] = Region("Thieves Hideout Break Room", "Thieves Hideout", {RA_GERUDO_FORTRESS}, NO_DAY_NIGHT_CYCLE, {}, {}, {
//Exits
Entrance(RR_TH_BREAK_ROOM, []{return logic->CanUse(RG_HOOKSHOT);}),
Entrance(RR_GF_ABOVE_JAIL, []{return true;}),
});
}

View file

@ -174,11 +174,11 @@ void Rando::StaticData::InitLocationTable() {
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);
// 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);
locationTable[RC_TH_FREED_CARPENTERS] = Location::Base(RC_TH_FREED_CARPENTERS, 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_1_TORCH_CARPENTER] = Location::Collectable(RC_TH_1_TORCH_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_DEAD_END_CARPENTER] = Location::Collectable(RC_TH_DEAD_END_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_DOUBLE_CELL_CARPENTER] = Location::Collectable(RC_TH_DOUBLE_CELL_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_STEEP_SLOPE_CARPENTER] = Location::Collectable(RC_TH_STEEP_SLOPE_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);
@ -748,7 +748,7 @@ void Rando::StaticData::InitLocationTable() {
locationTable[RC_GV_GS_PILLAR] = Location::GSToken(RC_GV_GS_PILLAR, RCQUEST_BOTH, SCENE_GERUDO_VALLEY, 21252, 0x04, "GS Pillar", RHT_GV_GS_PILLAR, 0x13);
locationTable[RC_GV_GS_BEHIND_TENT] = Location::GSToken(RC_GV_GS_BEHIND_TENT, RCQUEST_BOTH, SCENE_GERUDO_VALLEY, 21256, 0x08, "GS Behind Tent", RHT_GV_GS_BEHIND_TENT, 0x13);
// Gerudo Fortress
locationTable[RC_GF_GS_ARCHERY_RANGE] = Location::GSToken(RC_GF_GS_ARCHERY_RANGE, RCQUEST_BOTH, SCENE_GERUDOS_FORTRESS, 21505, 0x01, "GS Archery Range", RHT_GF_GS_ARCHERY_RANGE, 0x14);
locationTable[RC_GF_HBA_RANGE_GS] = Location::GSToken(RC_GF_HBA_RANGE_GS, RCQUEST_BOTH, SCENE_GERUDOS_FORTRESS, 21505, 0x01, "GS Archery Range", RHT_GF_GS_ARCHERY_RANGE, 0x14);
locationTable[RC_GF_GS_TOP_FLOOR] = Location::GSToken(RC_GF_GS_TOP_FLOOR, RCQUEST_BOTH, SCENE_GERUDOS_FORTRESS, 21506, 0x02, "GS Top Floor", RHT_GF_GS_TOP_FLOOR, 0x14);
// Wasteland & Desert Colossus
locationTable[RC_WASTELAND_GS] = Location::GSToken(RC_WASTELAND_GS, RCQUEST_BOTH, SCENE_HAUNTED_WASTELAND, 13570, 0x02, "GS", RHT_WASTELAND_GS, 0x15);

View file

@ -487,6 +487,7 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
bool killed = false;
switch (enemy) {
case RE_GERUDO_GUARD:
case RE_BREAK_ROOM_GUARD:
return false;
case RE_GOLD_SKULLTULA:
switch (distance) {
@ -845,6 +846,8 @@ bool Logic::CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
case RE_OCTOROK:
return true;
case RE_GERUDO_GUARD:
return ctx->GetTrickOption(RT_PASS_GUARDS_WITH_NOTHING) || HasItem(RG_GERUDO_MEMBERSHIP_CARD) || CanUse(RG_FAIRY_BOW) || CanUse(RG_HOOKSHOT);
case RE_BREAK_ROOM_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
@ -854,6 +857,7 @@ bool Logic::CanPassEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal
case RE_GIBDO:
case RE_REDEAD:
// we need a way to check if suns won't force a reload
// RANDOTODO: check if stealthing past these guys works everywhere
return CanUse(RG_HOOKSHOT) || CanUse(RG_SUNS_SONG);
case RE_IRON_KNUCKLE:
case RE_BIG_OCTO:
@ -1435,7 +1439,7 @@ bool Logic::SmallKeys(RandomizerRegion dungeon, uint8_t requiredAmountGlitchless
}*/
return GetSmallKeyCount(SCENE_TREASURE_BOX_SHOP) >= requiredAmountGlitchless;
case RR_GF_GROUND_BOTTOM:
case RR_GF_OUTSKIRTS:
return GetSmallKeyCount(SCENE_THIEVES_HIDEOUT) >= requiredAmountGlitchless;
default:
@ -2459,10 +2463,10 @@ void Logic::Reset() {
//Events
ShowedMidoSwordAndShield = false;
TH_CouldRescueF1NorthCarpenter = false;
TH_CouldRescueF1SouthCarpenter = false;
TH_CouldRescueF2NorthCarpenter = false;
TH_CouldRescueF2SouthCarpenter = false;
THCouldFree1TorchCarpenter = false;
THCouldFreeDoubleCellCarpenter = false;
TH_CouldFreeDeadEndCarpenter = false;
THCouldRescueSlopeCarpenter = false;
GF_GateOpen = false;
GtG_GateOpen = false;
DampesWindmillAccess = false;

View file

@ -116,11 +116,11 @@ class Logic {
// Events
bool ShowedMidoSwordAndShield = false;
bool TH_CouldRescueF1NorthCarpenter = false;
bool TH_CouldRescueF1SouthCarpenter = false;
bool TH_CouldRescueF2NorthCarpenter = false;
bool TH_CouldRescueF2SouthCarpenter = false;
bool TH_RescuedAllCarpenters = false;
bool THCouldFree1TorchCarpenter = false;
bool THCouldFreeDoubleCellCarpenter = false;
bool TH_CouldFreeDeadEndCarpenter = false;
bool THCouldRescueSlopeCarpenter = false;
bool THRescuedAllCarpenters = false;
bool GF_GateOpen = false;
bool GtG_GateOpen = false;
bool DampesWindmillAccess = false;

View file

@ -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_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_BREAK_ROOM_FRONT_POT, RAND_INF_TH_BREAK_ROOM_POT_1 },
{ RC_TH_BREAK_ROOM_BACK_POT, 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_TH_1_TORCH_CELL_RIGHT_POT, RAND_INF_TH_NORTH_F1_CARPENTER_POT_1 },
{ RC_TH_1_TORCH_CELL_MID_POT, RAND_INF_TH_NORTH_F1_CARPENTER_POT_2 },
{ RC_TH_1_TORCH_CELL_LEFT_POT, RAND_INF_TH_NORTH_F1_CARPENTER_POT_3 },
{ RC_TH_STEEP_SLOPE_RIGHT_POT, RAND_INF_TH_NORTH_F2_CARPENTER_POT_1 },
{ RC_TH_STEEP_SLOPE_LEFT_POT, RAND_INF_TH_NORTH_F2_CARPENTER_POT_2 },
{ RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_1 },
{ RC_TH_NEAR_DOUBLE_CELL_MID_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_2 },
{ RC_TH_NEAR_DOUBLE_CELL_LEFT_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_POT_3 },
{ RC_TH_RIGHTMOST_JAILED_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_1 },
{ RC_TH_RIGHT_MIDDLE_JAILED_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_2 },
{ RC_TH_LEFT_MIDDLE_JAILED_POT, RAND_INF_TH_SOUTH_F1_CARPENTER_CELL_POT_3 },
{ RC_TH_LEFTMOST_JAILED_POT, 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 },
@ -2130,136 +2130,136 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
RAND_INF_GF_ABOVE_JAIL_CRATE,
},
{
RC_GF_OUTSIDE_CENTER_CRATE_1,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_1,
RC_GF_SOUTHMOST_CENTER_CRATE,
RAND_INF_GF_SOUTHMOST_CENTER_CRATE,
},
{
RC_GF_OUTSIDE_CENTER_CRATE_2,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_2,
RC_GF_MID_SOUTH_CENTER_CRATE,
RAND_INF_GF_MID_SOUTH_CENTER_CRATE,
},
{
RC_GF_OUTSIDE_CENTER_CRATE_3,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_3,
RC_GF_MID_NORTH_CENTER_CRATE,
RAND_INF_GF_MID_NORTH_CENTER_CRATE,
},
{
RC_GF_OUTSIDE_CENTER_CRATE_4,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_4,
RR_GF_NORTHMOST_CENTER_CRATE,
RAND_INF_GF_NORTHMOST_CENTER_CRATE,
},
{
RC_GF_OUTSIDE_LEFT_CRATE_1,
RAND_INF_GF_OUTSIDE_LEFT_CRATE_1,
RC_GF_OUTSKIRTS_NE_CRATE,
RAND_INF_GF_OUTSKIRTS_NE_CRATE,
},
{
RC_GF_OUTSIDE_LEFT_CRATE_2,
RAND_INF_GF_OUTSIDE_LEFT_CRATE_2,
RC_GF_OUTSKIRTS_NW_CRATE,
RAND_INF_GF_OUTSKIRTS_NW_CRATE,
},
{
RC_GF_ARCHERY_RANGE_CRATE_1,
RAND_INF_GF_ARCHERY_RANGE_CRATE_1,
RC_GF_HBA_RANGE_CRATE_1,
RAND_INF_GF_HBA_RANGE_CRATE_1,
},
{
RC_GF_ARCHERY_RANGE_CRATE_2,
RAND_INF_GF_ARCHERY_RANGE_CRATE_2,
RC_GF_HBA_RANGE_CRATE_2,
RAND_INF_GF_HBA_RANGE_CRATE_2,
},
{
RC_GF_ARCHERY_RANGE_CRATE_3,
RAND_INF_GF_ARCHERY_RANGE_CRATE_3,
RC_GF_HBA_RANGE_CRATE_3,
RAND_INF_GF_HBA_RANGE_CRATE_3,
},
{
RC_GF_ARCHERY_RANGE_CRATE_4,
RAND_INF_GF_ARCHERY_RANGE_CRATE_4,
RC_GF_HBA_RANGE_CRATE_4,
RAND_INF_GF_HBA_RANGE_CRATE_4,
},
{
RC_GF_ARCHERY_RANGE_CRATE_5,
RAND_INF_GF_ARCHERY_RANGE_CRATE_5,
RC_GF_HBA_RANGE_CRATE_5,
RAND_INF_GF_HBA_RANGE_CRATE_5,
},
{
RC_GF_ARCHERY_RANGE_CRATE_6,
RAND_INF_GF_ARCHERY_RANGE_CRATE_6,
RC_GF_HBA_RANGE_CRATE_6,
RAND_INF_GF_HBA_RANGE_CRATE_6,
},
{
RC_GF_ARCHERY_RANGE_CRATE_7,
RAND_INF_GF_ARCHERY_RANGE_CRATE_7,
RC_GF_HBA_RANGE_CRATE_7,
RAND_INF_GF_HBA_RANGE_CRATE_7,
},
{
RC_GF_ARCHERY_START_CRATE_1,
RAND_INF_GF_ARCHERY_START_CRATE_1,
RC_GF_HBA_CANOPY_EAST_CRATE,
RAND_INF_GF_HBA_CANOPY_EAST_CRATE,
},
{
RC_GF_ARCHERY_START_CRATE_2,
RAND_INF_GF_ARCHERY_START_CRATE_2,
RC_GF_HBA_CANOPY_WEST_CRATE,
RAND_INF_GF_HBA_CANOPY_WEST_CRATE,
},
{
RC_GF_ARCHERY_LEFT_END_CRATE_1,
RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1,
RC_GF_NORTH_TARGET_EAST_CRATE,
RAND_INF_GF_NORTH_TARGET_EAST_CRATE,
},
{
RC_GF_ARCHERY_LEFT_END_CRATE_2,
RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2,
RC_GF_NORTH_TARGET_WEST_CRATE,
RAND_INF_GF_NORTH_TARGET_WEST_CRATE,
},
{
RC_GF_ARCHERY_LEFT_END_CHILD_CRATE,
RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE,
RC_GF_NORTH_TARGET_CHILD_CRATE,
RAND_INF_GF_NORTH_TARGET_CHILD_CRATE,
},
{
RC_GF_ARCHERY_RIGHT_END_CRATE_1,
RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1,
RC_GF_SOUTH_TARGET_EAST_CRATE,
RAND_INF_GF_SOUTH_TARGET_EAST_CRATE,
},
{
RC_GF_ARCHERY_RIGHT_END_CRATE_2,
RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2,
RC_GF_SOUTH_TARGET_WEST_CRATE,
RAND_INF_GF_SOUTH_TARGET_WEST_CRATE,
},
{
RC_GF_KITCHEN_CRATE_1,
RAND_INF_GF_KITCHEN_CRATE_1,
RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
RAND_INF_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
},
{
RC_GF_KITCHEN_CRATE_2,
RAND_INF_GF_KITCHEN_CRATE_2,
RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE,
RAND_INF_TH_NEAR_KITCHEN_MID_LEFT_CRATE,
},
{
RC_GF_KITCHEN_CRATE_3,
RAND_INF_GF_KITCHEN_CRATE_3,
RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE,
RAND_INF_TH_NEAR_KITCHEN_MID_RIGHT_CRATE,
},
{
RC_GF_KITCHEN_CRATE_4,
RAND_INF_GF_KITCHEN_CRATE_4,
RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE,
RAND_INF_TH_NEAR_KITCHEN_RIGHTMOST_CRATE,
},
{
RC_GF_KITCHEN_CRATE_5,
RAND_INF_GF_KITCHEN_CRATE_5,
RC_TH_KITCHEN_CRATE,
RAND_INF_TH_KITCHEN_CRATE,
},
{
RC_GF_BREAK_ROOM_CRATE_1,
RAND_INF_GF_BREAK_ROOM_CRATE_1,
RC_TH_BREAK_HALLWAY_OUTER_CRATE,
RAND_INF_TH_BREAK_HALLWAY_OUTER_CRATE,
},
{
RC_GF_BREAK_ROOM_CRATE_2,
RAND_INF_GF_BREAK_ROOM_CRATE_2,
RC_TH_BREAK_HALLWAY_INNER_CRATE,
RAND_INF_TH_BREAK_HALLWAY_INNER_CRATE,
},
{
RC_GF_BREAK_ROOM_CRATE_3,
RAND_INF_GF_BREAK_ROOM_CRATE_3,
RC_TH_BREAK_ROOM_RIGHT_CRATE,
RAND_INF_TH_BREAK_ROOM_RIGHT_CRATE,
},
{
RC_GF_BREAK_ROOM_CRATE_4,
RAND_INF_GF_BREAK_ROOM_CRATE_4,
RC_TH_BREAK_ROOM_LEFT_CRATE,
RAND_INF_TH_BREAK_ROOM_LEFT_CRATE,
},
{
RC_GF_NORTH_F1_CARPENTER_CRATE,
RAND_INF_GF_NORTH_F1_CARPENTER_CRATE,
RC_TH_1_TORCH_CELL_CRATE,
RAND_INF_TH_1_TORCH_CELL_CRATE,
},
{
RC_GF_NORTH_F3_CARPENTER_CRATE,
RAND_INF_GF_NORTH_F3_CARPENTER_CRATE,
RC_TH_DEAD_END_CELL_CRATE,
RAND_INF_TH_DEAD_END_CELL_CRATE,
},
{
RC_GF_SOUTH_F2_CARPENTER_CRATE_1,
RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1,
RC_TH_DOUBLE_CELL_LEFT_CRATE,
RAND_INF_TH_DOUBLE_CELL_LEFT_CRATE,
},
{
RC_GF_SOUTH_F2_CARPENTER_CRATE_2,
RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2,
RC_TH_DOUBLE_CELL_RIGHT_CRATE,
RAND_INF_TH_DOUBLE_CELL_RIGHT_CRATE,
},
{
RC_HW_BEFORE_QUICKSAND_CRATE,

View file

@ -408,34 +408,34 @@ typedef enum {
RR_GV_FORTRESS_SIDE,
RR_GV_CARPENTER_TENT,
RR_GV_STORMS_GROTTO,
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_OUTSKIRTS,
RR_GF_OUTSIDE_GTG,
RR_GF_NEAR_GROTTO,
RR_GF_BELOW_CHEST,
RR_GF_LONG_ROOF,
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_TOP_OF_UPPER_VINES,
RR_GF_NEAR_CHEST,
RR_GF_HBA_RANGE,
RR_GF_TOP_LEDGE,
RR_GF_ABOVE_JAIL,
RR_GF_JAIL_WINDOW,
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_1_TORCH_CELL,
RR_TH_DOUBLE_CELL,
RR_TH_DEAD_END_CELL,
RR_TH_STEEP_SLOPE_CELL,
RR_TH_KITCHEN_CORRIDOR,
RR_TH_KITCHEN_MAIN,
RR_TH_KITCHEN_TOP,
RR_TH_BREAK_ROOM,
RR_TH_BREAK_ROOM_CORRIDOR,
RR_WASTELAND_NEAR_FORTRESS,
RR_HAUNTED_WASTELAND,
RR_WASTELAND_NEAR_COLOSSUS,
@ -551,7 +551,7 @@ typedef enum {
RR_SHADOW_TEMPLE_ENTRYWAY,
RR_BOTTOM_OF_THE_WELL_ENTRYWAY,
RR_ICE_CAVERN_ENTRYWAY,
RR_GERUDO_TRAINING_GROUND_ENTRYWAY,
RR_GTG_ENTRYWAY,
RR_GANONS_CASTLE_ENTRYWAY,
RR_DEKU_TREE_LOBBY,
@ -1397,13 +1397,13 @@ typedef enum {
RC_GF_CHEST,
RC_GF_HBA_1000_POINTS,
RC_GF_HBA_1500_POINTS,
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_TH_FREED_CARPENTERS,
RC_TH_1_TORCH_CARPENTER,
RC_TH_DEAD_END_CARPENTER,
RC_TH_DOUBLE_CELL_CARPENTER,
RC_TH_STEEP_SLOPE_CARPENTER,
RC_GF_GS_TOP_FLOOR,
RC_GF_GS_ARCHERY_RANGE,
RC_GF_HBA_RANGE_GS,
RC_HIDEOUT_JAIL_GUARD_1_TORCH,
RC_HIDEOUT_JAIL_GUARD_2_TORCHES,
RC_HIDEOUT_JAIL_GUARD_3_TORCHES,
@ -1821,22 +1821,22 @@ typedef enum {
RC_KF_TWINS_HOUSE_POT_2,
RC_KF_BROTHERS_HOUSE_POT_1,
RC_KF_BROTHERS_HOUSE_POT_2,
RC_TH_BREAK_ROOM_POT_1,
RC_TH_BREAK_ROOM_POT_2,
RC_TH_BREAK_ROOM_FRONT_POT,
RC_TH_BREAK_ROOM_BACK_POT,
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_TH_1_TORCH_CELL_RIGHT_POT,
RC_TH_1_TORCH_CELL_MID_POT,
RC_TH_1_TORCH_CELL_LEFT_POT,
RC_TH_STEEP_SLOPE_RIGHT_POT,
RC_TH_STEEP_SLOPE_LEFT_POT,
RC_TH_NEAR_DOUBLE_CELL_RIGHT_POT,
RC_TH_NEAR_DOUBLE_CELL_MID_POT,
RC_TH_NEAR_DOUBLE_CELL_LEFT_POT,
RC_TH_RIGHTMOST_JAILED_POT,
RC_TH_RIGHT_MIDDLE_JAILED_POT,
RC_TH_LEFT_MIDDLE_JAILED_POT,
RC_TH_LEFTMOST_JAILED_POT,
RC_WASTELAND_NEAR_GS_POT_1,
RC_WASTELAND_NEAR_GS_POT_2,
RC_WASTELAND_NEAR_GS_POT_3,
@ -2370,39 +2370,39 @@ typedef enum {
RC_GV_CRATE_BRIDGE_3,
RC_GV_CRATE_BRIDGE_4,
RC_GF_ABOVE_JAIL_CRATE,
RC_GF_OUTSIDE_CENTER_CRATE_1,
RC_GF_OUTSIDE_CENTER_CRATE_2,
RC_GF_OUTSIDE_CENTER_CRATE_3,
RC_GF_OUTSIDE_CENTER_CRATE_4,
RC_GF_OUTSIDE_LEFT_CRATE_1,
RC_GF_OUTSIDE_LEFT_CRATE_2,
RC_GF_ARCHERY_RANGE_CRATE_1,
RC_GF_ARCHERY_RANGE_CRATE_2,
RC_GF_ARCHERY_RANGE_CRATE_3,
RC_GF_ARCHERY_RANGE_CRATE_4,
RC_GF_ARCHERY_RANGE_CRATE_5,
RC_GF_ARCHERY_RANGE_CRATE_6,
RC_GF_ARCHERY_RANGE_CRATE_7,
RC_GF_ARCHERY_START_CRATE_1,
RC_GF_ARCHERY_START_CRATE_2,
RC_GF_ARCHERY_LEFT_END_CRATE_1,
RC_GF_ARCHERY_LEFT_END_CRATE_2,
RC_GF_ARCHERY_LEFT_END_CHILD_CRATE,
RC_GF_ARCHERY_RIGHT_END_CRATE_1,
RC_GF_ARCHERY_RIGHT_END_CRATE_2,
RC_GF_KITCHEN_CRATE_1,
RC_GF_KITCHEN_CRATE_2,
RC_GF_KITCHEN_CRATE_3,
RC_GF_KITCHEN_CRATE_4,
RC_GF_KITCHEN_CRATE_5,
RC_GF_BREAK_ROOM_CRATE_1,
RC_GF_BREAK_ROOM_CRATE_2,
RC_GF_BREAK_ROOM_CRATE_3,
RC_GF_BREAK_ROOM_CRATE_4,
RC_GF_NORTH_F1_CARPENTER_CRATE,
RC_GF_NORTH_F3_CARPENTER_CRATE,
RC_GF_SOUTH_F2_CARPENTER_CRATE_1,
RC_GF_SOUTH_F2_CARPENTER_CRATE_2,
RC_GF_SOUTHMOST_CENTER_CRATE,
RC_GF_MID_SOUTH_CENTER_CRATE,
RC_GF_MID_NORTH_CENTER_CRATE,
RR_GF_NORTHMOST_CENTER_CRATE,
RC_GF_OUTSKIRTS_NE_CRATE,
RC_GF_OUTSKIRTS_NW_CRATE,
RC_GF_HBA_RANGE_CRATE_1,
RC_GF_HBA_RANGE_CRATE_2,
RC_GF_HBA_RANGE_CRATE_3,
RC_GF_HBA_RANGE_CRATE_4,
RC_GF_HBA_RANGE_CRATE_5,
RC_GF_HBA_RANGE_CRATE_6,
RC_GF_HBA_RANGE_CRATE_7,
RC_GF_HBA_CANOPY_EAST_CRATE,
RC_GF_HBA_CANOPY_WEST_CRATE,
RC_GF_NORTH_TARGET_EAST_CRATE,
RC_GF_NORTH_TARGET_WEST_CRATE,
RC_GF_NORTH_TARGET_CHILD_CRATE,
RC_GF_SOUTH_TARGET_EAST_CRATE,
RC_GF_SOUTH_TARGET_WEST_CRATE,
RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE,
RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE,
RC_TH_NEAR_KITCHEN_RIGHTMOST_CRATE,
RC_TH_KITCHEN_CRATE,
RC_TH_BREAK_HALLWAY_OUTER_CRATE,
RC_TH_BREAK_HALLWAY_INNER_CRATE,
RC_TH_BREAK_ROOM_RIGHT_CRATE,
RC_TH_BREAK_ROOM_LEFT_CRATE,
RC_TH_1_TORCH_CELL_CRATE,
RC_TH_DEAD_END_CELL_CRATE,
RC_TH_DOUBLE_CELL_LEFT_CRATE,
RC_TH_DOUBLE_CELL_RIGHT_CRATE,
RC_HW_BEFORE_QUICKSAND_CRATE,
RC_HW_AFTER_QUICKSAND_CRATE_1,
RC_HW_AFTER_QUICKSAND_CRATE_2,
@ -3551,7 +3551,7 @@ typedef enum {
RT_LH_LAB_DIVING,
RT_LH_WATER_HOOKSHOT,
RT_GV_CRATE_HOVERS,
RT_TH_KITCHEN,
RT_PASS_GUARDS_WITH_NOTHING,
RT_GF_JUMP,
RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON,
RT_HW_BUNNY_CROSSING,
@ -6445,6 +6445,7 @@ typedef enum {
RE_BIG_OCTO,
RE_GERUDO_WARRIOR,
RE_GERUDO_GUARD,
RE_BREAK_ROOM_GUARD,
RE_GIBDO,
RE_GOHMA,
RE_KING_DODONGO,

View file

@ -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_TH_GERUDO_MEMBERSHIP_CARD ||
(location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_TH_FREED_CARPENTERS ||
(CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) ==
RO_GF_CARPENTERS_FREE &&
location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_TH_GERUDO_MEMBERSHIP_CARD) ||
location.GetRCType() != RCTYPE_GF_KEY && location.GetRandomizerCheck() != RC_TH_FREED_CARPENTERS) ||
(CVarGetInteger(CVAR_RANDOMIZER_SETTING("FortressCarpenters"), RO_GF_CARPENTERS_NORMAL) ==
RO_GF_CARPENTERS_FAST &&
((location.GetRandomizerCheck() == RC_TH_GERUDO_MEMBERSHIP_CARD &&
((location.GetRandomizerCheck() == RC_TH_FREED_CARPENTERS &&
CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), RO_GENERIC_NO) == RO_GENERIC_YES) ||
(location.GetRandomizerCheck() == RC_TH_NORTH_F1_CARPENTER &&
(location.GetRandomizerCheck() == RC_TH_1_TORCH_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_TH_GERUDO_MEMBERSHIP_CARD &&
((location.GetRandomizerCheck() == RC_TH_FREED_CARPENTERS &&
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) !=

View file

@ -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_TH_GERUDO_MEMBERSHIP_CARD);
SetCheckCollected(RC_TH_FREED_CARPENTERS);
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_TH_GERUDO_MEMBERSHIP_CARD ||
(showGerudoCard && rc == RC_TH_GERUDO_MEMBERSHIP_CARD) ||
(loc->GetRCType() != RCTYPE_GF_KEY && rc != RC_TH_FREED_CARPENTERS ||
(showGerudoCard && rc == RC_TH_FREED_CARPENTERS) ||
(fortressNormal && showGerudoFortressKeys && loc->GetRCType() == RCTYPE_GF_KEY) ||
(fortressFast && showGerudoFortressKeys && rc == RC_TH_NORTH_F1_CARPENTER));
(fortressFast && showGerudoFortressKeys && rc == RC_TH_1_TORCH_CARPENTER));
} else if (loc->IsVanillaCompletion()) {
return (OTRGlobals::Instance->gRandoContext->IsQuestOfLocationActive(rc) || rc == RC_GIFT_FROM_RAURU) &&
rc != RC_LINKS_POCKET;

View file

@ -751,39 +751,39 @@ typedef enum {
RAND_INF_GV_CRATE_BRIDGE_3,
RAND_INF_GV_CRATE_BRIDGE_4,
RAND_INF_GF_ABOVE_JAIL_CRATE,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_1,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_2,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_3,
RAND_INF_GF_OUTSIDE_CENTER_CRATE_4,
RAND_INF_GF_OUTSIDE_LEFT_CRATE_1,
RAND_INF_GF_OUTSIDE_LEFT_CRATE_2,
RAND_INF_GF_ARCHERY_RANGE_CRATE_1,
RAND_INF_GF_ARCHERY_RANGE_CRATE_2,
RAND_INF_GF_ARCHERY_RANGE_CRATE_3,
RAND_INF_GF_ARCHERY_RANGE_CRATE_4,
RAND_INF_GF_ARCHERY_RANGE_CRATE_5,
RAND_INF_GF_ARCHERY_RANGE_CRATE_6,
RAND_INF_GF_ARCHERY_RANGE_CRATE_7,
RAND_INF_GF_ARCHERY_START_CRATE_1,
RAND_INF_GF_ARCHERY_START_CRATE_2,
RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1,
RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2,
RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE,
RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1,
RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2,
RAND_INF_GF_KITCHEN_CRATE_1,
RAND_INF_GF_KITCHEN_CRATE_2,
RAND_INF_GF_KITCHEN_CRATE_3,
RAND_INF_GF_KITCHEN_CRATE_4,
RAND_INF_GF_KITCHEN_CRATE_5,
RAND_INF_GF_BREAK_ROOM_CRATE_1,
RAND_INF_GF_BREAK_ROOM_CRATE_2,
RAND_INF_GF_BREAK_ROOM_CRATE_3,
RAND_INF_GF_BREAK_ROOM_CRATE_4,
RAND_INF_GF_NORTH_F1_CARPENTER_CRATE,
RAND_INF_GF_NORTH_F3_CARPENTER_CRATE,
RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1,
RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2,
RAND_INF_GF_SOUTHMOST_CENTER_CRATE,
RAND_INF_GF_MID_SOUTH_CENTER_CRATE,
RAND_INF_GF_MID_NORTH_CENTER_CRATE,
RAND_INF_GF_NORTHMOST_CENTER_CRATE,
RAND_INF_GF_OUTSKIRTS_NE_CRATE,
RAND_INF_GF_OUTSKIRTS_NW_CRATE,
RAND_INF_GF_HBA_RANGE_CRATE_1,
RAND_INF_GF_HBA_RANGE_CRATE_2,
RAND_INF_GF_HBA_RANGE_CRATE_3,
RAND_INF_GF_HBA_RANGE_CRATE_4,
RAND_INF_GF_HBA_RANGE_CRATE_5,
RAND_INF_GF_HBA_RANGE_CRATE_6,
RAND_INF_GF_HBA_RANGE_CRATE_7,
RAND_INF_GF_HBA_CANOPY_EAST_CRATE,
RAND_INF_GF_HBA_CANOPY_WEST_CRATE,
RAND_INF_GF_NORTH_TARGET_EAST_CRATE,
RAND_INF_GF_NORTH_TARGET_WEST_CRATE,
RAND_INF_GF_NORTH_TARGET_CHILD_CRATE,
RAND_INF_GF_SOUTH_TARGET_EAST_CRATE,
RAND_INF_GF_SOUTH_TARGET_WEST_CRATE,
RAND_INF_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
RAND_INF_TH_NEAR_KITCHEN_MID_LEFT_CRATE,
RAND_INF_TH_NEAR_KITCHEN_MID_RIGHT_CRATE,
RAND_INF_TH_NEAR_KITCHEN_RIGHTMOST_CRATE,
RAND_INF_TH_KITCHEN_CRATE,
RAND_INF_TH_BREAK_HALLWAY_OUTER_CRATE,
RAND_INF_TH_BREAK_HALLWAY_INNER_CRATE,
RAND_INF_TH_BREAK_ROOM_RIGHT_CRATE,
RAND_INF_TH_BREAK_ROOM_LEFT_CRATE,
RAND_INF_TH_1_TORCH_CELL_CRATE,
RAND_INF_TH_DEAD_END_CELL_CRATE,
RAND_INF_TH_DOUBLE_CELL_LEFT_CRATE,
RAND_INF_TH_DOUBLE_CELL_RIGHT_CRATE,
RAND_INF_HW_BEFORE_QUICKSAND_CRATE,
RAND_INF_HW_AFTER_QUICKSAND_CRATE_1,
RAND_INF_HW_AFTER_QUICKSAND_CRATE_2,

View file

@ -569,13 +569,13 @@ 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_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 "
"with the guards.");
OPT_TRICK(RT_GF_JUMP, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE }, "Gerudo\'s Fortress Ledge Jumps",
"Adult can jump onto the top roof of the fortress without going through the interior of the hideout.");
OPT_TRICK(RT_PASS_GUARDS_WITH_NOTHING, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
"Sneak Past Moving Gerudo Guards with No Items",
"The logic normally guarantees Bow or Hookshot to stun them from a distance,"
"but every moving guard can be passed with basic movement and AI manipulation");
OPT_TRICK(RT_GF_JUMP, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
"Gerudo\'s Fortress Ledge Jumps",
"It is possible to navigate the rooves of Fortress with unintuative jumps to reach additional areas without going inside.");
OPT_TRICK(RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON, RCQUEST_BOTH, RA_GERUDO_FORTRESS, { Tricks::Tag::NOVICE },
"Gerudo\'s Fortress Warriors with Difficult Weapons",
"Warriors can be defeated with Slingshot or Bombchus.");