From fc483d1ddf7c83f0596860cb70ebff218b9eca34 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Tue, 21 Jan 2025 23:46:09 -0500 Subject: [PATCH 01/52] location list + enums --- soh/soh/Enhancements/randomizer/location.cpp | 8 + soh/soh/Enhancements/randomizer/location.h | 5 + .../Enhancements/randomizer/location_list.cpp | 216 ++++++++++++++++ .../Enhancements/randomizer/randomizerTypes.h | 239 ++++++++++++++++++ .../Enhancements/randomizer/randomizer_inf.h | 215 ++++++++++++++++ 5 files changed, 683 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index 20dc211a8f7..dca0e85e0a4 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -378,6 +378,14 @@ Rando::Location Rando::Location::Pot(RandomizerCheck rc, RandomizerCheckQuest qu collectionCheck }; } +Rando::Location Rando::Location::Crate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + std::string&& spoilerName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck) { + return {rc, quest_, RCTYPE_CRATE, area_, ACTOR_OBJ_TSUBO, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, false, + collectionCheck }; +} + Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, std::string&& shortName_) { return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS, scene_, actorParams_, std::move(shortName_), RHT_NONE, RG_NONE, false }; } diff --git a/soh/soh/Enhancements/randomizer/location.h b/soh/soh/Enhancements/randomizer/location.h index 9de741dbf51..8724f3a6f3d 100644 --- a/soh/soh/Enhancements/randomizer/location.h +++ b/soh/soh/Enhancements/randomizer/location.h @@ -175,6 +175,11 @@ class Location { RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); + static Location Crate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 4141bcce40f..6557d3a78f2 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1607,6 +1607,222 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", "Gerudo Training Ground MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1)); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", "Gerudo Training Ground MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2)); + // Crates + 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", "GV Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_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", "GF Outside Center Crate 1", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_1)); + 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", "GV Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE)); + 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", "GF Outside Center Crate 2", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2)); + 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", "GF Above Jail Crate", RHT_CRATE_GERUDO_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); + 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(315, -1782), "Outside Center Crate 3", "GF Outside Center Crate 3", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3)); + 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", "GF Outside Left Crate 1", RHT_CRATE_GERUDO_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", "GF Outside Left Crate 2", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_2)); + 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(315, -1842), "Outside Center Crate 4", "GF Outside Center Crate 4", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_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", "GF Archery Range Crate 1", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1)); + 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", "GF Archery Range Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 3", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 4", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_4)); + 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", "GF Archery Range Crate 5", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 6", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 7", RHT_CRATE_GERUDO_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", "GF Near Archery Start Crate 1", RHT_CRATE_GERUDO_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", "GF Near Archery Start Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Left End Crate 1", RHT_CRATE_GERUDO_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", "GF Archery Left End Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Right End Crate 1", RHT_CRATE_GERUDO_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", "GF Archery Right End Crate 2", RHT_CRATE_GERUDO_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", "GF Kitchen Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 3", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 4", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 5", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 4", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 3", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF North F1 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF North F3 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 2", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2)); + 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", "HW Before Quicksand Crate", RHT_CRATE_HAUNTED_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", "HW After Quicksand Crate 1", RHT_CRATE_HAUNTED_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", "HW After Quicksand Crate 2", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", "HW After Quicksand Crate 3", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); + locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", "HW Near Colossus Crate", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_CRATE)); + locationTable[RC_MK_NEAR_BAZAAR_CRATE_1] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 338), "Near Bazaar Crate 1", "MK Near Bazaar Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_1)); + locationTable[RC_MK_NEAR_BAZAAR_CRATE_2] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 132), "Near Bazaar Crate 2", "MK Near Bazaar Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2)); + locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-150, -576), "Shooting Gallery Crate 1", "MK Shooting Gallery Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1)); + locationTable[RC_MK_SHOOTING_GALLERY_CRATE_2] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-90, -576), "Shooting Gallery Crate 2", "MK Shooting Gallery Crate 2", RHT_CRATE_MARKET, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_2)); + locationTable[RC_MK_LOST_DOG_HOUSE_CRATE] = Location::Crate(RC_MK_LOST_DOG_HOUSE_CRATE, RCQUEST_BOTH, RCAREA_MARKET, SCENE_DOG_LADY_HOUSE, TWO_ACTOR_PARAMS(176, 170), "Lost Dog House Crate", "MK Lost Dog House Crate", RHT_CRATE_DOG_LADY_HOUSE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_LOST_DOG_HOUSE_CRATE)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_1] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(76, -210), "Guard House Crate 1", "MK Guard House Crate 1", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_1)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_2] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -210), "Guard House Crate 2", "MK Guard House Crate 2", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_2)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_3] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 120), "Guard House Crate 3", "MK Guard House Crate 3", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_3)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_4] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 168), "Guard House Crate 4", "MK Guard House Crate 4", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_4)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_5] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 216), "Guard House Crate 5", "MK Guard House Crate 5", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_5)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1039, 10), "Near Open Grotto Adult Crate 1", "Kak Near Open Grotto Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1099, 10), "Near Open Grotto Adult Crate 2", "Kak Near Open Grotto Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(506, -358), "Near Open Grotto Adult Crate 3", "Kak Near Open Grotto Adult Crate 3", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3)); + locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(483, -302), "Near Open Grotto Adult Crate 4", "Kak Near Open Grotto Adult Crate 4", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4)); + locationTable[RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE] = Location::Crate(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(186, -758), "Near Potion Shop Adult Crate", "Kak Near Potion Shop Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE] = Location::Crate(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(185, 776), "Near Shooting Gallery Adult Crate", "Kak Near Shooting Gallery Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(92, 348), "Near Boarding House Adult Crate 1", "Kak Near Boarding House Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(32, 348), "Near Boarding House Adult Crate 2", "Kak Near Boarding House Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-389, 1518), "Near Impas House Adult Crate 1", "Kak Near Impas House Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-389, 1470), "Near Impas House Adult Crate 2", "Kak Near Impas House Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2)); + locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-433, -401), "Near Bazaar Adult Crate 1", "Kak Near Bazaar Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1)); + locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-489, -424), "Near Bazaar Adult Crate 2`", "Kak Near Bazaar Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2)); + locationTable[RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE] = Location::Crate(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-724, 871), "Behind GS House Adult Crate", "Kak Behind GS House Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE)); + locationTable[RC_KAK_NEAR_GY_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_GY_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1732, 1366), "Near Graveyard Child Crate", "Kak Near Graveyard Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GY_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_WINDMILL_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 260), "Near Windmill Child Crate", "Kak Near Windmill Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 111), "Near Fence Child Crate", "Kak Near Fence Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-60, -46), "Near Boarding House Child Crate", "Kak Near Boarding House Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", "Kak Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); + locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_MQ, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); + locationTable[RC_GC_MAZE_CRATE] = Location::Crate(RC_GC_MAZE_CRATE, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -1339), "Maze Crate", "GC Maze Crate", RHT_CRATE_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE)); + locationTable[RC_DMC_GS_CRATE] = Location::Crate(RC_DMC_GS_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1898), "GS Crate", "DMC GS Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GS_CRATE)); + locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", "LLR Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); + locationTable[RC_LH_LAB_CRATE] = Location::Crate(RC_LH_LAB_CRATE, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(90, -119), "Lab Crate", "LH Lab Crate", RHT_CRATE_LAKESIDE_LABORATORY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", "Deku Tree MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", "Deku Tree MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Side Room Crate 1", "Dodongos Cavern MQ Side Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Side Room Crate 2", "Dodongos Cavern MQ Side Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Side Room Crate 3", "Dodongos Cavern MQ Side Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Side Room Crate 4", "Dodongos Cavern MQ Side Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Side Room Crate 5", "Dodongos Cavern MQ Side Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Side Room Crate 6", "Dodongos Cavern MQ Side Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Side Room Crate 7", "Dodongos Cavern MQ Side Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Side Room Crate 8", "Dodongos Cavern MQ Side Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1730, -1836), "MQ Staircase Lower Crate 1", "Dodongos Cavern MQ Staircase Lower Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2190, -1835), "MQ Staircase Lower Crate 2", "Dodongos Cavern MQ Staircase Lower Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1510, -1837), "MQ Staircase Upper Crate 1", "Dodongos Cavern MQ Staircase Upper Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1511, -1084), "MQ Staircase Upper Crate 2", "Dodongos Cavern MQ Staircase Upper Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2410, -1084), "MQ Staircase Upper Crate 3", "Dodongos Cavern MQ Staircase Upper Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "MQ Staircase Upper Crate 4", "Dodongos Cavern MQ Staircase Upper Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3191, -897), "MQ Two Flames Crate 1", "Dodongos Cavern MQ Two Flames Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2776, -810), "MQ Two Flames Crate 2", "Dodongos Cavern MQ Two Flames Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Near Torch Puzzle Crate 1", "Dodongos Cavern MQ Near Torch Puzzle Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Near Torch Puzzle Crate 2", "Dodongos Cavern MQ Near Torch Puzzle Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Near Torch Puzzle Crate 3", "Dodongos Cavern MQ Near Torch Puzzle Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Near Torch Puzzle Crate 4", "Dodongos Cavern MQ Near Torch Puzzle Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Near Torch Puzzle Crate 5", "Dodongos Cavern MQ Near Torch Puzzle Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Near Torch Puzzle Crate 6", "Dodongos Cavern MQ Near Torch Puzzle Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1211, -775), "MQ Outside Boss Crate 4", "Fire Temple MQ Outside Boss Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -417), "MQ Outside Boss Crate 5", "Fire Temple MQ Outside Boss Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -534), "MQ Outside Boss Crate 6", "Fire Temple MQ Outside Boss Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2249, -56), "MQ Shortcut Crate 1", "Fire Temple MQ Shortcut Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2189, -56), "MQ Shortcut Crate 2", "Fire Temple MQ Shortcut Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2150, 55), "MQ Shortcut Crate 3", "Fire Temple MQ Shortcut Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2135, -62), "MQ Shortcut Crate 4", "Fire Temple MQ Shortcut Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2090, 55), "MQ Shortcut Crate 5", "Fire Temple MQ Shortcut Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2030, 55), "MQ Shortcut Crate 6", "Fire Temple MQ Shortcut Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1147), "MQ Lizalfos Maze Lower Crate 1", "Fire Temple MQ Lizalfos Maze Lower 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1195), "MQ Lizalfos Maze Lower Crate 2", "Fire Temple MQ Lizalfos Maze Lower 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2124, 1154), "MQ Lizalfos Maze Lower Crate 3", "Fire Temple MQ Lizalfos Maze Lower 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1817, 1330), "MQ Lizalfos Maze Upper Crate 1", "Fire Temple MQ Lizalfos Maze Upper Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1288), "MQ Lizalfos Maze Upper Crate 2", "Fire Temple MQ Lizalfos Maze Upper Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1336), "MQ Lizalfos Maze Upper Crate 3", "Fire Temple MQ Lizalfos Maze Upper Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1407, -756), "MQ Lava Torch Crate 1", "Fire Temple MQ Lava Torch Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(384, 351), "MQ Lava Torch Crate 2", "Fire Temple MQ Lava Torch Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1409, -1176), "MQ Lava Torch Crate 3", "Fire Temple MQ Lava Torch Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(999, -402), "MQ Lava Torch Crate 4", "Fire Temple MQ Lava Torch Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Crate 5", "Fire Temple MQ Lava Torch Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-150, -336), "MQ Central Pillar Upper Crate 1", "Water Temple MQ Central Pillar Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-210, -336), "MQ Central Pillar Upper Crate 2", "Water Temple MQ Central Pillar Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(299, 485), "MQ Central Pillar Lower Crate 1", "Water Temple MQ Central Pillar Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 486), "MQ Central Pillar Lower Crate 2", "Water Temple MQ Central Pillar Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(222, 204), "MQ Central Pillar Lower Crate 3", "Water Temple MQ Central Pillar Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 425), "MQ Central Pillar Lower Crate 4", "Water Temple MQ Central Pillar Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 365), "MQ Central Pillar Lower Crate 5", "Water Temple MQ Central Pillar Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 426), "MQ Central Pillar Lower Crate 6", "Water Temple MQ Central Pillar Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 366), "MQ Central Pillar Lower Crate 7", "Water Temple MQ Central Pillar Lower Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(162, 204), "MQ Central Pillar Lower Crate 8", "Water Temple MQ Central Pillar Lower Crate 8", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(31, 636), "MQ Central Pillar Lower Crate 9", "Water Temple MQ Central Pillar Lower Crate 9", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(151, 636), "MQ Central Pillar Lower Crate 10", "Water Temple MQ Central Pillar Lower Crate 10", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(102, 204), "MQ Central Pillar Lower Crate 11", "Water Temple MQ Central Pillar Lower Crate 11", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(91, 636), "MQ Central Pillar Lower Crate 12", "Water Temple MQ Central Pillar Lower Crate 12", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 522), "MQ Central Pillar Lower Crate 13", "Water Temple MQ Central Pillar Lower Crate 13", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 582), "MQ Central Pillar Lower Crate 14", "Water Temple MQ Central Pillar Lower Crate 14", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(698, 399), "MQ Lizalfos Hallway Crate 1", "Water Temple MQ Lizalfos Hallway Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(437, 576), "MQ Lizalfos Hallway Crate 2", "Water Temple MQ Lizalfos Hallway Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(270, 504), "MQ Lizalfos Hallway Crate 3", "Water Temple MQ Lizalfos Hallway Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(686, 1016), "MQ Lizalfos Hallway Room Crate 1", "Water Temple MQ Lizalfos Hallway Room Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 870), "MQ Lizalfos Hallway Room Crate 2", "Water Temple MQ Lizalfos Hallway Room Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 810), "MQ Lizalfos Hallway Room Crate 3", "Water Temple MQ Lizalfos Hallway Room Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(524, 839), "MQ Lizalfos Hallway Room Crate 4", "Water Temple MQ Lizalfos Hallway Room Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(525, 954), "MQ Lizalfos Hallway Room Crate 5", "Water Temple MQ Lizalfos Hallway Room Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 570), "MQ Lizalfos Hallway Gate Crate 1", "Water Temple MQ Lizalfos Hallway Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 510), "MQ Lizalfos Hallway Gate Crate 2", "Water Temple MQ Lizalfos Hallway Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -712), "MQ Storage Room A Crate 2", "Water Temple MQ Storage Room A Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -821), "MQ Storage Room A Crate 3", "Water Temple MQ Storage Room A Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -922), "MQ Storage Room A Crate 4", "Water Temple MQ Storage Room A Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1434, -1036), "MQ Storage Room A Crate 1", "Water Temple MQ Storage Room A Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1374, -1036), "MQ Storage Room A Crate 5", "Water Temple MQ Storage Room A Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1265, -1036), "MQ Storage Room A Crate 6", "Water Temple MQ Storage Room A Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1205, -1036), "MQ Storage Room A Crate 7", "Water Temple MQ Storage Room A Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ Before Upper Water Switch Lower Crate 1", "Water Temple MQ Before Upper Water Switch Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ Before Upper Water Switch Lower Crate 2", "Water Temple MQ Before Upper Water Switch Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ Before Upper Water Switch Lower Crate 3", "Water Temple MQ Before Upper Water Switch Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ Before Upper Water Switch Lower Crate 4", "Water Temple MQ Before Upper Water Switch Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ Before Upper Water Switch Lower Crate 5", "Water Temple MQ Before Upper Water Switch Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ Before Upper Water Switch Lower Crate 6", "Water Temple MQ Before Upper Water Switch Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ Before Upper Water Switch Upper Crate 2", "Water Temple MQ Before Upper Water Switch Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ Before Upper Water Switch Upper Crate 1", "Water Temple MQ Before Upper Water Switch Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Before BK By Torches Crate 1", "Water Temple MQ Before BK By Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Before BK By Torches Crate 2", "Water Temple MQ Before BK By Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Before BK Submerged Crate 2", "Water Temple MQ Before BK Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Before BK Submerged Crate 3", "Water Temple MQ Before BK Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Before BK Submerged Crate 4", "Water Temple MQ Before BK Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Before BK Submerged Crate 1", "Water Temple MQ Before BK Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Before BK By Door Crate 1", "Water Temple MQ Before BK By Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Before BK By Door Crate 2", "Water Temple MQ Before BK By Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1257, -1567), "MQ BK Room Upper Crate", "Water Temple MQ BK Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1289, -1205), "MQ BK Room Lower Crate 1", "Water Temple MQ BK Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-985, -1333), "MQ BK Room Lower Crate 2", "Water Temple MQ BK Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1297, -1300), "MQ BK Room Lower Crate 3", "Water Temple MQ BK Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1069, -1402), "MQ BK Room Lower Crate 4", "Water Temple MQ BK Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Key Area Front Crate 2", "Water Temple MQ Key Area Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Key Area Front Crate 1", "Water Temple MQ Key Area Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Key Area Submerged Crate 1", "Water Temple MQ Key Area Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Key Area Submerged Crate 2", "Water Temple MQ Key Area Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Key Area Submerged Crate 3", "Water Temple MQ Key Area Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Key Area Submerged Crate 4", "Water Temple MQ Key Area Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Key Area Submerged Crate 5", "Water Temple MQ Key Area Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Key Area Submerged Crate 6", "Water Temple MQ Key Area Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Key Area Behind Gate Crate 1", "Water Temple MQ Key Area Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Key Area Behind Gate Crate 2", "Water Temple MQ Key Area Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Key Area Behind Gate Crate 3", "Water Temple MQ Key Area Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Key Area Behind Gate Crate 4", "Water Temple MQ Key Area Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-397, -3818), "MQ Dodongo Room Upper Crate", "Water Temple MQ Dodongo Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(30, -3215), "MQ Dodongo Room Hall Crate", "Water Temple MQ Dodongo Room Hall Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-85, -3460), "MQ Dodongo Room Lower Crate 1", "Water Temple MQ Dodongo Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-271, -3826), "MQ Dodongo Room Lower Crate 2", "Water Temple MQ Dodongo Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(36, -3700), "MQ Dodongo Room Lower Crate 3", "Water Temple MQ Dodongo Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2766), "MQ Storage Room B Crate 1", "Water Temple MQ Storage Room B Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2866), "MQ Storage Room B Crate 2", "Water Temple MQ Storage Room B Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2926), "MQ Storage Room B Crate 3", "Water Temple MQ Storage Room B Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1435, -2935), "MQ Storage Room B Crate 4", "Water Temple MQ Storage Room B Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2875), "MQ Storage Room B Crate 5", "Water Temple MQ Storage Room B Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-994, 744), "MQ Triple Torch Room Submerged Crate 1", "Water Temple MQ Triple Torch Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-991, 976), "MQ Triple Torch Room Submerged Crate 2", "Water Temple MQ Triple Torch Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1511, 975), "MQ Triple Torch Room Submerged Crate 3", "Water Temple MQ Triple Torch Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 792), "MQ Triple Torch Room Submerged Crate 4", "Water Temple MQ Triple Torch Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 975), "MQ Triple Torch Room Submerged Crate 5", "Water Temple MQ Triple Torch Room Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 744), "MQ Triple Torch Room Submerged Crate 6", "Water Temple MQ Triple Torch Room Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2183, 977), "MQ Triple Torch Room Gate Crate 1", "Water Temple MQ Triple Torch Room Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2260, 744), "MQ Triple Torch Room Gate Crate 3", "Water Temple MQ Triple Torch Room Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, 743), "MQ Triple Torch Room Gate Crate 2", "Water Temple MQ Triple Torch Room Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(510, -1558), "MQ Statue Crate 1", "Spirit Temple MQ Statue Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(570, -1558), "MQ Statue Crate 2", "Spirit Temple MQ Statue Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1138), "MQ Big Mirror Crate 1", "Spirit Temple MQ Big Mirror Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1138), "MQ Big Mirror Crate 2", "Spirit Temple MQ Big Mirror Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", "Spirit Temple MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", "Spirit Temple MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); + + // Fairies locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", "SFM Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 34f89c2409b..bd8a1c5fa1a 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -288,6 +288,7 @@ typedef enum { RCTYPE_SONG_LOCATION, // Song locations RCTYPE_BOSS_HEART_OR_OTHER_REWARD, // Boss heart container or lesser dungeon rewards (lens, ice arrow) RCTYPE_POT, // Pots + RCTYPE_CRATE, // Crates RCTYPE_DUNGEON_REWARD, // Dungeon rewards (blue warps) RCTYPE_OCARINA, // Ocarina locations RCTYPE_BEEHIVE, // Beehives @@ -2332,6 +2333,224 @@ typedef enum { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, // End Pots + + //Overworld Crates + RC_GV_FREESTANDING_POH_CRATE, + RC_GV_NEAR_COW_CRATE, + 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_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_HW_BEFORE_QUICKSAND_CRATE, + RC_HW_AFTER_QUICKSAND_CRATE_1, + RC_HW_AFTER_QUICKSAND_CRATE_2, + RC_HW_AFTER_QUICKSAND_CRATE_3, + RC_HW_NEAR_COLOSSUS_CRATE, + RC_MK_NEAR_BAZAAR_CRATE_1, + RC_MK_NEAR_BAZAAR_CRATE_2, + RC_MK_SHOOTING_GALLERY_CRATE_1, + RC_MK_SHOOTING_GALLERY_CRATE_2, + RC_MK_LOST_DOG_HOUSE_CRATE, + RC_MK_GUARD_HOUSE_CRATE_1, + RC_MK_GUARD_HOUSE_CRATE_2, + RC_MK_GUARD_HOUSE_CRATE_3, + RC_MK_GUARD_HOUSE_CRATE_4, + RC_MK_GUARD_HOUSE_CRATE_5, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + RC_KAK_NEAR_GY_CHILD_CRATE, + RC_KAK_NEAR_WINDMILL_CHILD_CRATE, + RC_KAK_NEAR_FENCE_CHILD_CRATE, + RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + RC_KAK_NEAR_BAZAAR_CHILD_CRATE, + RC_GRAVEYARD_CRATE, + RC_GC_MAZE_CRATE, + RC_DMC_GS_CRATE, + RC_LLR_NEAR_TREE_CRATE, + RC_LH_LAB_CRATE, + + //MQ Dungeon Crates + RC_DEKU_TREE_MQ_LOBBY_CRATE, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + //end crates RC_PIERRE, RC_DELIVER_RUTOS_LETTER, @@ -4763,6 +4982,26 @@ typedef enum { RHT_POT_GANONS_CASTLE, RHT_POT_BOTTOM_OF_THE_WELL, RHT_POT_ICE_CAVERN, + // Shuffle Crates + RHT_CRATE_GERUDO_VALLEY, + RHT_CRATE_GERUDO_FORTRESS, + RHT_CRATE_THIEVES_HIDEOUT, + RHT_CRATE_HAUNTED_WASTELAND, + RHT_CRATE_MARKET, + RHT_CRATE_DOG_LADY_HOUSE, + RHT_CRATE_MARKET_GUARD_HOUSE, + RHT_CRATE_KAKARIKO_VILLAGE, + RHT_CRATE_GRAVEYARD, + RHT_CRATE_GORON_CITY, + RHT_CRATE_DEATH_MOUNTAIN_CRATER, + RHT_CRATE_LON_LON_RANCH, + RHT_CRATE_LAKESIDE_LABORATORY, + RHT_CRATE_DEKU_TREE, + RHT_CRATE_DODONGOS_CAVERN, + RHT_CRATE_FIRE_TEMPLE, + RHT_CRATE_WATER_TEMPLE, + RHT_CRATE_SPIRIT_TEMPLE, + RHT_CRATE_GERUDO_TRAINING_GROUND, // Ganon Line RHT_GANON_JOKE01, RHT_GANON_JOKE02, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 9daae088d2d..abef1532bc3 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -745,6 +745,221 @@ typedef enum { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, + RAND_INF_GV_FREESTANDING_POH_CRATE, + RAND_INF_GV_NEAR_COW_CRATE, + 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_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_HW_BEFORE_QUICKSAND_CRATE, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_1, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_2, + RAND_INF_HW_AFTER_QUICKSAND_CRATE_3, + RAND_INF_HW_NEAR_COLOSSUS_CRATE, + RAND_INF_MK_NEAR_BAZAAR_CRATE_1, + RAND_INF_MK_NEAR_BAZAAR_CRATE_2, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_1, + RAND_INF_MK_SHOOTING_GALLERY_CRATE_2, + RAND_INF_MK_LOST_DOG_HOUSE_CRATE, + RAND_INF_MK_GUARD_HOUSE_CRATE_1, + RAND_INF_MK_GUARD_HOUSE_CRATE_2, + RAND_INF_MK_GUARD_HOUSE_CRATE_3, + RAND_INF_MK_GUARD_HOUSE_CRATE_4, + RAND_INF_MK_GUARD_HOUSE_CRATE_5, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, + RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, + RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE, + RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1, + RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2, + RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, + RAND_INF_KAK_NEAR_GY_CHILD_CRATE, + RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE, + RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE, + RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, + RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, + RAND_INF_GRAVEYARD_CRATE, + RAND_INF_GC_MAZE_CRATE, + RAND_INF_DMC_GS_CRATE, + RAND_INF_LLR_NEAR_TREE_CRATE, + RAND_INF_LH_LAB_CRATE, + + RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, + RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + RAND_INF_CAUGHT_LOACH, From 6fcb5ea9ea5893b3775fd6286f713ac0f258bbd2 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Wed, 22 Jan 2025 00:20:50 -0500 Subject: [PATCH 02/52] add identity function --- soh/soh/Enhancements/randomizer/location.cpp | 2 +- .../Enhancements/randomizer/randomizer.cpp | 241 ++++++++++++++++++ soh/soh/Enhancements/randomizer/randomizer.h | 1 + .../Enhancements/randomizer/randomizerTypes.h | 5 + 4 files changed, 248 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index dca0e85e0a4..d619e61e40a 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -382,7 +382,7 @@ Rando::Location Rando::Location::Crate(RandomizerCheck rc, RandomizerCheckQuest SceneID scene_, int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck) { - return {rc, quest_, RCTYPE_CRATE, area_, ACTOR_OBJ_TSUBO, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, false, + return {rc, quest_, RCTYPE_CRATE, area_, ACTOR_OBJ_KIBAKO2, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, false, collectionCheck }; } diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 1f44fe2f302..e9790203864 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1548,6 +1548,221 @@ std::map rcToRandomizerInf = { { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2 }, { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 }, { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 }, + // Crates + { RC_GV_FREESTANDING_POH_CRATE, RAND_INF_GV_FREESTANDING_POH_CRATE, }, + { RC_GV_NEAR_COW_CRATE, RAND_INF_GV_NEAR_COW_CRATE, }, + { RC_GF_ABOVE_JAIL_CRATE, RAND_INF_GF_ABOVE_JAIL_CRATE, }, + { RC_GF_OUTSIDE_CENTER_CRATE_1, RAND_INF_GF_OUTSIDE_CENTER_CRATE_1, }, + { RC_GF_OUTSIDE_CENTER_CRATE_2, RAND_INF_GF_OUTSIDE_CENTER_CRATE_2, }, + { RC_GF_OUTSIDE_CENTER_CRATE_3, RAND_INF_GF_OUTSIDE_CENTER_CRATE_3, }, + { RC_GF_OUTSIDE_CENTER_CRATE_4, RAND_INF_GF_OUTSIDE_CENTER_CRATE_4, }, + { RC_GF_OUTSIDE_LEFT_CRATE_1, RAND_INF_GF_OUTSIDE_LEFT_CRATE_1, }, + { RC_GF_OUTSIDE_LEFT_CRATE_2, RAND_INF_GF_OUTSIDE_LEFT_CRATE_2, }, + { RC_GF_ARCHERY_RANGE_CRATE_1, RAND_INF_GF_ARCHERY_RANGE_CRATE_1, }, + { RC_GF_ARCHERY_RANGE_CRATE_2, RAND_INF_GF_ARCHERY_RANGE_CRATE_2, }, + { RC_GF_ARCHERY_RANGE_CRATE_3, RAND_INF_GF_ARCHERY_RANGE_CRATE_3, }, + { RC_GF_ARCHERY_RANGE_CRATE_4, RAND_INF_GF_ARCHERY_RANGE_CRATE_4, }, + { RC_GF_ARCHERY_RANGE_CRATE_5, RAND_INF_GF_ARCHERY_RANGE_CRATE_5, }, + { RC_GF_ARCHERY_RANGE_CRATE_6, RAND_INF_GF_ARCHERY_RANGE_CRATE_6, }, + { RC_GF_ARCHERY_RANGE_CRATE_7, RAND_INF_GF_ARCHERY_RANGE_CRATE_7, }, + { RC_GF_ARCHERY_START_CRATE_1, RAND_INF_GF_ARCHERY_START_CRATE_1, }, + { RC_GF_ARCHERY_START_CRATE_2, RAND_INF_GF_ARCHERY_START_CRATE_2, }, + { RC_GF_ARCHERY_LEFT_END_CRATE_1, RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1, }, + { RC_GF_ARCHERY_LEFT_END_CRATE_2, RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2, }, + { RC_GF_ARCHERY_RIGHT_END_CRATE_1, RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1, }, + { RC_GF_ARCHERY_RIGHT_END_CRATE_2, RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2, }, + { RC_GF_KITCHEN_CRATE_1, RAND_INF_GF_KITCHEN_CRATE_1, }, + { RC_GF_KITCHEN_CRATE_2, RAND_INF_GF_KITCHEN_CRATE_2, }, + { RC_GF_KITCHEN_CRATE_3, RAND_INF_GF_KITCHEN_CRATE_3, }, + { RC_GF_KITCHEN_CRATE_4, RAND_INF_GF_KITCHEN_CRATE_4, }, + { RC_GF_KITCHEN_CRATE_5, RAND_INF_GF_KITCHEN_CRATE_5, }, + { RC_GF_BREAK_ROOM_CRATE_1, RAND_INF_GF_BREAK_ROOM_CRATE_1, }, + { RC_GF_BREAK_ROOM_CRATE_2, RAND_INF_GF_BREAK_ROOM_CRATE_2, }, + { RC_GF_BREAK_ROOM_CRATE_3, RAND_INF_GF_BREAK_ROOM_CRATE_3, }, + { RC_GF_BREAK_ROOM_CRATE_4, RAND_INF_GF_BREAK_ROOM_CRATE_4, }, + { RC_GF_NORTH_F1_CARPENTER_CRATE, RAND_INF_GF_NORTH_F1_CARPENTER_CRATE, }, + { RC_GF_NORTH_F3_CARPENTER_CRATE, RAND_INF_GF_NORTH_F3_CARPENTER_CRATE, }, + { RC_GF_SOUTH_F2_CARPENTER_CRATE_1, RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_1, }, + { RC_GF_SOUTH_F2_CARPENTER_CRATE_2, RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2, }, + { RC_HW_BEFORE_QUICKSAND_CRATE, RAND_INF_HW_BEFORE_QUICKSAND_CRATE, }, + { RC_HW_AFTER_QUICKSAND_CRATE_1, RAND_INF_HW_AFTER_QUICKSAND_CRATE_1, }, + { RC_HW_AFTER_QUICKSAND_CRATE_2, RAND_INF_HW_AFTER_QUICKSAND_CRATE_2, }, + { RC_HW_AFTER_QUICKSAND_CRATE_3, RAND_INF_HW_AFTER_QUICKSAND_CRATE_3, }, + { RC_HW_NEAR_COLOSSUS_CRATE, RAND_INF_HW_NEAR_COLOSSUS_CRATE, }, + { RC_MK_NEAR_BAZAAR_CRATE_1, RAND_INF_MK_NEAR_BAZAAR_CRATE_1, }, + { RC_MK_NEAR_BAZAAR_CRATE_2, RAND_INF_MK_NEAR_BAZAAR_CRATE_2, }, + { RC_MK_SHOOTING_GALLERY_CRATE_1, RAND_INF_MK_SHOOTING_GALLERY_CRATE_1, }, + { RC_MK_SHOOTING_GALLERY_CRATE_2, RAND_INF_MK_SHOOTING_GALLERY_CRATE_2, }, + { RC_MK_LOST_DOG_HOUSE_CRATE, RAND_INF_MK_LOST_DOG_HOUSE_CRATE, }, + { RC_MK_GUARD_HOUSE_CRATE_1, RAND_INF_MK_GUARD_HOUSE_CRATE_1, }, + { RC_MK_GUARD_HOUSE_CRATE_2, RAND_INF_MK_GUARD_HOUSE_CRATE_2, }, + { RC_MK_GUARD_HOUSE_CRATE_3, RAND_INF_MK_GUARD_HOUSE_CRATE_3, }, + { RC_MK_GUARD_HOUSE_CRATE_4, RAND_INF_MK_GUARD_HOUSE_CRATE_4, }, + { RC_MK_GUARD_HOUSE_CRATE_5, RAND_INF_MK_GUARD_HOUSE_CRATE_5, }, + { RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, }, + { RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, }, + { RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, }, + { RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, }, + { RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, RAND_INF_KAK_NEAR_POTION_SHOP_ADULT_CRATE, }, + { RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, RAND_INF_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, }, + { RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, }, + { RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, RAND_INF_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, }, + { RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, }, + { RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, RAND_INF_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, }, + { RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_1, }, + { RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2, }, + { RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, }, + { RC_KAK_NEAR_GY_CHILD_CRATE, RAND_INF_KAK_NEAR_GY_CHILD_CRATE, }, + { RC_KAK_NEAR_WINDMILL_CHILD_CRATE, RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE, }, + { RC_KAK_NEAR_FENCE_CHILD_CRATE, RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE, }, + { RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, }, + { RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, }, + { RC_GRAVEYARD_CRATE, RAND_INF_GRAVEYARD_CRATE, }, + { RC_GC_MAZE_CRATE, RAND_INF_GC_MAZE_CRATE, }, + { RC_DMC_GS_CRATE, RAND_INF_DMC_GS_CRATE, }, + { RC_LLR_NEAR_TREE_CRATE, RAND_INF_LLR_NEAR_TREE_CRATE, }, + { RC_LH_LAB_CRATE, RAND_INF_LH_LAB_CRATE, }, + + { RC_DEKU_TREE_MQ_LOBBY_CRATE, RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, }, + { RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, }, + { RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, }, + { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, }, + { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, }, + { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, }, + { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, }, + { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, }, + { RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, }, + { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, }, + { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, }, + { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, }, + { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, }, + { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, }, + { RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, }, }; BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) { @@ -1836,6 +2051,32 @@ FishIdentity Randomizer::IdentifyFish(s32 sceneNum, s32 actorParams) { return fishIdentity; } +CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { + struct CrateIdentity crateIdentity; + uint32_t crateSceneNum = sceneNum; + + if (sceneNum == SCENE_GANONDORF_BOSS) { + crateSceneNum = SCENE_GANONS_TOWER; + } + + crateIdentity.randomizerInf = RAND_INF_MAX; + crateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO2, crateSceneNum, actorParams); + + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + crateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + crateIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return crateIdentity; +} + u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { return Rando::Context::GetInstance()->GetOption(randoSettingKey).GetContextOptionIndex(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 76bde6a4fbe..6e539748a12 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -54,6 +54,7 @@ class Randomizer { CowIdentity IdentifyCow(s32 sceneNum, s32 posX, s32 posZ); PotIdentity IdentifyPot(s32 sceneNum, s32 posX, s32 posZ); FishIdentity IdentifyFish(s32 sceneNum, s32 actorParams); + CrateIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ); GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true); ItemObtainability GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index bd8a1c5fa1a..e99785fee05 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5897,6 +5897,11 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; +typedef struct CrateIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} CrateIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW From dba128b25118d4f22d33a00005a8469b264ec2da Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:59:31 -0500 Subject: [PATCH 03/52] add new files + hook handlers + settings + crate struct --- .../game-interactor/GameInteractor.h | 3 + .../Enhancements/randomizer/ShuffleCrates.cpp | 95 +++++++++++++++++++ .../Enhancements/randomizer/ShuffleCrates.h | 17 ++++ .../Enhancements/randomizer/hook_handlers.cpp | 15 +++ .../Enhancements/randomizer/randomizerTypes.h | 9 ++ soh/soh/Enhancements/randomizer/settings.cpp | 2 + .../actors/ovl_Obj_Kibako2/z_obj_kibako2.h | 1 + 7 files changed, 142 insertions(+) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleCrates.cpp create mode 100644 soh/soh/Enhancements/randomizer/ShuffleCrates.h diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 8810a23017e..e79623f5797 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -252,6 +252,9 @@ typedef enum { // Opt: *ObjTsubo VB_POT_SETUP_DRAW, VB_POT_DROP_ITEM, + // Opt: *ObjKabiko2 + VB_CRATE_SETUP_DRAW, + VB_CRATE_DROP_ITEM, // Opt: *ActorDoorShutter VB_LOCK_BOSS_DOOR, // Vanilla condition: true diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp new file mode 100644 index 00000000000..0f6850a721e --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -0,0 +1,95 @@ +#include "ShuffleCrates.h" +#include "soh_assets.h" +#include "static_data.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h" +#include "objects/gameplay_field_keep/gameplay_field_keep.h" +#include "objects/object_kibako2/object_kibako2.h" +extern PlayState* gPlayState; +} + +extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); + + +extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { + static Gfx* dList = (Gfx*)gLargeCrateDL; + auto crateActor = ((ObjKibako2*)thisx); + + OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 175, 255, 0, 255); + + if (Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) == 0) { + gSPGrayscale(POLY_OPA_DISP++, true); + } + + Gfx_DrawDListOpa(play, dList); + + gSPGrayscale(POLY_OPA_DISP++, false); + + CLOSE_DISPS(play->state.gfxCtx); +} + +uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { + RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + + // Don't pull randomized item if crate isn't randomized or is already checked + if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || + (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) || + crateActor->crateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + +void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &crateActor->dyna.actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = crateActor->crateIdentity.randomizerInf; + item00->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + +void ObjKibako2_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + + if (actor->id != ACTOR_OBJ_KIBAKO2) return; + + ObjKibako2* crateActor = static_cast(actorRef); + //s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); + + crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); +} + +void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { + va_list args; + va_copy(args, originalArgs); + + // Draw custom model for crates to indicate it holding a randomized item. + if (id == VB_CRATE_SETUP_DRAW) { + ObjKibako2* crateActor = va_arg(args, ObjKibako2*); + if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { + crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; + *should = false; + } + } + + // Do not spawn vanilla item from crates, instead spawn the randomized item. + if (id == VB_CRATE_DROP_ITEM) { + ObjKibako2* crateActor = va_arg(args, ObjKibako2*); + if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { + ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); + *should = false; + } + } + + va_end(args); +} \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h new file mode 100644 index 00000000000..3ebf5b4f4a7 --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -0,0 +1,17 @@ +#ifndef ShuffleCrates_H +#define ShuffleCrates_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif +void ObjKibako2_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + +void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); + +#endif //ShuffleCrates_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 689d1c396a4..70a195120ae 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -16,6 +16,7 @@ #include "soh/Notification/Notification.h" #include "soh/SaveManager.h" #include "soh/Enhancements/randomizer/ShuffleFairies.h" +#include "soh/Enhancements/randomizer/ShuffleCrates.h" extern "C" { #include "macros.h" @@ -2369,6 +2370,9 @@ void RandomizerRegisterHooks() { static uint32_t shuffleFreestandingOnVanillaBehaviorHook = 0; + static uint32_t shuffleCratesOnActorInitHook = 0; + static uint32_t shuffleCratesOnVanillaBehaviorHook = 0; + GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { ShipInit::Init("IS_RANDO"); @@ -2404,6 +2408,9 @@ void RandomizerRegisterHooks() { GameInteractor::Instance->UnregisterGameHook(shuffleFreestandingOnVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnActorInitHook); + GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnVanillaBehaviorHook); + onFlagSetHook = 0; onSceneFlagSetHook = 0; onPlayerUpdateForRCQueueHook = 0; @@ -2432,6 +2439,9 @@ void RandomizerRegisterHooks() { shuffleFreestandingOnVanillaBehaviorHook = 0; + shuffleCratesOnActorInitHook = 0; + shuffleCratesOnVanillaBehaviorHook = 0; + ShuffleFairies_UnregisterHooks(); if (!IS_RANDO) return; @@ -2484,5 +2494,10 @@ void RandomizerRegisterHooks() { if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { ShuffleFairies_RegisterHooks(); } + + if (RAND_GET_OPTION(RSK_SHUFFLE_CRATES)) { + shuffleCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako2_RandomizerInit); + shuffleCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleCrates_OnVanillaBehaviorHandler); + } }); } diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index e99785fee05..eb32a8ec605 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5323,6 +5323,7 @@ typedef enum { RSK_SHUFFLE_WEIRD_EGG, RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, RSK_SHUFFLE_POTS, + RSK_SHUFFLE_CRATES, RSK_SHUFFLE_FROG_SONG_RUPEES, RSK_ITEM_POOL, RSK_ICE_TRAPS, @@ -5802,6 +5803,14 @@ typedef enum { RO_SHUFFLE_POTS_ALL, } RandoOptionShufflePots; +// Shuffle Crates settings (off, dungeons, overworld, all) +typedef enum { + RO_SHUFFLE_CRATES_OFF, + RO_SHUFFLE_CRATES_DUNGEONS, + RO_SHUFFLE_CRATES_OVERWORLD, + RO_SHUFFLE_CRATES_ALL, +} RandoOptionShufflePots; + //Link's Pocket Settings (dungeon reward, advancement, anything, nothing) typedef enum { RO_LINKS_POCKET_DUNGEON_REWARD, diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 13acce622b9..18d56e5b8ee 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -204,6 +204,7 @@ void Settings::CreateOptions() { mOptions[RSK_SHUFFLE_WEIRD_EGG] = Option::Bool("Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]); mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD] = Option::Bool("Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]); mOptions[RSK_SHUFFLE_POTS] = Option::U8("Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF); + mOptions[RSK_SHUFFLE_CRATES] = Option::U8("Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF); mOptions[RSK_SHUFFLE_FISHING_POLE] = Option::Bool("Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]); mOptions[RSK_SHUFFLE_MERCHANTS] = Option::U8("Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE); mOptions[RSK_MERCHANT_PRICES] = Option::U8("Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE); @@ -656,6 +657,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_BEEHIVES], &mOptions[RSK_SHUFFLE_COWS], &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], &mOptions[RSK_SHUFFLE_MERCHANTS], &mOptions[RSK_MERCHANT_PRICES], &mOptions[RSK_MERCHANT_PRICES_FIXED_PRICE], diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h index 48c22154f4f..7629e6aa101 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h +++ b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h @@ -13,6 +13,7 @@ typedef struct ObjKibako2 { /* 0x0164 */ ColliderCylinder collider; /* 0x01B0 */ ObjKibako2ActionFunc actionFunc; /* 0x01B4 */ s16 collectibleFlag; + /* */ CrateIdentity crateIdentity; } ObjKibako2; // size = 0x01B8 #endif From ef5a6aa3f3eba848847026891eebc18441363665 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:16:12 -0500 Subject: [PATCH 04/52] add dungeon struct + large crate locations --- soh/soh/Enhancements/randomizer/dungeon.cpp | 189 +++++++++++++++++++- soh/soh/Enhancements/randomizer/dungeon.h | 3 + 2 files changed, 190 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 85afc0d3ef6..5f92314a77e 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -11,12 +11,14 @@ DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_ const RandomizerSettingKey mqSetting_, std::vector vanillaLocations_, std::vector mqLocations_, std::vector vanillaPots_, std::vector mqPots_, + std::vector vanillaCrates_, std::vector mqCrates_, std::vector sharedLocations_, std::vector bossRoomLocations_) : name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_), bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_), mqSetting(mqSetting_), vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)), vanillaPots(std::move(vanillaPots_)), mqPots(std::move(mqPots_)), + mqCrates(std::move(mqCrates_)), sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) { } DungeonInfo::DungeonInfo() : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), @@ -153,6 +155,11 @@ std::vector DungeonInfo::GetDungeonLocations() const { auto potLocations = masterQuest ? mqPots : vanillaPots; AddElementsToPool(locations, potLocations); } + if (Context::GetInstance()->GetSettings()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) || + Context::GetInstance()->GetSettings()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { + auto crateLocations = masterQuest ? mqCrates : vanillaCrates; + AddElementsToPool(locations, crateLocations); + } AddElementsToPool(locations, sharedLocations); AddElementsToPool(locations, bossRoomLocations); return locations; @@ -212,7 +219,16 @@ Dungeons::Dungeons() { RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, }, - {}, {}, {}, + {}, {}, + {}, + { + // MQ Crates + RC_DEKU_TREE_MQ_LOBBY_CRATE, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, + RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, + + }, + {}, { // Boss Room Locations RC_DEKU_TREE_QUEEN_GOHMA_HEART, @@ -330,6 +346,31 @@ Dungeons::Dungeons() { RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, }, {}, + { + // MQ Crates + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, + RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, + RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, + RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, + RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + }, + {}, { // Boss Room Locations RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, @@ -416,6 +457,8 @@ Dungeons::Dungeons() { RC_JABU_JABUS_BELLY_BARINADE_POT_6, }, {}, + {}, + {}, { // Boss Room Locations RC_JABU_JABUS_BELLY_BARINADE_HEART, @@ -522,6 +565,8 @@ Dungeons::Dungeons() { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, }, {}, + {}, + {}, { // Boss Room Locations RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, @@ -636,6 +681,33 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, }, {}, + { + // MQ Crates + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, + RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, + RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + }, + {}, { // Boos Room Locations RC_FIRE_TEMPLE_VOLVAGIA_HEART, @@ -744,6 +816,95 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, }, {}, + { + // MQ Crates + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, + RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, + RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, + RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + }, + {}, { // Boss Room Locations RC_WATER_TEMPLE_MORPHA_HEART, @@ -863,6 +1024,16 @@ Dungeons::Dungeons() { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, }, + {}, + { + // MQ Crates + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, + RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + }, { // Shared Locations RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, @@ -994,6 +1165,8 @@ Dungeons::Dungeons() { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, }, {}, + {}, + {}, { // Boss Room Locations RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, @@ -1082,6 +1255,8 @@ Dungeons::Dungeons() { RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, }, + {}, + {}, {}, {}); dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN, @@ -1138,6 +1313,8 @@ Dungeons::Dungeons() { RC_ICE_CAVERN_MQ_COMPASS_POT_1, RC_ICE_CAVERN_MQ_COMPASS_POT_2, }, + {}, + {}, { // Shared Locations RC_SHEIK_IN_ICE_CAVERN, @@ -1201,7 +1378,13 @@ Dungeons::Dungeons() { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - }, {}, {}); + }, + {}, + { + // MQ Crates + RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + }, + {}, {}); dungeonList[GANONS_CASTLE] = DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY, RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE, @@ -1347,6 +1530,8 @@ Dungeons::Dungeons() { RC_GANONS_CASTLE_GANONS_TOWER_POT_17, RC_GANONS_CASTLE_GANONS_TOWER_POT_18, }, + {}, + {}, { // Shared Locations RC_GANONS_TOWER_BOSS_KEY_CHEST, diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index c8ecd247e48..d67227210cc 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -15,6 +15,7 @@ class DungeonInfo { uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_, std::vector vanillaLocations_, std::vector mqLocations_, std::vector vanillaPots_, std::vector mqPots_, + std::vector vanillaCrates_, std::vector mqCrates_, std::vector sharedLocations_, std::vector bossRoomLocations_); DungeonInfo(); @@ -64,6 +65,8 @@ class DungeonInfo { std::vector mqLocations; std::vector vanillaPots; std::vector mqPots; + std::vector vanillaCrates; + std::vector mqCrates; std::vector sharedLocations; std::vector bossRoomLocations; }; From 58d2471693a50cf32b80567ebe98382f8abe63af Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 10:55:34 -0500 Subject: [PATCH 05/52] fix wasteland name + add overworld hints --- .../hint_list/hint_list_exclude_overworld.cpp | 41 +++++++++++++++++++ .../Enhancements/randomizer/location_list.cpp | 10 ++--- .../Enhancements/randomizer/randomizerTypes.h | 2 +- 3 files changed, 47 insertions(+), 6 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index 056e1d4e59c..ae0877db17e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -1950,5 +1950,46 @@ void StaticData::HintTable_Init_Exclude_Overworld() { hintTextTable[RHT_GF_KITCHEN_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a guarded kitchen# exposes #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #crate in Gerudo Valley# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_GERUDO_FORTRESS] = HintText(CustomMessage("They say that a #crate in Gerudo Fortress# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + + hintTextTable[RHT_CRATE_WASTELAND] = HintText(CustomMessage("They say that a #crate in Haunted Wasteland# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_THIEVES_HIDEOUT] = HintText(CustomMessage("They say that a #crate in the Thieves' Hideout# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_MARKET] = HintText(CustomMessage("They say that a #crate in the Market# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_DOG_LADY_HOUSE] = HintText(CustomMessage("They say that a #crate in Richard the Dog's house# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_MARKET_GUARD_HOUSE] = HintText(CustomMessage("They say that a #crate in the Market Guard House# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_KAKARIKO_VILLAGE] = HintText(CustomMessage("They say that a #crate in Kakariko Village# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_GRAVEYARD] = HintText(CustomMessage("They say that a #crate in the Graveyard# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_GORON_CITY] = HintText(CustomMessage("They say that a #crate in Goron City# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_DEATH_MOUNTAIN_CRATER] = HintText(CustomMessage("They say that a #crate in Death Mountain Crater# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_LON_LON_RANCH] = HintText(CustomMessage("They say that a #crate in Lon Lon Ranch# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_LAKESIDE_LABORATORY] = HintText(CustomMessage("They say that a #crate in the Laboratory# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", { QM_RED, QM_GREEN })); } } diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 6557d3a78f2..12c058386a3 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1643,11 +1643,11 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF North F3 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 2", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2)); - 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", "HW Before Quicksand Crate", RHT_CRATE_HAUNTED_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", "HW After Quicksand Crate 1", RHT_CRATE_HAUNTED_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", "HW After Quicksand Crate 2", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); - locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", "HW After Quicksand Crate 3", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); - locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", "HW Near Colossus Crate", RHT_CRATE_HAUNTED_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_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", "HW 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", "HW 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", "HW After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", "HW After Quicksand Crate 3", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); + locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", "HW Near Colossus Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_CRATE)); locationTable[RC_MK_NEAR_BAZAAR_CRATE_1] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 338), "Near Bazaar Crate 1", "MK Near Bazaar Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_1)); locationTable[RC_MK_NEAR_BAZAAR_CRATE_2] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 132), "Near Bazaar Crate 2", "MK Near Bazaar Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2)); locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-150, -576), "Shooting Gallery Crate 1", "MK Shooting Gallery Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index eb32a8ec605..3187705ae87 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -4986,7 +4986,7 @@ typedef enum { RHT_CRATE_GERUDO_VALLEY, RHT_CRATE_GERUDO_FORTRESS, RHT_CRATE_THIEVES_HIDEOUT, - RHT_CRATE_HAUNTED_WASTELAND, + RHT_CRATE_WASTELAND, RHT_CRATE_MARKET, RHT_CRATE_DOG_LADY_HOUSE, RHT_CRATE_MARKET_GUARD_HOUSE, From d94004257557d09187fa2e729be4f04b47d4b788 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:37:48 -0500 Subject: [PATCH 06/52] add dungeon hints --- .../hint_list/hint_list_exclude_dungeon.cpp | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index 2e0350e7c17..b36e4def3f6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -121,6 +121,10 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "", /*french*/ "Selon moi, un #coeur dans l'Arbre Mojo# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_DEKU_TREE] = HintText(CustomMessage("They say that a #crate in the Deku Tree# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | DODONGOS CAVERN | ---------------------------*/ @@ -295,6 +299,10 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*german*/ "!!!", /*french*/ "Selon moi, #jouer un air orageux pour une pierre étrange dans la Caverne Dodongo# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Dodongo's Cavern# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | JABU JABUS BELLY | @@ -890,6 +898,10 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil derrière le trône d’un chevalier dans un volcan# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_FIRE_TEMPLE] = HintText(CustomMessage("They say that a #crate in Fire Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | WATER TEMPLE | ---------------------------*/ @@ -1037,6 +1049,10 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil avant un duel avec son ombre# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Water Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | SPIRIT TEMPLE | ---------------------------*/ @@ -1282,6 +1298,10 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "Selon moi, protégé par un #cercle de flammes# dans le Temple de l'Esprit se trouve #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #crate in Spirit Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | SHADOW TEMPLE | ---------------------------*/ @@ -1964,6 +1984,10 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "", /*french*/ "Selon moi, dans #une épreuve avec un Dinalfos# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_GERUDO_TRAINING_GROUND] = HintText(CustomMessage("They say that a #crate in Gerudo Training Ground# contains #[[1]]#.", + /*german*/ "", + /*french*/ "", {QM_RED, QM_GREEN})); + /*-------------------------- | GANONS CASTLE | ---------------------------*/ From 43db86ed111a77feace235c4ded35586bf596e27 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:53:40 -0500 Subject: [PATCH 07/52] add to item pool --- soh/soh/Enhancements/randomizer/3drando/item_pool.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index b09d57dc4bf..7e25ffd4007 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -930,6 +930,15 @@ void GenerateItemPool() { if (overworldPotsActive || dungeonPotsActive) { PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive, false); } + + // Shuffle Crates + bool overworldCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || + ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL); + bool dungeonCratesActive = ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) || + ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL); + if (overworldCratesActive || dungeonCratesActive) { + PlaceItemsForType(RCTYPE_CRATE, overworldCratesActive, dungeonCratesActive, false); + } auto fsMode = ctx->GetOption(RSK_FISHSANITY); if (fsMode.IsNot(RO_FISHSANITY_OFF)) { From 528df3950795df94fbfe1ced5a394ffbedff0746 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:15:00 -0500 Subject: [PATCH 08/52] opt desc + check tracker + overworld locs --- .../Enhancements/randomizer/location_list.cpp | 10 +++++++ .../randomizer/option_descriptions.cpp | 10 +++++++ .../randomizer/randomizer_check_objects.cpp | 1 + .../randomizer/randomizer_check_tracker.cpp | 26 +++++++++++++++++++ soh/soh/Enhancements/randomizer/static_data.h | 1 + 5 files changed, 48 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 12c058386a3..c4c8fddebb9 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -43,6 +43,16 @@ std::vector Rando::StaticData::GetOverworldPotLocations() { return overworldPotLocations; } +std::vector Rando::StaticData::GetOverworldCrateLocations() { + std::vector overworldCrateLocations = {}; + for (Location& location : locationTable) { + if (location.GetRCType() == RCTYPE_CRATE && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + overworldCrateLocations.push_back(location.GetRandomizerCheck()); + } + } + return overworldCrateLocations; +} + std::vector Rando::StaticData::GetStaticHintLocations() { std::vector staticHintLocations = {}; for (Location& location : locationTable) { diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 8abdd263467..59b17b3433d 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -271,6 +271,16 @@ void Settings::CreateOptionDescriptions() { "Overworld - Only shuffle pots that are outside of dungeons.\n" "\n" "All pots - Shuffle all pots."; + mOptionDescriptions[RSK_SHUFFLE_CRATES] = "Crates will drop a randomized item the first time they're broken and collected. " + "Crates will have a different appearance when they hold a randomized item.\n" + "\n" + "Off - Crates will not be shuffled.\n" + "\n" + "Dungeons - Only shuffle crates that are within dungeons.\n" + "\n" + "Overworld - Only shuffle crates that are outside of dungeons.\n" + "\n" + "All Crates - Shuffle all crates."; mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE] = "Shuffles the fishing pole into the item pool.\n" "\n" "The fishing pole is required to play the fishing pond minigame."; diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index b8d435fd8dc..22936f52e0c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -172,6 +172,7 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (location.GetRCType() != RCTYPE_BEEHIVE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_COW || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_POT || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_CRATE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_FISH || ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) && (location.GetRCType() != RCTYPE_ADULT_TRADE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), RO_GENERIC_NO)) && diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 02b5c1f9bed..789ab817823 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -58,6 +58,8 @@ bool showWeirdEgg; bool showGerudoCard; bool showOverworldPots; bool showDungeonPots; +bool showOverworldCrates; +bool showDungeonCrates; bool showFrogSongRupees; bool showFairies; bool showStartingMapsCompasses; @@ -1233,11 +1235,32 @@ void LoadSettings() { showDungeonPots = false; break; } + + switch (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_CRATES)) { + case RO_SHUFFLE_CRATES_ALL: + showOverworldCrates = true; + showDungeonCrates = true; + break; + case RO_SHUFFLE_CRATES_OVERWORLD: + showOverworldCrates = true; + showDungeonCrates = false; + break; + case RO_SHUFFLE_CRATES_DUNGEONS: + showOverworldCrates = false; + showDungeonCrates = true; + break; + default: + showOverworldCrates = false; + showDungeonCrates = false; + break; + } } else { // Vanilla showOverworldTokens = true; showDungeonTokens = true; showOverworldPots = false; showDungeonPots = false; + showOverworldCrates = false; + showDungeonCrates = false; } fortressFast = false; @@ -1317,6 +1340,9 @@ bool IsCheckShuffled(RandomizerCheck rc) { (loc->GetRCType() != RCTYPE_POT || (showOverworldPots && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonPots && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_CRATE || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_COW || showCows) && (loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && (loc->GetRCType() != RCTYPE_FREESTANDING || diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 4a516d72f82..d0024fc96fc 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -47,6 +47,7 @@ class StaticData { static std::vector GetPondFishLocations(); static std::vector GetOverworldFishLocations(); static std::vector GetOverworldPotLocations(); + static std::vector GetOverworldCrateLocations(); static std::vector GetOverworldFairyLocations(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; From 0fb01ab0cb3f94fae8723cf7e140767312d60dd7 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:33:40 -0500 Subject: [PATCH 09/52] add VB funcs + fix fire locs + dmc crate + shuffle crates not pots again --- soh/soh/Enhancements/randomizer/dungeon.cpp | 8 +- .../Enhancements/randomizer/location_list.cpp | 284 +++++++++--------- .../Enhancements/randomizer/randomizer.cpp | 10 +- .../Enhancements/randomizer/randomizerTypes.h | 12 +- .../Enhancements/randomizer/randomizer_inf.h | 10 +- .../actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 9 + 6 files changed, 171 insertions(+), 162 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 5f92314a77e..ac66b7c35ea 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -702,10 +702,10 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, }, {}, { diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index c4c8fddebb9..e54c860ccee 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1686,151 +1686,151 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 111), "Near Fence Child Crate", "Kak Near Fence Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-60, -46), "Near Boarding House Child Crate", "Kak Near Boarding House Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", "Kak Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); - locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_MQ, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); + locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_MQ, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); locationTable[RC_GC_MAZE_CRATE] = Location::Crate(RC_GC_MAZE_CRATE, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -1339), "Maze Crate", "GC Maze Crate", RHT_CRATE_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE)); - locationTable[RC_DMC_GS_CRATE] = Location::Crate(RC_DMC_GS_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1898), "GS Crate", "DMC GS Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_GS_CRATE)); + locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1898), "Crate", "DMC Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", "LLR Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); locationTable[RC_LH_LAB_CRATE] = Location::Crate(RC_LH_LAB_CRATE, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(90, -119), "Lab Crate", "LH Lab Crate", RHT_CRATE_LAKESIDE_LABORATORY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE)); - locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); - locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", "Deku Tree MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); - locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", "Deku Tree MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Side Room Crate 1", "Dodongos Cavern MQ Side Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Side Room Crate 2", "Dodongos Cavern MQ Side Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Side Room Crate 3", "Dodongos Cavern MQ Side Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Side Room Crate 4", "Dodongos Cavern MQ Side Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Side Room Crate 5", "Dodongos Cavern MQ Side Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Side Room Crate 6", "Dodongos Cavern MQ Side Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Side Room Crate 7", "Dodongos Cavern MQ Side Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Side Room Crate 8", "Dodongos Cavern MQ Side Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1730, -1836), "MQ Staircase Lower Crate 1", "Dodongos Cavern MQ Staircase Lower Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2190, -1835), "MQ Staircase Lower Crate 2", "Dodongos Cavern MQ Staircase Lower Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1510, -1837), "MQ Staircase Upper Crate 1", "Dodongos Cavern MQ Staircase Upper Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1511, -1084), "MQ Staircase Upper Crate 2", "Dodongos Cavern MQ Staircase Upper Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2410, -1084), "MQ Staircase Upper Crate 3", "Dodongos Cavern MQ Staircase Upper Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "MQ Staircase Upper Crate 4", "Dodongos Cavern MQ Staircase Upper Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3191, -897), "MQ Two Flames Crate 1", "Dodongos Cavern MQ Two Flames Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2776, -810), "MQ Two Flames Crate 2", "Dodongos Cavern MQ Two Flames Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Near Torch Puzzle Crate 1", "Dodongos Cavern MQ Near Torch Puzzle Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Near Torch Puzzle Crate 2", "Dodongos Cavern MQ Near Torch Puzzle Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Near Torch Puzzle Crate 3", "Dodongos Cavern MQ Near Torch Puzzle Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Near Torch Puzzle Crate 4", "Dodongos Cavern MQ Near Torch Puzzle Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Near Torch Puzzle Crate 5", "Dodongos Cavern MQ Near Torch Puzzle Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Near Torch Puzzle Crate 6", "Dodongos Cavern MQ Near Torch Puzzle Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1211, -775), "MQ Outside Boss Crate 4", "Fire Temple MQ Outside Boss Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -417), "MQ Outside Boss Crate 5", "Fire Temple MQ Outside Boss Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -534), "MQ Outside Boss Crate 6", "Fire Temple MQ Outside Boss Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2249, -56), "MQ Shortcut Crate 1", "Fire Temple MQ Shortcut Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2189, -56), "MQ Shortcut Crate 2", "Fire Temple MQ Shortcut Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2150, 55), "MQ Shortcut Crate 3", "Fire Temple MQ Shortcut Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2135, -62), "MQ Shortcut Crate 4", "Fire Temple MQ Shortcut Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2090, 55), "MQ Shortcut Crate 5", "Fire Temple MQ Shortcut Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5)); - locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2030, 55), "MQ Shortcut Crate 6", "Fire Temple MQ Shortcut Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1147), "MQ Lizalfos Maze Lower Crate 1", "Fire Temple MQ Lizalfos Maze Lower 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1195), "MQ Lizalfos Maze Lower Crate 2", "Fire Temple MQ Lizalfos Maze Lower 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2124, 1154), "MQ Lizalfos Maze Lower Crate 3", "Fire Temple MQ Lizalfos Maze Lower 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1817, 1330), "MQ Lizalfos Maze Upper Crate 1", "Fire Temple MQ Lizalfos Maze Upper Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1288), "MQ Lizalfos Maze Upper Crate 2", "Fire Temple MQ Lizalfos Maze Upper Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1336), "MQ Lizalfos Maze Upper Crate 3", "Fire Temple MQ Lizalfos Maze Upper Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1407, -756), "MQ Lava Torch Crate 1", "Fire Temple MQ Lava Torch Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(384, 351), "MQ Lava Torch Crate 2", "Fire Temple MQ Lava Torch Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1409, -1176), "MQ Lava Torch Crate 3", "Fire Temple MQ Lava Torch Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(999, -402), "MQ Lava Torch Crate 4", "Fire Temple MQ Lava Torch Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Crate 5", "Fire Temple MQ Lava Torch Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-150, -336), "MQ Central Pillar Upper Crate 1", "Water Temple MQ Central Pillar Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-210, -336), "MQ Central Pillar Upper Crate 2", "Water Temple MQ Central Pillar Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(299, 485), "MQ Central Pillar Lower Crate 1", "Water Temple MQ Central Pillar Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 486), "MQ Central Pillar Lower Crate 2", "Water Temple MQ Central Pillar Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(222, 204), "MQ Central Pillar Lower Crate 3", "Water Temple MQ Central Pillar Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 425), "MQ Central Pillar Lower Crate 4", "Water Temple MQ Central Pillar Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 365), "MQ Central Pillar Lower Crate 5", "Water Temple MQ Central Pillar Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 426), "MQ Central Pillar Lower Crate 6", "Water Temple MQ Central Pillar Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 366), "MQ Central Pillar Lower Crate 7", "Water Temple MQ Central Pillar Lower Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(162, 204), "MQ Central Pillar Lower Crate 8", "Water Temple MQ Central Pillar Lower Crate 8", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(31, 636), "MQ Central Pillar Lower Crate 9", "Water Temple MQ Central Pillar Lower Crate 9", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(151, 636), "MQ Central Pillar Lower Crate 10", "Water Temple MQ Central Pillar Lower Crate 10", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(102, 204), "MQ Central Pillar Lower Crate 11", "Water Temple MQ Central Pillar Lower Crate 11", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(91, 636), "MQ Central Pillar Lower Crate 12", "Water Temple MQ Central Pillar Lower Crate 12", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 522), "MQ Central Pillar Lower Crate 13", "Water Temple MQ Central Pillar Lower Crate 13", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13)); - locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 582), "MQ Central Pillar Lower Crate 14", "Water Temple MQ Central Pillar Lower Crate 14", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(698, 399), "MQ Lizalfos Hallway Crate 1", "Water Temple MQ Lizalfos Hallway Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(437, 576), "MQ Lizalfos Hallway Crate 2", "Water Temple MQ Lizalfos Hallway Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(270, 504), "MQ Lizalfos Hallway Crate 3", "Water Temple MQ Lizalfos Hallway Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(686, 1016), "MQ Lizalfos Hallway Room Crate 1", "Water Temple MQ Lizalfos Hallway Room Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 870), "MQ Lizalfos Hallway Room Crate 2", "Water Temple MQ Lizalfos Hallway Room Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 810), "MQ Lizalfos Hallway Room Crate 3", "Water Temple MQ Lizalfos Hallway Room Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(524, 839), "MQ Lizalfos Hallway Room Crate 4", "Water Temple MQ Lizalfos Hallway Room Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(525, 954), "MQ Lizalfos Hallway Room Crate 5", "Water Temple MQ Lizalfos Hallway Room Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 570), "MQ Lizalfos Hallway Gate Crate 1", "Water Temple MQ Lizalfos Hallway Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 510), "MQ Lizalfos Hallway Gate Crate 2", "Water Temple MQ Lizalfos Hallway Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -712), "MQ Storage Room A Crate 2", "Water Temple MQ Storage Room A Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -821), "MQ Storage Room A Crate 3", "Water Temple MQ Storage Room A Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -922), "MQ Storage Room A Crate 4", "Water Temple MQ Storage Room A Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1434, -1036), "MQ Storage Room A Crate 1", "Water Temple MQ Storage Room A Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1374, -1036), "MQ Storage Room A Crate 5", "Water Temple MQ Storage Room A Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1265, -1036), "MQ Storage Room A Crate 6", "Water Temple MQ Storage Room A Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1205, -1036), "MQ Storage Room A Crate 7", "Water Temple MQ Storage Room A Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ Before Upper Water Switch Lower Crate 1", "Water Temple MQ Before Upper Water Switch Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ Before Upper Water Switch Lower Crate 2", "Water Temple MQ Before Upper Water Switch Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ Before Upper Water Switch Lower Crate 3", "Water Temple MQ Before Upper Water Switch Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ Before Upper Water Switch Lower Crate 4", "Water Temple MQ Before Upper Water Switch Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ Before Upper Water Switch Lower Crate 5", "Water Temple MQ Before Upper Water Switch Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ Before Upper Water Switch Lower Crate 6", "Water Temple MQ Before Upper Water Switch Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ Before Upper Water Switch Upper Crate 2", "Water Temple MQ Before Upper Water Switch Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ Before Upper Water Switch Upper Crate 1", "Water Temple MQ Before Upper Water Switch Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Before BK By Torches Crate 1", "Water Temple MQ Before BK By Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Before BK By Torches Crate 2", "Water Temple MQ Before BK By Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Before BK Submerged Crate 2", "Water Temple MQ Before BK Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Before BK Submerged Crate 3", "Water Temple MQ Before BK Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Before BK Submerged Crate 4", "Water Temple MQ Before BK Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Before BK Submerged Crate 1", "Water Temple MQ Before BK Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Before BK By Door Crate 1", "Water Temple MQ Before BK By Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Before BK By Door Crate 2", "Water Temple MQ Before BK By Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1257, -1567), "MQ BK Room Upper Crate", "Water Temple MQ BK Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE)); - locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1289, -1205), "MQ BK Room Lower Crate 1", "Water Temple MQ BK Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-985, -1333), "MQ BK Room Lower Crate 2", "Water Temple MQ BK Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1297, -1300), "MQ BK Room Lower Crate 3", "Water Temple MQ BK Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1069, -1402), "MQ BK Room Lower Crate 4", "Water Temple MQ BK Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Key Area Front Crate 2", "Water Temple MQ Key Area Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Key Area Front Crate 1", "Water Temple MQ Key Area Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Key Area Submerged Crate 1", "Water Temple MQ Key Area Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Key Area Submerged Crate 2", "Water Temple MQ Key Area Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Key Area Submerged Crate 3", "Water Temple MQ Key Area Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Key Area Submerged Crate 4", "Water Temple MQ Key Area Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Key Area Submerged Crate 5", "Water Temple MQ Key Area Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Key Area Submerged Crate 6", "Water Temple MQ Key Area Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Key Area Behind Gate Crate 1", "Water Temple MQ Key Area Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Key Area Behind Gate Crate 2", "Water Temple MQ Key Area Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Key Area Behind Gate Crate 3", "Water Temple MQ Key Area Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Key Area Behind Gate Crate 4", "Water Temple MQ Key Area Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-397, -3818), "MQ Dodongo Room Upper Crate", "Water Temple MQ Dodongo Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE)); - locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(30, -3215), "MQ Dodongo Room Hall Crate", "Water Temple MQ Dodongo Room Hall Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE)); - locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-85, -3460), "MQ Dodongo Room Lower Crate 1", "Water Temple MQ Dodongo Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-271, -3826), "MQ Dodongo Room Lower Crate 2", "Water Temple MQ Dodongo Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(36, -3700), "MQ Dodongo Room Lower Crate 3", "Water Temple MQ Dodongo Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2766), "MQ Storage Room B Crate 1", "Water Temple MQ Storage Room B Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2866), "MQ Storage Room B Crate 2", "Water Temple MQ Storage Room B Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2926), "MQ Storage Room B Crate 3", "Water Temple MQ Storage Room B Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1435, -2935), "MQ Storage Room B Crate 4", "Water Temple MQ Storage Room B Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2875), "MQ Storage Room B Crate 5", "Water Temple MQ Storage Room B Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-994, 744), "MQ Triple Torch Room Submerged Crate 1", "Water Temple MQ Triple Torch Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-991, 976), "MQ Triple Torch Room Submerged Crate 2", "Water Temple MQ Triple Torch Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1511, 975), "MQ Triple Torch Room Submerged Crate 3", "Water Temple MQ Triple Torch Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 792), "MQ Triple Torch Room Submerged Crate 4", "Water Temple MQ Triple Torch Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 975), "MQ Triple Torch Room Submerged Crate 5", "Water Temple MQ Triple Torch Room Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 744), "MQ Triple Torch Room Submerged Crate 6", "Water Temple MQ Triple Torch Room Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2183, 977), "MQ Triple Torch Room Gate Crate 1", "Water Temple MQ Triple Torch Room Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2260, 744), "MQ Triple Torch Room Gate Crate 3", "Water Temple MQ Triple Torch Room Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, 743), "MQ Triple Torch Room Gate Crate 2", "Water Temple MQ Triple Torch Room Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(510, -1558), "MQ Statue Crate 1", "Spirit Temple MQ Statue Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(570, -1558), "MQ Statue Crate 2", "Spirit Temple MQ Statue Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1138), "MQ Big Mirror Crate 1", "Spirit Temple MQ Big Mirror Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1138), "MQ Big Mirror Crate 2", "Spirit Temple MQ Big Mirror Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", "Spirit Temple MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", "Spirit Temple MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); - locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); + locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", "Deku Tree MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); + locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", "Deku Tree MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Side Room Crate 1", "Dodongos Cavern MQ Side Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Side Room Crate 2", "Dodongos Cavern MQ Side Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Side Room Crate 3", "Dodongos Cavern MQ Side Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Side Room Crate 4", "Dodongos Cavern MQ Side Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Side Room Crate 5", "Dodongos Cavern MQ Side Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Side Room Crate 6", "Dodongos Cavern MQ Side Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Side Room Crate 7", "Dodongos Cavern MQ Side Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7)); + locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Side Room Crate 8", "Dodongos Cavern MQ Side Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1730, -1836), "MQ Staircase Lower Crate 1", "Dodongos Cavern MQ Staircase Lower Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2190, -1835), "MQ Staircase Lower Crate 2", "Dodongos Cavern MQ Staircase Lower Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1510, -1837), "MQ Staircase Upper Crate 1", "Dodongos Cavern MQ Staircase Upper Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1511, -1084), "MQ Staircase Upper Crate 2", "Dodongos Cavern MQ Staircase Upper Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2410, -1084), "MQ Staircase Upper Crate 3", "Dodongos Cavern MQ Staircase Upper Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "MQ Staircase Upper Crate 4", "Dodongos Cavern MQ Staircase Upper Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3191, -897), "MQ Two Flames Crate 1", "Dodongos Cavern MQ Two Flames Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2776, -810), "MQ Two Flames Crate 2", "Dodongos Cavern MQ Two Flames Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Near Torch Puzzle Crate 1", "Dodongos Cavern MQ Near Torch Puzzle Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Near Torch Puzzle Crate 2", "Dodongos Cavern MQ Near Torch Puzzle Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Near Torch Puzzle Crate 3", "Dodongos Cavern MQ Near Torch Puzzle Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Near Torch Puzzle Crate 4", "Dodongos Cavern MQ Near Torch Puzzle Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Near Torch Puzzle Crate 5", "Dodongos Cavern MQ Near Torch Puzzle Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Near Torch Puzzle Crate 6", "Dodongos Cavern MQ Near Torch Puzzle Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1211, -775), "MQ Outside Boss Crate 4", "Fire Temple MQ Outside Boss Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -417), "MQ Outside Boss Crate 5", "Fire Temple MQ Outside Boss Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -534), "MQ Outside Boss Crate 6", "Fire Temple MQ Outside Boss Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2249, -56), "MQ Shortcut Crate 1", "Fire Temple MQ Shortcut Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2189, -56), "MQ Shortcut Crate 2", "Fire Temple MQ Shortcut Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2150, 55), "MQ Shortcut Crate 3", "Fire Temple MQ Shortcut Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2135, -62), "MQ Shortcut Crate 4", "Fire Temple MQ Shortcut Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2090, 55), "MQ Shortcut Crate 5", "Fire Temple MQ Shortcut Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5)); + locationTable[RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2030, 55), "MQ Shortcut Crate 6", "Fire Temple MQ Shortcut Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1147), "MQ Lizalfos Maze Lower Crate 1", "Fire Temple MQ Lizalfos Maze Lower 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2230, 1195), "MQ Lizalfos Maze Lower Crate 2", "Fire Temple MQ Lizalfos Maze Lower 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(2124, 1154), "MQ Lizalfos Maze Lower Crate 3", "Fire Temple MQ Lizalfos Maze Lower 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1817, 1330), "MQ Lizalfos Maze Upper Crate 1", "Fire Temple MQ Lizalfos Maze Upper Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1288), "MQ Lizalfos Maze Upper Crate 2", "Fire Temple MQ Lizalfos Maze Upper Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1710, 1336), "MQ Lizalfos Maze Upper Crate 3", "Fire Temple MQ Lizalfos Maze Upper Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1407, -756), "MQ Lava Torch Crate 1", "Fire Temple MQ Lava Torch Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(384, 351), "MQ Lava Torch Crate 2", "Fire Temple MQ Lava Torch Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1409, -1176), "MQ Lava Torch Crate 3", "Fire Temple MQ Lava Torch Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(999, -402), "MQ Lava Torch Crate 4", "Fire Temple MQ Lava Torch Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Crate 5", "Fire Temple MQ Lava Torch Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-150, -336), "MQ Central Pillar Upper Crate 1", "Water Temple MQ Central Pillar Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-210, -336), "MQ Central Pillar Upper Crate 2", "Water Temple MQ Central Pillar Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(299, 485), "MQ Central Pillar Lower Crate 1", "Water Temple MQ Central Pillar Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 486), "MQ Central Pillar Lower Crate 2", "Water Temple MQ Central Pillar Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(222, 204), "MQ Central Pillar Lower Crate 3", "Water Temple MQ Central Pillar Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 425), "MQ Central Pillar Lower Crate 4", "Water Temple MQ Central Pillar Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(455, 365), "MQ Central Pillar Lower Crate 5", "Water Temple MQ Central Pillar Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 426), "MQ Central Pillar Lower Crate 6", "Water Temple MQ Central Pillar Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(215, 366), "MQ Central Pillar Lower Crate 7", "Water Temple MQ Central Pillar Lower Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(162, 204), "MQ Central Pillar Lower Crate 8", "Water Temple MQ Central Pillar Lower Crate 8", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(31, 636), "MQ Central Pillar Lower Crate 9", "Water Temple MQ Central Pillar Lower Crate 9", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(151, 636), "MQ Central Pillar Lower Crate 10", "Water Temple MQ Central Pillar Lower Crate 10", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(102, 204), "MQ Central Pillar Lower Crate 11", "Water Temple MQ Central Pillar Lower Crate 11", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(91, 636), "MQ Central Pillar Lower Crate 12", "Water Temple MQ Central Pillar Lower Crate 12", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 522), "MQ Central Pillar Lower Crate 13", "Water Temple MQ Central Pillar Lower Crate 13", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13)); + locationTable[RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14] = Location::Crate(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(25, 582), "MQ Central Pillar Lower Crate 14", "Water Temple MQ Central Pillar Lower Crate 14", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(698, 399), "MQ Lizalfos Hallway Crate 1", "Water Temple MQ Lizalfos Hallway Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(437, 576), "MQ Lizalfos Hallway Crate 2", "Water Temple MQ Lizalfos Hallway Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(270, 504), "MQ Lizalfos Hallway Crate 3", "Water Temple MQ Lizalfos Hallway Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(686, 1016), "MQ Lizalfos Hallway Room Crate 1", "Water Temple MQ Lizalfos Hallway Room Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 870), "MQ Lizalfos Hallway Room Crate 2", "Water Temple MQ Lizalfos Hallway Room Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(795, 810), "MQ Lizalfos Hallway Room Crate 3", "Water Temple MQ Lizalfos Hallway Room Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(524, 839), "MQ Lizalfos Hallway Room Crate 4", "Water Temple MQ Lizalfos Hallway Room Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(525, 954), "MQ Lizalfos Hallway Room Crate 5", "Water Temple MQ Lizalfos Hallway Room Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 570), "MQ Lizalfos Hallway Gate Crate 1", "Water Temple MQ Lizalfos Hallway Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(816, 510), "MQ Lizalfos Hallway Gate Crate 2", "Water Temple MQ Lizalfos Hallway Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -712), "MQ Storage Room A Crate 2", "Water Temple MQ Storage Room A Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -821), "MQ Storage Room A Crate 3", "Water Temple MQ Storage Room A Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1536, -922), "MQ Storage Room A Crate 4", "Water Temple MQ Storage Room A Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1434, -1036), "MQ Storage Room A Crate 1", "Water Temple MQ Storage Room A Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1374, -1036), "MQ Storage Room A Crate 5", "Water Temple MQ Storage Room A Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1265, -1036), "MQ Storage Room A Crate 6", "Water Temple MQ Storage Room A Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1205, -1036), "MQ Storage Room A Crate 7", "Water Temple MQ Storage Room A Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ Before Upper Water Switch Lower Crate 1", "Water Temple MQ Before Upper Water Switch Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ Before Upper Water Switch Lower Crate 2", "Water Temple MQ Before Upper Water Switch Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ Before Upper Water Switch Lower Crate 3", "Water Temple MQ Before Upper Water Switch Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ Before Upper Water Switch Lower Crate 4", "Water Temple MQ Before Upper Water Switch Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ Before Upper Water Switch Lower Crate 5", "Water Temple MQ Before Upper Water Switch Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ Before Upper Water Switch Lower Crate 6", "Water Temple MQ Before Upper Water Switch Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ Before Upper Water Switch Upper Crate 2", "Water Temple MQ Before Upper Water Switch Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ Before Upper Water Switch Upper Crate 1", "Water Temple MQ Before Upper Water Switch Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Before BK By Torches Crate 1", "Water Temple MQ Before BK By Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Before BK By Torches Crate 2", "Water Temple MQ Before BK By Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Before BK Submerged Crate 2", "Water Temple MQ Before BK Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Before BK Submerged Crate 3", "Water Temple MQ Before BK Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Before BK Submerged Crate 4", "Water Temple MQ Before BK Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Before BK Submerged Crate 1", "Water Temple MQ Before BK Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Before BK By Door Crate 1", "Water Temple MQ Before BK By Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Before BK By Door Crate 2", "Water Temple MQ Before BK By Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1257, -1567), "MQ BK Room Upper Crate", "Water Temple MQ BK Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1289, -1205), "MQ BK Room Lower Crate 1", "Water Temple MQ BK Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-985, -1333), "MQ BK Room Lower Crate 2", "Water Temple MQ BK Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1297, -1300), "MQ BK Room Lower Crate 3", "Water Temple MQ BK Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1069, -1402), "MQ BK Room Lower Crate 4", "Water Temple MQ BK Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Key Area Front Crate 2", "Water Temple MQ Key Area Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Key Area Front Crate 1", "Water Temple MQ Key Area Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Key Area Submerged Crate 1", "Water Temple MQ Key Area Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Key Area Submerged Crate 2", "Water Temple MQ Key Area Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Key Area Submerged Crate 3", "Water Temple MQ Key Area Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Key Area Submerged Crate 4", "Water Temple MQ Key Area Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Key Area Submerged Crate 5", "Water Temple MQ Key Area Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Key Area Submerged Crate 6", "Water Temple MQ Key Area Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Key Area Behind Gate Crate 1", "Water Temple MQ Key Area Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Key Area Behind Gate Crate 2", "Water Temple MQ Key Area Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Key Area Behind Gate Crate 3", "Water Temple MQ Key Area Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Key Area Behind Gate Crate 4", "Water Temple MQ Key Area Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-397, -3818), "MQ Dodongo Room Upper Crate", "Water Temple MQ Dodongo Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(30, -3215), "MQ Dodongo Room Hall Crate", "Water Temple MQ Dodongo Room Hall Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-85, -3460), "MQ Dodongo Room Lower Crate 1", "Water Temple MQ Dodongo Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-271, -3826), "MQ Dodongo Room Lower Crate 2", "Water Temple MQ Dodongo Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(36, -3700), "MQ Dodongo Room Lower Crate 3", "Water Temple MQ Dodongo Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2766), "MQ Storage Room B Crate 1", "Water Temple MQ Storage Room B Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2866), "MQ Storage Room B Crate 2", "Water Temple MQ Storage Room B Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1125, -2926), "MQ Storage Room B Crate 3", "Water Temple MQ Storage Room B Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1435, -2935), "MQ Storage Room B Crate 4", "Water Temple MQ Storage Room B Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1436, -2875), "MQ Storage Room B Crate 5", "Water Temple MQ Storage Room B Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-994, 744), "MQ Triple Torch Room Submerged Crate 1", "Water Temple MQ Triple Torch Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-991, 976), "MQ Triple Torch Room Submerged Crate 2", "Water Temple MQ Triple Torch Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1511, 975), "MQ Triple Torch Room Submerged Crate 3", "Water Temple MQ Triple Torch Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 792), "MQ Triple Torch Room Submerged Crate 4", "Water Temple MQ Triple Torch Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 975), "MQ Triple Torch Room Submerged Crate 5", "Water Temple MQ Triple Torch Room Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1571, 744), "MQ Triple Torch Room Submerged Crate 6", "Water Temple MQ Triple Torch Room Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2183, 977), "MQ Triple Torch Room Gate Crate 1", "Water Temple MQ Triple Torch Room Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2260, 744), "MQ Triple Torch Room Gate Crate 3", "Water Temple MQ Triple Torch Room Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, 743), "MQ Triple Torch Room Gate Crate 2", "Water Temple MQ Triple Torch Room Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(510, -1558), "MQ Statue Crate 1", "Spirit Temple MQ Statue Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(570, -1558), "MQ Statue Crate 2", "Spirit Temple MQ Statue Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1138), "MQ Big Mirror Crate 1", "Spirit Temple MQ Big Mirror Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1138), "MQ Big Mirror Crate 2", "Spirit Temple MQ Big Mirror Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", "Spirit Temple MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", "Spirit Temple MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); + locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); // Fairies diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index e9790203864..97220d2f299 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1619,7 +1619,7 @@ std::map rcToRandomizerInf = { { RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, }, { RC_GRAVEYARD_CRATE, RAND_INF_GRAVEYARD_CRATE, }, { RC_GC_MAZE_CRATE, RAND_INF_GC_MAZE_CRATE, }, - { RC_DMC_GS_CRATE, RAND_INF_DMC_GS_CRATE, }, + { RC_DMC_CRATE, RAND_INF_DMC_CRATE, }, { RC_LLR_NEAR_TREE_CRATE, RAND_INF_LLR_NEAR_TREE_CRATE, }, { RC_LH_LAB_CRATE, RAND_INF_LH_LAB_CRATE, }, @@ -1667,10 +1667,10 @@ std::map rcToRandomizerInf = { { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, }, { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, }, { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, - { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, }, { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, }, { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, }, { RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, }, diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 3187705ae87..6a70b09959c 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2405,7 +2405,7 @@ typedef enum { RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RC_GRAVEYARD_CRATE, RC_GC_MAZE_CRATE, - RC_DMC_GS_CRATE, + RC_DMC_CRATE, RC_LLR_NEAR_TREE_CRATE, RC_LH_LAB_CRATE, @@ -2454,10 +2454,10 @@ typedef enum { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, @@ -5809,7 +5809,7 @@ typedef enum { RO_SHUFFLE_CRATES_DUNGEONS, RO_SHUFFLE_CRATES_OVERWORLD, RO_SHUFFLE_CRATES_ALL, -} RandoOptionShufflePots; +} RandoOptionShuffleCrates; //Link's Pocket Settings (dungeon reward, advancement, anything, nothing) typedef enum { diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index abef1532bc3..bcb9e12bbbd 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -815,7 +815,7 @@ typedef enum { RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE, RAND_INF_GRAVEYARD_CRATE, RAND_INF_GC_MAZE_CRATE, - RAND_INF_DMC_GS_CRATE, + RAND_INF_DMC_CRATE, RAND_INF_LLR_NEAR_TREE_CRATE, RAND_INF_LH_LAB_CRATE, @@ -863,10 +863,10 @@ typedef enum { RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, - RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index d6452d25337..45aee999d6e 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -7,6 +7,7 @@ #include "z_obj_kibako2.h" #include "objects/object_kibako2/object_kibako2.h" #include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS 0 @@ -108,6 +109,10 @@ void ObjKibako2_SpawnCollectible(ObjKibako2* this, PlayState* play) { s16 itemDropped; s16 collectibleFlagTemp; + if (!GameInteractor_Should(VB_CRATE_DROP_ITEM, false, this)) { + return; + } + collectibleFlagTemp = this->collectibleFlag; itemDropped = this->dyna.actor.home.rot.x; if (itemDropped >= 0 && itemDropped < 0x1A) { @@ -176,5 +181,9 @@ void ObjKibako2_Update(Actor* thisx, PlayState* play) { } void ObjKibako2_Draw(Actor* thisx, PlayState* play) { + if (!GameInteractor_Should(VB_CRATE_SETUP_DRAW, false, thisx)) { + return; + } + Gfx_DrawDListOpa(play, gLargeCrateDL); } From 1971bc191e518554bd088b9572ec07974fb8df0c Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 13:35:46 -0500 Subject: [PATCH 10/52] fix crate option def --- soh/soh/Enhancements/randomizer/settings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 18d56e5b8ee..5338709e398 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -204,7 +204,7 @@ void Settings::CreateOptions() { mOptions[RSK_SHUFFLE_WEIRD_EGG] = Option::Bool("Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]); mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD] = Option::Bool("Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]); mOptions[RSK_SHUFFLE_POTS] = Option::U8("Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF); - mOptions[RSK_SHUFFLE_CRATES] = Option::U8("Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF); + mOptions[RSK_SHUFFLE_CRATES] = Option::U8("Shuffle Crates", {"Off", "Dungeons", "Overworld", "All Crates"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleCrates"), mOptionDescriptions[RSK_SHUFFLE_CRATES], WidgetType::Combobox, RO_SHUFFLE_CRATES_OFF); mOptions[RSK_SHUFFLE_FISHING_POLE] = Option::Bool("Shuffle Fishing Pole", CVAR_RANDOMIZER_SETTING("ShuffleFishingPole"), mOptionDescriptions[RSK_SHUFFLE_FISHING_POLE]); mOptions[RSK_SHUFFLE_MERCHANTS] = Option::U8("Shuffle Merchants", {"Off", "Bean Merchant Only", "All But Beans", "All"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleMerchants"), mOptionDescriptions[RSK_SHUFFLE_MERCHANTS], WidgetType::Combobox, RO_SHUFFLE_MERCHANTS_OFF, IMFLAG_NONE); mOptions[RSK_MERCHANT_PRICES] = Option::U8("Merchant Prices", {"Vanilla", "Cheap Balanced", "Balanced", "Fixed", "Range", "Set By Wallet"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("MerchantPrices"), mOptionDescriptions[RSK_MERCHANT_PRICES], WidgetType::Combobox, RO_PRICE_VANILLA, false, IMFLAG_NONE); From 4b7392facb52aec8b4ff8024c00c1659fb26718d Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:16:50 -0500 Subject: [PATCH 11/52] fix gy crate area --- soh/soh/Enhancements/randomizer/location_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index e54c860ccee..0bf134899b4 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1686,7 +1686,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 111), "Near Fence Child Crate", "Kak Near Fence Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-60, -46), "Near Boarding House Child Crate", "Kak Near Boarding House Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", "Kak Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); - locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_MQ, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); + locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); locationTable[RC_GC_MAZE_CRATE] = Location::Crate(RC_GC_MAZE_CRATE, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -1339), "Maze Crate", "GC Maze Crate", RHT_CRATE_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE)); locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1898), "Crate", "DMC Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", "LLR Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); From 1733e732b05226cd3de4b0715294ba17044567d5 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 14:46:25 -0500 Subject: [PATCH 12/52] add ow locs --- .../location_access/gerudo_fortress.cpp | 35 ++++++++++++ .../overworld/death_mountain_crater.cpp | 2 + .../overworld/gerudo_valley.cpp | 4 +- .../location_access/overworld/goron_city.cpp | 2 + .../location_access/overworld/graveyard.cpp | 2 + .../overworld/haunted_wasteland.cpp | 18 ++++++- .../location_access/overworld/kakariko.cpp | 54 ++++++++++++------- .../location_access/overworld/lake_hylia.cpp | 2 + .../overworld/lon_lon_ranch.cpp | 2 + .../location_access/overworld/market.cpp | 18 ++++++- 10 files changed, 116 insertions(+), 23 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index 6af0551e078..a299e917dfe 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -42,6 +42,41 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots()), + LOCATION(RC_GF_ABOVE_JAIL_CRATE, true), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_1, true), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, true), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, true), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, true), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, true), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_4, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_5, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_6, true), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_7, true), + LOCATION(RC_GF_ARCHERY_START_CRATE_1, true), + LOCATION(RC_GF_ARCHERY_START_CRATE_2, true), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, true), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, true), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, true), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, true), + LOCATION(RC_GF_KITCHEN_CRATE_1, true), + LOCATION(RC_GF_KITCHEN_CRATE_2, true), + LOCATION(RC_GF_KITCHEN_CRATE_3, true), + LOCATION(RC_GF_KITCHEN_CRATE_4, true), + LOCATION(RC_GF_KITCHEN_CRATE_5, true), + LOCATION(RC_GF_BREAK_ROOM_CRATE_1, true), + LOCATION(RC_GF_BREAK_ROOM_CRATE_2, true), + LOCATION(RC_GF_BREAK_ROOM_CRATE_3, true), + LOCATION(RC_GF_BREAK_ROOM_CRATE_4, true), + LOCATION(RC_GF_NORTH_F1_CARPENTER_CRATE, true), + LOCATION(RC_GF_NORTH_F3_CARPENTER_CRATE, true), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, true), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, true), + + //RANDOTODO doublecheck when GF isn't a blob LOCATION(RC_GF_KITCHEN_SUN_FAIRY, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_SUNS_SONG)), }, { diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp index 6ba8bfc6ed7..7ae645e5965 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp @@ -21,6 +21,8 @@ void RegionTable_Init_DeathMountainCrater() { LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), + LOCATION(RC_DMC_CRATE, true), + }, { //Exits Entrance(RR_DMC_UPPER_NEARBY, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index 1c4714e52f7..88fd1e858a2 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -53,7 +53,9 @@ void RegionTable_Init_GerudoValley() { areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), + LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), + LOCATION(RC_GV_FREESTANDING_POH_CRATE, true), + LOCATION(RC_GV_NEAR_COW_CRATE, true), }, { //Exits Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp index 722402ae9fc..f871602f56f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp @@ -32,6 +32,8 @@ void RegionTable_Init_GoronCity() { LOCATION(RC_GC_UPPER_STAIRCASE_POT_1, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()), + LOCATION(RC_GC_MAZE_CRATE, true), + }, { //Exits Entrance(RR_DEATH_MOUNTAIN_TRAIL, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index eb906d22711..05bd2c73f61 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -18,6 +18,8 @@ void RegionTable_Init_Graveyard() { LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_GRAVEYARD_CRATE, true), + }, { //Exits Entrance(RR_GRAVEYARD_SHIELD_GRAVE, []{return logic->IsAdult || logic->AtNight;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp index abedcc571c9..27d65dfad60 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp @@ -4,7 +4,12 @@ using namespace Rando; void RegionTable_Init_HauntedWasteland() { - areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, true), + }, + { //Exits Entrance(RR_GF_OUTSIDE_GATE, []{return true;}), Entrance(RR_HAUNTED_WASTELAND, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}), @@ -24,13 +29,22 @@ void RegionTable_Init_HauntedWasteland() { LOCATION(RC_WASTELAND_NEAR_GS_POT_2, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_3, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, true), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, true), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, true), + }, { //Exits Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH);}), Entrance(RR_WASTELAND_NEAR_FORTRESS, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_HW_CROSSING);}), }); - areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, true), + }, + { //Exits Entrance(RR_DESERT_COLOSSUS, []{return true;}), Entrance(RR_HAUNTED_WASTELAND, []{return ctx->GetTrickOption(RT_HW_REVERSE) || false;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index d41055f95bf..8c6f9b6950b 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -11,25 +11,43 @@ void RegionTable_Init_Kakariko() { EventAccess(&logic->KakarikoVillageGateOpen, []{return logic->IsChild && logic->HasItem(RG_ZELDAS_LETTER);}), }, { //Locations - LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)), - LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay), - LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay), - LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)), + LOCATION(RC_SHEIK_IN_KAKARIKO, logic->IsAdult && logic->HasItem(RG_FOREST_MEDALLION) && logic->HasItem(RG_FIRE_MEDALLION) && logic->HasItem(RG_WATER_MEDALLION)), + LOCATION(RC_KAK_ANJU_AS_CHILD, logic->IsChild && logic->AtDay), + LOCATION(RC_KAK_ANJU_AS_ADULT, logic->IsAdult && logic->AtDay), + LOCATION(RC_KAK_TRADE_POCKET_CUCCO, logic->IsAdult && logic->AtDay && (logic->CanUse(RG_POCKET_EGG) && logic->WakeUpAdultTalon)), //Can kill lower kak skulls with pots - LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_GS_HOUSE_UNDER_CONSTRUCTION, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_SKULLTULA_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_GUARDS_HOUSE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_TREE, logic->IsChild && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_GS_WATCHTOWER, logic->IsChild && (logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer())) && logic->CanGetNightTimeGS()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, true), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, true), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, true), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, true), + LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, true), + LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, true), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, true), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, true), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, true), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, true), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, true), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, true), + LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, true), + LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, true), + LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, true), + LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, true), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, true), + LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, true), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index 8833441e97d..cbd596c5421 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -68,6 +68,8 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), + LOCATION(RC_LH_LAB_CRATE, true), + }, { //Exits Entrance(RR_LAKE_HYLIA, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp index fa1d7451eed..507e4350fa7 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp @@ -22,6 +22,8 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()), + LOCATION(RC_LLR_NEAR_TREE_CRATE, true), + }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index e0ef67aa5fe..edaf8b9bb5a 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -11,7 +11,15 @@ void RegionTable_Init_Market() { Entrance(RR_MARKET_GUARD_HOUSE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), }); - areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_1, true), + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_2, true), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, true), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, true), + }, + { //Exits Entrance(RR_MARKET_ENTRANCE, []{return true;}), Entrance(RR_TOT_ENTRANCE, []{return true;}), @@ -96,6 +104,11 @@ void RegionTable_Init_Market() { LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_9, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_10, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, true), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, true), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, true), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, true), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, true), }, { //Exits Entrance(RR_MARKET_ENTRANCE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), @@ -199,7 +212,8 @@ void RegionTable_Init_Market() { areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", "Market Dog Lady House", {}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), + LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), + LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, true), }, { //Exits Entrance(RR_MARKET_BACK_ALLEY, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}), From d5b2a264d66af4221f2aad0ad2a86e370b5700db Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:25:46 -0500 Subject: [PATCH 13/52] context + more location_list --- soh/soh/Enhancements/randomizer/context.cpp | 5 +++++ soh/soh/Enhancements/randomizer/location_list.cpp | 1 + 2 files changed, 6 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 7b33df771e9..d047f9cd24a 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -144,6 +144,11 @@ void Context::GenerateLocationPool() { AddLocations(StaticData::GetOverworldPotLocations()); } + if (mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || + mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { + AddLocations(StaticData::GetOverworldCrateLocations()); + } + AddLocations(StaticData::GetAllDungeonLocations()); } diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 0bf134899b4..186330f074b 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -124,6 +124,7 @@ std::vector Rando::StaticData::GetOverworldLocations() { location.GetRandomizerCheck() != RC_TRIFORCE_COMPLETED && //not really an overworld check location.GetRCType() != RCTYPE_FISH && // temp fix while locations are properly sorted out location.GetRCType() != RCTYPE_POT && // Same as fish + location.GetRCType() != RCTYPE_CRATE && // Same as fish location.GetRCType() != RCTYPE_CHEST_GAME && //this is supposed to be excluded (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE) || location.GetRCType() != RCTYPE_ADULT_TRADE) && //trade is handled elsewhere in location pool location.GetRCType() != RCTYPE_STATIC_HINT && From fc6c6062af18b664569058ef47a03d7f0875a814 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 15:45:01 -0500 Subject: [PATCH 14/52] fix kak crate --- soh/soh/Enhancements/randomizer/location_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 186330f074b..57479998e81 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1683,7 +1683,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-489, -424), "Near Bazaar Adult Crate 2`", "Kak Near Bazaar Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_ADULT_CRATE_2)); locationTable[RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE] = Location::Crate(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-724, 871), "Behind GS House Adult Crate", "Kak Behind GS House Adult Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_BEHIND_GS_HOUSE_ADULT_CRATE)); locationTable[RC_KAK_NEAR_GY_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_GY_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1732, 1366), "Near Graveyard Child Crate", "Kak Near Graveyard Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_GY_CHILD_CRATE)); - locationTable[RC_KAK_NEAR_WINDMILL_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 260), "Near Windmill Child Crate", "Kak Near Windmill Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE)); + locationTable[RC_KAK_NEAR_WINDMILL_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 601), "Near Windmill Child Crate", "Kak Near Windmill Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_WINDMILL_CHILD_CRATE)); locationTable[RC_KAK_NEAR_FENCE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_FENCE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1170, 111), "Near Fence Child Crate", "Kak Near Fence Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_FENCE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-60, -46), "Near Boarding House Child Crate", "Kak Near Boarding House Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE)); locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", "Kak Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); From d1a10a7ea99f7e2197afa9fa3e868dbf293cb190 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 21:02:42 -0500 Subject: [PATCH 15/52] add gv child crates + make exceptions for OOB GF crates + fix GF rht name --- .../hint_list/hint_list_exclude_overworld.cpp | 2 +- .../Enhancements/randomizer/ShuffleCrates.cpp | 10 ++++- .../Enhancements/randomizer/hook_handlers.cpp | 2 +- .../Enhancements/randomizer/location_list.cpp | 44 ++++++++++--------- .../Enhancements/randomizer/randomizerTypes.h | 6 ++- .../Enhancements/randomizer/randomizer_inf.h | 4 ++ 6 files changed, 43 insertions(+), 25 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index ae0877db17e..505ccbaf222 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -1954,7 +1954,7 @@ void StaticData::HintTable_Init_Exclude_Overworld() { /*german*/ "", /*french*/ "", { QM_RED, QM_GREEN })); - hintTextTable[RHT_CRATE_GERUDO_FORTRESS] = HintText(CustomMessage("They say that a #crate in Gerudo Fortress# contains #[[1]]#.", + hintTextTable[RHT_CRATE_GERUDOS_FORTRESS] = HintText(CustomMessage("They say that a #crate in Gerudo Fortress# contains #[[1]]#.", /*german*/ "", /*french*/ "", { QM_RED, QM_GREEN })); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 0f6850a721e..9cc645e178f 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -61,10 +61,12 @@ void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* pl void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); - if (actor->id != ACTOR_OBJ_KIBAKO2) return; + if (actor->id != ACTOR_OBJ_KIBAKO2 || + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) || + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429)) + return; ObjKibako2* crateActor = static_cast(actorRef); - //s16 respawnData = gSaveContext.respawn[RESPAWN_MODE_RETURN].data & ((1 << 8) - 1); crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); } @@ -79,6 +81,8 @@ void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; *should = false; + } else { + *should = true; } } @@ -88,6 +92,8 @@ void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); *should = false; + } else { + *should = true; } } diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index a99484a81ff..4d9f21d1840 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -2497,7 +2497,7 @@ void RandomizerRegisterHooks() { ShuffleFairies_RegisterHooks(); } - if (RAND_GET_OPTION(RSK_SHUFFLE_CRATES)) { + if (RAND_GET_OPTION(RSK_SHUFFLE_CRATES) != RO_SHUFFLE_CRATES_OFF) { shuffleCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako2_RandomizerInit); shuffleCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleCrates_OnVanillaBehaviorHandler); } diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 57479998e81..4606a28a070 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1620,27 +1620,31 @@ void Rando::StaticData::InitLocationTable() { // // Crates 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", "GV Freestanding PoH Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_FREESTANDING_POH_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", "GF Outside Center Crate 1", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_1)); 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", "GV Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE)); - 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", "GF Outside Center Crate 2", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2)); - 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", "GF Above Jail Crate", RHT_CRATE_GERUDO_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); - 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(315, -1782), "Outside Center Crate 3", "GF Outside Center Crate 3", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3)); - 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", "GF Outside Left Crate 1", RHT_CRATE_GERUDO_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", "GF Outside Left Crate 2", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_LEFT_CRATE_2)); - 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(315, -1842), "Outside Center Crate 4", "GF Outside Center Crate 4", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_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", "GF Archery Range Crate 1", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1)); - 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", "GF Archery Range Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 3", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 4", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_4)); - 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", "GF Archery Range Crate 5", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 6", RHT_CRATE_GERUDO_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", "GF Archery Range Crate 7", RHT_CRATE_GERUDO_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", "GF Near Archery Start Crate 1", RHT_CRATE_GERUDO_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", "GF Near Archery Start Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Left End Crate 1", RHT_CRATE_GERUDO_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", "GF Archery Left End Crate 2", RHT_CRATE_GERUDO_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", "GF Archery Right End Crate 1", RHT_CRATE_GERUDO_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", "GF Archery Right End Crate 2", RHT_CRATE_GERUDO_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2)); + locationTable[RC_GV_CRATE_BRIDGE_1] = Location::Crate(RC_GV_CRATE_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-764, 148), "Near Bridge Crate 1", "GV Near Bridge Crate 1", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_1)); + locationTable[RC_GV_CRATE_BRIDGE_2] = Location::Crate(RC_GV_CRATE_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -125), "Near Bridge Crate 2", "GV 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::Crate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", "GV 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::Crate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", "GV Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4)); + 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", "GF 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", "GF 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", "GF 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(315, -1782), "Outside Center Crate 3", "GF 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(315, -1842), "Outside Center Crate 4", "GF 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", "GF 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", "GF 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_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", "GF 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_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", "GF 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", "GF 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", "GF 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_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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF Kitchen Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 3", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3)); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 6a70b09959c..57cf8fa2954 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2337,6 +2337,10 @@ typedef enum { //Overworld Crates RC_GV_FREESTANDING_POH_CRATE, RC_GV_NEAR_COW_CRATE, + RC_GV_CRATE_BRIDGE_1, + RC_GV_CRATE_BRIDGE_2, + 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, @@ -4984,7 +4988,7 @@ typedef enum { RHT_POT_ICE_CAVERN, // Shuffle Crates RHT_CRATE_GERUDO_VALLEY, - RHT_CRATE_GERUDO_FORTRESS, + RHT_CRATE_GERUDOS_FORTRESS, RHT_CRATE_THIEVES_HIDEOUT, RHT_CRATE_WASTELAND, RHT_CRATE_MARKET, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index bcb9e12bbbd..9bb489e3fa4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -747,6 +747,10 @@ typedef enum { RAND_INF_GV_FREESTANDING_POH_CRATE, RAND_INF_GV_NEAR_COW_CRATE, + RAND_INF_GV_CRATE_BRIDGE_1, + RAND_INF_GV_CRATE_BRIDGE_2, + 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, From 12f8c2c56e1623b830fd2bbcab44d0a73a3b9cb6 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 22:20:14 -0500 Subject: [PATCH 16/52] finish adding gv crates + align GF child crates + fix adult GF locs --- .../Enhancements/randomizer/ShuffleCrates.cpp | 45 +++++++++++++++++++ .../overworld/gerudo_valley.cpp | 11 +++-- .../Enhancements/randomizer/location_list.cpp | 4 +- .../Enhancements/randomizer/randomizer.cpp | 11 +++-- 4 files changed, 63 insertions(+), 8 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 9cc645e178f..395264d5424 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -32,6 +32,26 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_NONE, + AT_NONE, + AC_ON | AC_TYPE_PLAYER, + OC1_NONE, + OC2_TYPE_2, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK0, + { 0x00000000, 0x00, 0x00 }, + { 0x40000040, 0x00, 0x00 }, + TOUCH_NONE, + BUMP_ON, + OCELEM_NONE, + }, + { 31, 48, 0, { 0, 0, 0 } }, +}; + uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); @@ -58,6 +78,29 @@ void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* pl item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); } +void ObjKibako2_MoveForRandomizer(ObjKibako2* objKibako2, PlayState* play) { + bool moved = false; + + // Move misaligned child crates in Gerudo Fortress + if (play->sceneNum == SCENE_GERUDOS_FORTRESS && gPlayState->linkAgeOnLoad == 1 && objKibako2->dyna.actor.world.pos.x == 310) { + if (objKibako2->dyna.actor.world.pos.z == -1830) { + objKibako2->dyna.actor.world.pos.z = -1842.0f; + moved = true; + } else if (objKibako2->dyna.actor.world.pos.z == -1770) { + objKibako2->dyna.actor.world.pos.z = -1782.0f; + moved = true; + } + } + + if (moved) { + // Reposition collider + Collider_InitCylinder(play, &objKibako2->collider); + Collider_SetCylinder(play, &objKibako2->collider, &objKibako2->dyna.actor, &sCylinderInit); + Collider_UpdateCylinder(&objKibako2->dyna.actor, &objKibako2->collider); + ; + } +} + void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); @@ -68,6 +111,8 @@ void ObjKibako2_RandomizerInit(void* actorRef) { ObjKibako2* crateActor = static_cast(actorRef); + ObjKibako2_MoveForRandomizer(crateActor, gPlayState); + crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); } diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index 88fd1e858a2..7a605b46438 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -53,9 +53,9 @@ void RegionTable_Init_GerudoValley() { areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), - LOCATION(RC_GV_FREESTANDING_POH_CRATE, true), - LOCATION(RC_GV_NEAR_COW_CRATE, true), + LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), + LOCATION(RC_GV_FREESTANDING_POH_CRATE, true), + LOCATION(RC_GV_NEAR_COW_CRATE, true), }, { //Exits Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), @@ -68,6 +68,11 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)), LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), + LOCATION(RC_GV_CRATE_BRIDGE_1, true), + LOCATION(RC_GV_CRATE_BRIDGE_2, true), + LOCATION(RC_GV_CRATE_BRIDGE_3, true), + LOCATION(RC_GV_CRATE_BRIDGE_4, true), + }, { //Exits Entrance(RR_GERUDO_FORTRESS, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 4606a28a070..3d31eb00d04 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1628,8 +1628,8 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF 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", "GF 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", "GF 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(315, -1782), "Outside Center Crate 3", "GF 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(315, -1842), "Outside Center Crate 4", "GF Outside Center Crate 4", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_4)); + 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", "GF 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", "GF 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", "GF 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", "GF 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_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", "GF Archery Range Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ARCHERY_RANGE_CRATE_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 97220d2f299..0268ccee0bc 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1549,8 +1549,12 @@ std::map rcToRandomizerInf = { { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1 }, { RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2 }, // Crates - { RC_GV_FREESTANDING_POH_CRATE, RAND_INF_GV_FREESTANDING_POH_CRATE, }, + { RC_GV_FREESTANDING_POH_CRATE, RAND_INF_GV_FREESTANDING_POH_CRATE, }, { RC_GV_NEAR_COW_CRATE, RAND_INF_GV_NEAR_COW_CRATE, }, + { RC_GV_CRATE_BRIDGE_1, RAND_INF_GV_CRATE_BRIDGE_1, }, + { RC_GV_CRATE_BRIDGE_2, RAND_INF_GV_CRATE_BRIDGE_2, }, + { RC_GV_CRATE_BRIDGE_3, RAND_INF_GV_CRATE_BRIDGE_3, }, + { RC_GV_CRATE_BRIDGE_4, RAND_INF_GV_CRATE_BRIDGE_4, }, { RC_GF_ABOVE_JAIL_CRATE, RAND_INF_GF_ABOVE_JAIL_CRATE, }, { RC_GF_OUTSIDE_CENTER_CRATE_1, RAND_INF_GF_OUTSIDE_CENTER_CRATE_1, }, { RC_GF_OUTSIDE_CENTER_CRATE_2, RAND_INF_GF_OUTSIDE_CENTER_CRATE_2, }, @@ -2055,8 +2059,9 @@ CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { struct CrateIdentity crateIdentity; uint32_t crateSceneNum = sceneNum; - if (sceneNum == SCENE_GANONDORF_BOSS) { - crateSceneNum = SCENE_GANONS_TOWER; + // pretend night is day to align crates in market and align GF child/adult crates + if (sceneNum == SCENE_MARKET_NIGHT) { + crateSceneNum = SCENE_MARKET_DAY; } crateIdentity.randomizerInf = RAND_INF_MAX; From d4c78ce679f9ddb08d11665ac0311ae326dc36b2 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 23:15:14 -0500 Subject: [PATCH 17/52] fix VB draw + adjust color --- soh/soh/Enhancements/randomizer/ShuffleCrates.cpp | 2 +- soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 395264d5424..5e6113da5da 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -19,7 +19,7 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - gDPSetGrayscaleColor(POLY_OPA_DISP++, 175, 255, 0, 255); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 255, 175, 0, 255); if (Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) == 0) { gSPGrayscale(POLY_OPA_DISP++, true); diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index 45aee999d6e..a83ed5680bb 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -182,8 +182,6 @@ void ObjKibako2_Update(Actor* thisx, PlayState* play) { void ObjKibako2_Draw(Actor* thisx, PlayState* play) { if (!GameInteractor_Should(VB_CRATE_SETUP_DRAW, false, thisx)) { - return; - } - + } Gfx_DrawDListOpa(play, gLargeCrateDL); } From 290a77607804ab42a1ae62f767ce7b55cbf9ff20 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Thu, 23 Jan 2025 23:21:56 -0500 Subject: [PATCH 18/52] begin logic --- soh/soh/Enhancements/randomizer/logic.cpp | 4 ++++ soh/soh/Enhancements/randomizer/logic.h | 1 + 2 files changed, 5 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 1be61ccae93..750e9838d60 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1026,6 +1026,10 @@ namespace Rando { return true; } + bool Logic::CanBreakCrates() { + return true; + } + bool Logic::HasExplosives(){ return CanUse(RG_BOMB_BAG) || CanUse(RG_BOMBCHU_5); } diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index ea9d5180159..05356543ea0 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -238,6 +238,7 @@ class Logic { bool CanBreakUpperBeehives(); bool CanBreakLowerBeehives(); bool CanBreakPots(); + bool CanBreakCrates(); bool HasFireSource(); bool HasFireSourceWithTorch(); bool TradeQuestStep(RandomizerGet rg); From 4a1d49b0eb2432398254503b7a96176be83c0b90 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 00:06:57 -0500 Subject: [PATCH 19/52] add child archery crate + overworld logic --- .../location_access/gerudo_fortress.cpp | 67 ++++++++++--------- .../overworld/death_mountain_crater.cpp | 4 +- .../overworld/gerudo_valley.cpp | 14 ++-- .../location_access/overworld/goron_city.cpp | 2 +- .../location_access/overworld/graveyard.cpp | 4 +- .../overworld/haunted_wasteland.cpp | 10 +-- .../location_access/overworld/kakariko.cpp | 36 +++++----- .../location_access/overworld/lake_hylia.cpp | 4 +- .../overworld/lon_lon_ranch.cpp | 2 +- .../location_access/overworld/market.cpp | 20 +++--- .../Enhancements/randomizer/location_list.cpp | 37 +++++----- .../Enhancements/randomizer/randomizerTypes.h | 1 + .../Enhancements/randomizer/randomizer_inf.h | 1 + 13 files changed, 103 insertions(+), 99 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index a299e917dfe..744425a9b1e 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -42,39 +42,40 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_2, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_3, logic->CanBreakPots()), LOCATION(RC_GF_SOUTH_F1_CARPENTER_CELL_POT_4, logic->CanBreakPots()), - LOCATION(RC_GF_ABOVE_JAIL_CRATE, true), - LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_1, true), - LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, true), - LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, true), - LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, true), - LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, true), - LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_4, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_5, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_6, true), - LOCATION(RC_GF_ARCHERY_RANGE_CRATE_7, true), - LOCATION(RC_GF_ARCHERY_START_CRATE_1, true), - LOCATION(RC_GF_ARCHERY_START_CRATE_2, true), - LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, true), - LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, true), - LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, true), - LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, true), - LOCATION(RC_GF_KITCHEN_CRATE_1, true), - LOCATION(RC_GF_KITCHEN_CRATE_2, true), - LOCATION(RC_GF_KITCHEN_CRATE_3, true), - LOCATION(RC_GF_KITCHEN_CRATE_4, true), - LOCATION(RC_GF_KITCHEN_CRATE_5, true), - LOCATION(RC_GF_BREAK_ROOM_CRATE_1, true), - LOCATION(RC_GF_BREAK_ROOM_CRATE_2, true), - LOCATION(RC_GF_BREAK_ROOM_CRATE_3, true), - LOCATION(RC_GF_BREAK_ROOM_CRATE_4, true), - LOCATION(RC_GF_NORTH_F1_CARPENTER_CRATE, true), - LOCATION(RC_GF_NORTH_F3_CARPENTER_CRATE, true), - LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, true), - LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, true), + LOCATION(RC_GF_ABOVE_JAIL_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_4, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_5, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_6, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RANGE_CRATE_7, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_START_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_START_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, logic->IsChild && logic->HasExplosives()), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_3, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_4, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_KITCHEN_CRATE_5, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_3, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_BREAK_ROOM_CRATE_4, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_F1_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_NORTH_F3_CARPENTER_CRATE, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_GF_SOUTH_F2_CARPENTER_CRATE_2, logic->CanBreakCrates()), //RANDOTODO doublecheck when GF isn't a blob diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp index 7ae645e5965..100b1c3e981 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/death_mountain_crater.cpp @@ -17,11 +17,11 @@ void RegionTable_Init_DeathMountainCrater() { }, { //Locations LOCATION(RC_DMC_WALL_FREESTANDING_POH, logic->FireTimer() >= 16 || logic->Hearts() >= 3), - LOCATION(RC_DMC_GS_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanAttack()), + LOCATION(RC_DMC_GS_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanAttack() && logic->CanBreakCrates()), LOCATION(RC_DMC_GOSSIP_STONE_FAIRY, logic->CallGossipFairyExceptSuns() && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS) && logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), LOCATION(RC_DMC_GOSSIP_STONE, logic->HasExplosives() && (logic->FireTimer() >= 16 || logic->Hearts() >= 3)), - LOCATION(RC_DMC_CRATE, true), + LOCATION(RC_DMC_CRATE, (logic->FireTimer() >= 8 || logic->Hearts() >= 3) && logic->IsChild && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index 7a605b46438..b7ee0952b12 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -53,9 +53,9 @@ void RegionTable_Init_GerudoValley() { areaTable[RR_GV_CRATE_LEDGE] = Region("GV Crate Ledge", "Gerudo Valley", {RA_GERUDO_VALLEY}, DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_GV_CRATE_FREESTANDING_POH, true), - LOCATION(RC_GV_FREESTANDING_POH_CRATE, true), - LOCATION(RC_GV_NEAR_COW_CRATE, true), + LOCATION(RC_GV_CRATE_FREESTANDING_POH, logic->CanBreakCrates()), + LOCATION(RC_GV_FREESTANDING_POH_CRATE, logic->CanBreakCrates()), + LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), @@ -68,10 +68,10 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)), LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), - LOCATION(RC_GV_CRATE_BRIDGE_1, true), - LOCATION(RC_GV_CRATE_BRIDGE_2, true), - LOCATION(RC_GV_CRATE_BRIDGE_3, true), - LOCATION(RC_GV_CRATE_BRIDGE_4, true), + LOCATION(RC_GV_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_3, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp index f871602f56f..5a68431df07 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/goron_city.cpp @@ -32,7 +32,7 @@ void RegionTable_Init_GoronCity() { LOCATION(RC_GC_UPPER_STAIRCASE_POT_1, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_2, logic->CanBreakPots()), LOCATION(RC_GC_UPPER_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_GC_MAZE_CRATE, true), + LOCATION(RC_GC_MAZE_CRATE, logic->BlastOrSmash() || (logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanBreakCrates())), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index 05bd2c73f61..8a7037919d9 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -11,14 +11,14 @@ void RegionTable_Init_Graveyard() { EventAccess(&logic->BugRock, []{return true;}), }, { //Locations - LOCATION(RC_GRAVEYARD_FREESTANDING_POH, (logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT) || (ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_GRAVEYARD_FREESTANDING_POH, (((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()) || (ctx->GetTrickOption(RT_GY_POH) && logic->CanUse(RG_BOOMERANG))), LOCATION(RC_GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR, logic->HasItem(RG_CHILD_WALLET) && logic->IsChild && logic->AtNight), //TODO: This needs to change LOCATION(RC_GRAVEYARD_GS_WALL, logic->IsChild && logic->HookshotOrBoomerang() && logic->AtNight && logic->CanGetNightTimeGS()), LOCATION(RC_GRAVEYARD_GS_BEAN_PATCH, logic->CanSpawnSoilSkull() && logic->CanAttack()), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_1, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_2, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GRAVEYARD_BEAN_SPROUT_FAIRY_3, logic->IsChild && logic->CanUse(RG_MAGIC_BEAN) && logic->CanUse(RG_SONG_OF_STORMS)), - LOCATION(RC_GRAVEYARD_CRATE, true), + LOCATION(RC_GRAVEYARD_CRATE, ((logic->IsAdult && CanPlantBean(RR_THE_GRAVEYARD)) || logic->CanUse(RG_LONGSHOT)) && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp index 27d65dfad60..ef996a97034 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp @@ -7,7 +7,7 @@ void RegionTable_Init_HauntedWasteland() { areaTable[RR_WASTELAND_NEAR_FORTRESS] = Region("Wasteland Near Fortress", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, true), + LOCATION(RC_HW_BEFORE_QUICKSAND_CRATE, logic->CanBreakCrates()), }, { //Exits @@ -29,9 +29,9 @@ void RegionTable_Init_HauntedWasteland() { LOCATION(RC_WASTELAND_NEAR_GS_POT_2, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_3, logic->CanBreakPots()), LOCATION(RC_WASTELAND_NEAR_GS_POT_4, logic->CanBreakPots()), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, true), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, true), - LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, true), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, logic->CanBreakCrates()), }, { //Exits @@ -42,7 +42,7 @@ void RegionTable_Init_HauntedWasteland() { areaTable[RR_WASTELAND_NEAR_COLOSSUS] = Region("Wasteland Near Colossus", "Haunted Wasteland", {RA_HAUNTED_WASTELAND}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, true), + LOCATION(RC_HW_NEAR_COLOSSUS_CRATE, logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index 8c6f9b6950b..82e1b428b84 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -30,24 +30,24 @@ void RegionTable_Init_Kakariko() { LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_KAK_NEAR_GUARDS_HOUSE_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, true), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, true), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, true), - LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, true), - LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, true), - LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, true), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, true), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, true), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, true), - LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, true), - LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, true), - LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, true), - LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, true), - LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, true), - LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, true), - LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, true), - LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, true), - LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, true), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_4, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_POTION_SHOP_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_SHOOTING_GALLERY_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_IMPAS_HOUSE_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_1, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_ADULT_CRATE_2, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_BEHIND_GS_HOUSE_ADULT_CRATE, logic->IsAdult && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_GY_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_WINDMILL_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_FENCE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BOARDING_HOUSE_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index cbd596c5421..62b03d8fdd4 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -64,11 +64,11 @@ void RegionTable_Init_LakeHylia() { //Locations LOCATION(RC_LH_LAB_DIVE, logic->HasItem(RG_GOLDEN_SCALE) || (ctx->GetTrickOption(RT_LH_LAB_DIVING) && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT))), LOCATION(RC_LH_TRADE_FROG, logic->IsAdult && logic->CanUse(RG_EYEBALL_FROG)), - LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_LH_GS_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_HOOKSHOT) && logic->CanBreakCrates()), LOCATION(RC_LH_LAB_FRONT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), - LOCATION(RC_LH_LAB_CRATE, true), + LOCATION(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp index 507e4350fa7..a817b701d27 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp @@ -22,7 +22,7 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_RAIN_SHED_POT_1, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()), - LOCATION(RC_LLR_NEAR_TREE_CRATE, true), + LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index edaf8b9bb5a..38511357184 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -14,10 +14,10 @@ void RegionTable_Init_Market() { areaTable[RR_THE_MARKET] = Region("Market", "Market", {RA_THE_MARKET}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_MK_NEAR_BAZAAR_CRATE_1, true), - LOCATION(RC_MK_NEAR_BAZAAR_CRATE_2, true), - LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, true), - LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, true), + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_NEAR_BAZAAR_CRATE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_SHOOTING_GALLERY_CRATE_2, logic->IsChild && logic->CanBreakCrates()), }, { //Exits @@ -104,11 +104,11 @@ void RegionTable_Init_Market() { LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_9, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_10, logic->IsAdult && logic->CanBreakPots()), LOCATION(RC_MK_GUARD_HOUSE_ADULT_POT_11, logic->IsAdult && logic->CanBreakPots()), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, true), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, true), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, true), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, true), - LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, true), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_3, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_4, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_MK_GUARD_HOUSE_CRATE_5, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_MARKET_ENTRANCE, []{return logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY);}), @@ -213,7 +213,7 @@ void RegionTable_Init_Market() { areaTable[RR_MARKET_DOG_LADY_HOUSE] = Region("Market Dog Lady House", "Market Dog Lady House", {}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_MARKET_LOST_DOG, logic->IsChild && logic->AtNight), - LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, true), + LOCATION(RC_MK_LOST_DOG_HOUSE_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_MARKET_BACK_ALLEY, []{return logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY);}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 3d31eb00d04..c8c6e369948 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1632,19 +1632,20 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF 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", "GF 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", "GF 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_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", "GF 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_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", "GF 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", "GF 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", "GF 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_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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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_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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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_LEFT_END_CHILD_CRATE] = Location::Crate(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", "GF 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_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", "GF 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", "GF 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", "GF Kitchen Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 3", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3)); @@ -1658,11 +1659,11 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF North F3 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 2", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2)); - 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", "HW 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", "HW 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", "HW After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); - locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", "HW After Quicksand Crate 3", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); - locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", "HW Near Colossus Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_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", "HW 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", "HW 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", "HW After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); + locationTable[RC_HW_AFTER_QUICKSAND_CRATE_3] = Location::Crate(RC_HW_AFTER_QUICKSAND_CRATE_3, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(3026, 2631), "After Quicksand Crate 3", "HW After Quicksand Crate 3", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_3)); + locationTable[RC_HW_NEAR_COLOSSUS_CRATE] = Location::Crate(RC_HW_NEAR_COLOSSUS_CRATE, RCQUEST_BOTH, RCAREA_WASTELAND, SCENE_HAUNTED_WASTELAND, TWO_ACTOR_PARAMS(-1531, -976), "Near Colossus Crate", "HW Near Colossus Crate", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_NEAR_COLOSSUS_CRATE)); locationTable[RC_MK_NEAR_BAZAAR_CRATE_1] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 338), "Near Bazaar Crate 1", "MK Near Bazaar Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_1)); locationTable[RC_MK_NEAR_BAZAAR_CRATE_2] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 132), "Near Bazaar Crate 2", "MK Near Bazaar Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2)); locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-150, -576), "Shooting Gallery Crate 1", "MK Shooting Gallery Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 57cf8fa2954..57491fc34bd 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2359,6 +2359,7 @@ typedef enum { 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, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 9bb489e3fa4..242b2ea061c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -769,6 +769,7 @@ typedef enum { 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, From b2fbf300bdf623e46c50392c3a43b7a30546f397 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:46:30 -0500 Subject: [PATCH 20/52] deku + dc + rename dc locs --- soh/soh/Enhancements/randomizer/dungeon.cpp | 27 ++++----- .../location_access/dungeons/deku_tree.cpp | 5 ++ .../dungeons/dodongos_cavern.cpp | 28 +++++++++- .../Enhancements/randomizer/location_list.cpp | 56 +++++++++---------- .../Enhancements/randomizer/randomizer.cpp | 28 +++++----- .../Enhancements/randomizer/randomizerTypes.h | 28 +++++----- .../Enhancements/randomizer/randomizer_inf.h | 28 +++++----- 7 files changed, 114 insertions(+), 86 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index ac66b7c35ea..464a2fe290a 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -348,13 +348,14 @@ Dungeons::Dungeons() { {}, { // MQ Crates - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, @@ -363,12 +364,12 @@ Dungeons::Dungeons() { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, }, {}, { diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp index 9d3febe36c7..f54edd8b1f2 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp @@ -175,6 +175,8 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_MAP_CHEST, true), LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -194,6 +196,9 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, logic->CanKillEnemy(RE_DEKU_BABA)), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, logic->HasFireSourceWithTorch() || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW))), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index 189d1c86714..0e39434ba21 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -302,6 +302,8 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()), }, { //Exits //This is possible with sticks and shield, igniting a first flower by "touch" then very quickly crouch stabbing in a way that cuts the corner to light the 3rd bomb on the other side, but that's a trick @@ -325,6 +327,10 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_STAIRS_LOWER, []{return true;}), @@ -379,8 +385,14 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_LARVAE_ROOM] = Region("Dodongos Cavern MQ Larvae Room", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, true), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts - LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, true), //implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, true), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts + LOCATION(RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, logic->CanBreakCrates()), //implied logic->CanKillEnemy(RE_GOLD_SKULTULLA) based on entry reqs. Add crate logic when BONKO is added + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_LOWER, []{return true;}), //implied logic->CanKillEnemy(RE_GOHMA_LARVA) based on entry reqs with a trick to kill with nuts @@ -405,6 +417,8 @@ void RegionTable_Init_DodongosCavern() { //Locations LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return true;}), @@ -458,7 +472,15 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), - }, { + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);});}), Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_LIZALFOS, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index c8c6e369948..232642582be 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1632,20 +1632,20 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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_LEFT_END_CHILD_CRATE] = Location::Crate(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", "GF 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_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", "GF 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", "GF 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_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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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_LEFT_END_CHILD_CRATE] = Location::Crate(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", "GF 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_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", "GF 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", "GF 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", "GF Kitchen Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 3", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_3)); @@ -1700,14 +1700,14 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", "Deku Tree MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", "Deku Tree MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Side Room Crate 1", "Dodongos Cavern MQ Side Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Side Room Crate 2", "Dodongos Cavern MQ Side Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Side Room Crate 3", "Dodongos Cavern MQ Side Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Side Room Crate 4", "Dodongos Cavern MQ Side Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Side Room Crate 5", "Dodongos Cavern MQ Side Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Side Room Crate 6", "Dodongos Cavern MQ Side Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Side Room Crate 7", "Dodongos Cavern MQ Side Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7)); - locationTable[RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Side Room Crate 8", "Dodongos Cavern MQ Side Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1886, -744), "MQ Poe Room Crate 1", "Dodongos Cavern MQ Poe Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1826, -744), "MQ Poe Room Crate 2", "Dodongos Cavern MQ Poe Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1391), "MQ Poe Room Crate 3", "Dodongos Cavern MQ Poe Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1536, -1451), "MQ Poe Room Crate 4", "Dodongos Cavern MQ Poe Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1824), "MQ Poe Room Crate 5", "Dodongos Cavern MQ Poe Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2267, -1884), "MQ Poe Room Crate 6", "Dodongos Cavern MQ Poe Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1161), "MQ Poe Room Crate 7", "Dodongos Cavern MQ Poe Room Crate 7", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7)); + locationTable[RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8] = Location::Crate(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2232, -1221), "MQ Poe Room Crate 8", "Dodongos Cavern MQ Poe Room Crate 8", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8)); locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1730, -1836), "MQ Staircase Lower Crate 1", "Dodongos Cavern MQ Staircase Lower Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1)); locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2190, -1835), "MQ Staircase Lower Crate 2", "Dodongos Cavern MQ Staircase Lower Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2)); locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1510, -1837), "MQ Staircase Upper Crate 1", "Dodongos Cavern MQ Staircase Upper Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1)); @@ -1716,12 +1716,12 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "MQ Staircase Upper Crate 4", "Dodongos Cavern MQ Staircase Upper Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4)); locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(3191, -897), "MQ Two Flames Crate 1", "Dodongos Cavern MQ Two Flames Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1)); locationTable[RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2776, -810), "MQ Two Flames Crate 2", "Dodongos Cavern MQ Two Flames Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Near Torch Puzzle Crate 1", "Dodongos Cavern MQ Near Torch Puzzle Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Near Torch Puzzle Crate 2", "Dodongos Cavern MQ Near Torch Puzzle Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Near Torch Puzzle Crate 3", "Dodongos Cavern MQ Near Torch Puzzle Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Near Torch Puzzle Crate 4", "Dodongos Cavern MQ Near Torch Puzzle Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Near Torch Puzzle Crate 5", "Dodongos Cavern MQ Near Torch Puzzle Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5)); - locationTable[RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Near Torch Puzzle Crate 6", "Dodongos Cavern MQ Near Torch Puzzle Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1714), "MQ Larvae Room Crate 1", "Dodongos Cavern MQ Larvae Room Crate 1", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(2055, -1774), "MQ Larvae Room Crate 2", "Dodongos Cavern MQ Larvae Room Crate 2", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1871, -1976), "MQ Larvae Room Crate 3", "Dodongos Cavern MQ Larvae Room Crate 3", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Larvae Room Crate 4", "Dodongos Cavern MQ Larvae Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Larvae Room Crate 5", "Dodongos Cavern MQ Larvae Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Larvae Room Crate 6", "Dodongos Cavern MQ Larvae Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 0268ccee0bc..76cd6e64051 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1630,14 +1630,14 @@ std::map rcToRandomizerInf = { { RC_DEKU_TREE_MQ_LOBBY_CRATE, RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, }, { RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, }, { RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, }, - { RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, }, + { RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, }, { RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, }, { RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, }, { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, }, @@ -1646,12 +1646,12 @@ std::map rcToRandomizerInf = { { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, }, { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, }, { RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, }, - { RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, }, + { RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, }, { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, }, { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, }, { RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, }, diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 57491fc34bd..5780844b3a3 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2418,14 +2418,14 @@ typedef enum { RC_DEKU_TREE_MQ_LOBBY_CRATE, RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, - RC_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, @@ -2434,12 +2434,12 @@ typedef enum { RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, - RC_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 242b2ea061c..6fde8758e71 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -827,14 +827,14 @@ typedef enum { RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_1, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_2, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_3, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_4, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_5, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_6, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_7, - RAND_INF_DODONGOS_CAVERN_MQ_SIDE_ROOM_CRATE_8, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, + RAND_INF_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, @@ -843,12 +843,12 @@ typedef enum { RAND_INF_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_4, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, RAND_INF_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_1, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_2, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_3, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_4, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_5, - RAND_INF_DODONGOS_CAVERN_MQ_NEAR_TORCH_PUZZLE_CRATE_6, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_1, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_2, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_3, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, + RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, From f9ae4c66ea68e1c5868266a06f2c7b0c72a8dff2 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:02:27 -0500 Subject: [PATCH 21/52] gtg + spirit --- .../dungeons/gerudo_training_ground.cpp | 6 +++++- .../location_access/dungeons/spirit_temple.cpp | 14 ++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp index b2e09a8c2d6..6ad29dd9eb3 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp @@ -151,7 +151,11 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_MQ_MAZE_CENTER] = Region("Gerudo Training Ground MQ Center", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQGTGMazeSwitch, []{return logic->CanUse(RG_MEGATON_HAMMER);}), - }, {}, { + }, + { //Locations + LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_MAZE_FIRST_LOCK, []{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUND, 3);}), }); diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp index 8b8b4d46585..f2dbcd8459d 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -283,6 +283,8 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, [] { return logic->CanBreakCrates();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), }, { //Exits //we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access @@ -506,10 +508,14 @@ void RegionTable_Init_SpiritTemple() { areaTable[RR_SPIRIT_TEMPLE_MQ_BIG_MIRROR_ROOM] = Region("Spirit Temple MQ Big Mirror Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, logic->CanBreakPots()), - LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_4F_CENTRAL, []{return true;}), From b3bae9a6094ae1865f6d3ca3bb4fd2e54e18a2d0 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 09:47:10 -0500 Subject: [PATCH 22/52] fire temple logic --- .../location_access/dungeons/fire_temple.cpp | 40 +++++++++++++++---- .../Enhancements/randomizer/location_list.cpp | 6 +-- 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index 65efe4cfebc..30d6cc7cb5f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -429,7 +429,10 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_NEAR_BOSS_ROOM] = Region("Fire Temple MQ Near Boss Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations //If we're using the south torch as the initial torch, or using FAs, we either have to cross to the north to remove the crate, or use a trick to ignore it - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->FireTimer() > 25 && ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW)))) + LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->FireTimer() > 25 && ctx->GetTrickOption(RT_FIRE_MQ_NEAR_BOSS) && (logic->CanUse(RG_FIRE_ARROWS) || (logic->IsAdult && logic->CanUse(RG_DINS_FIRE) && logic->CanUse(RG_FAIRY_BOW)))), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, logic->FireTimer() > 25 && logic->CanBreakCrates()), + }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_FIRST_ROOM_UPPER, []{return true;}), @@ -449,9 +452,15 @@ void RegionTable_Init_FireTemple() { //Fairies cannot be used for this as it is time sensetive, and NL is only useful with sticks as it disables other magic while in use, so it's tunic or raw damage taking ability. //testing tells me you take 3 ticks of lava damage, which is 12 internal damage or 3/4 of a heart at x1 damage multiplier, performing this run //logic->EffectiveHealth() works in half hearts for whatever reason, meaning this needs a deeper refactor to be perfect, but it should be good enough for now - LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_GORON_TUNIC) || logic->EffectiveHealth() >= 2 || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_STICKS))))))), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_LONGSHOT) || (logic->IsAdult && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_GORON_TUNIC) || logic->EffectiveHealth() >= 2 || (logic->CanUse(RG_NAYRUS_LOVE) && logic->CanUse(RG_STICKS))))))), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, logic->FireTimer() > 25 && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_NEAR_BOSS_ROOM, []{return true;}), @@ -522,6 +531,9 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), @@ -544,6 +556,9 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE] = Region("Fire Temple MQ Upper Maze Box Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), //Assumes maze access LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()), }, { @@ -562,7 +577,13 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT_CAGE] = Region("Fire Temple MQ Maze Shortcut Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, logic->OpenedUpperFireShortcut;), + LOCATION(RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, logic->OpenedUpperFireShortcut;), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_1, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_2, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_3, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_4, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_5, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_SHORTCUT_CRATE_6, logic->OpenedUpperFireShortcut && logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_MAZE_SHORTCUT, []{return logic->OpenedUpperFireShortcut;}), @@ -599,8 +620,13 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM] = Region("Fire Temple MQ High Torch Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 232642582be..978ac29bb61 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1722,9 +1722,9 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1811, -1976), "MQ Larvae Room Crate 4", "Dodongos Cavern MQ Larvae Room Crate 4", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_4)); locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1721), "MQ Larvae Room Crate 5", "Dodongos Cavern MQ Larvae Room Crate 5", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_5)); locationTable[RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6] = Location::Crate(RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6, RCQUEST_MQ, RCAREA_DODONGOS_CAVERN, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(1625, -1781), "MQ Larvae Room Crate 6", "Dodongos Cavern MQ Larvae Room Crate 6", RHT_CRATE_DODONGOS_CAVERN, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CRATE_6)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 769), "MQ Outside Boss Crate 1", "Fire Temple MQ Outside Boss Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1205, 709), "MQ Outside Boss Crate 2", "Fire Temple MQ Outside Boss Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1130, -654), "MQ Outside Boss Crate 3", "Fire Temple MQ Outside Boss Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_3)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1211, -775), "MQ Outside Boss Crate 4", "Fire Temple MQ Outside Boss Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_4)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -417), "MQ Outside Boss Crate 5", "Fire Temple MQ Outside Boss Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_5)); locationTable[RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6] = Location::Crate(RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-1457, -534), "MQ Outside Boss Crate 6", "Fire Temple MQ Outside Boss Crate 6", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_6)); From 608351051eb99620fa53a0f2932f442b91a67eef Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:04:11 -0500 Subject: [PATCH 23/52] start water temple + some renaming --- soh/soh/Enhancements/randomizer/dungeon.cpp | 16 ++--- .../location_access/dungeons/water_temple.cpp | 64 +++++++++++++++---- .../Enhancements/randomizer/location_list.cpp | 16 ++--- .../Enhancements/randomizer/randomizer.cpp | 16 ++--- .../Enhancements/randomizer/randomizerTypes.h | 16 ++--- .../Enhancements/randomizer/randomizer_inf.h | 16 ++--- 6 files changed, 93 insertions(+), 51 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 464a2fe290a..f79ad6cebc6 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -852,14 +852,14 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index ab206f6efed..b66110afe19 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -426,7 +426,10 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_HIGH] = Region("Water Temple MQ Central Pillar High", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQWaterOpenedPillarB1, []{return ((logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_DINS_FIRE)) || (ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS))) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslash()));}), - }, {}, { + }, { + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_ZORA_TUNIC);}), }); @@ -442,15 +445,36 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CENTRAL_PILLAR_B1_FINAL] = Region("Water Temple MQ Central Pillar B1 Final", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, logic->CanUse(RG_HOOKSHOT)), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_8, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_9, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_10, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_11, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_12, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_13, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_LOWER_CRATE_14, logic->CanBreakCrates()), }, {}); //Region exists to add crate/pot/box locations areaTable[RR_WATER_TEMPLE_MQ_STORAGE_ROOM] = Region("Water Temple MQ Storage Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}), @@ -461,6 +485,14 @@ void RegionTable_Init_WaterTemple() { LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), @@ -478,9 +510,17 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY] = Region("Water Temple MQ Lizalfos Hallway", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_ROOM_CRATE_5, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE, []{return logic->MQWaterLevel(WL_LOW_OR_MID) && logic->CanUse(RG_DINS_FIRE);}), @@ -496,9 +536,11 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_LIZALFOS_CAGE] = Region("Water Temple MQ Lizalfos Cage", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, logic->CanKillEnemy(RE_GOLD_SKULLTULA)), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, logic->CanKillEnemy(RE_GOLD_SKULLTULA)), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_GATE_CRATE_2, logic->CanBreakCrates()), }, {}); //This room exists to hold the wonderitems that drop from the emblems here. Specifically this assumes you are standing on the final ledge diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 978ac29bb61..ea90de6bd0f 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1778,14 +1778,14 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1374, -1036), "MQ Storage Room A Crate 5", "Water Temple MQ Storage Room A Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5)); locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1265, -1036), "MQ Storage Room A Crate 6", "Water Temple MQ Storage Room A Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6)); locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1205, -1036), "MQ Storage Room A Crate 7", "Water Temple MQ Storage Room A Crate 7", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ Before Upper Water Switch Lower Crate 1", "Water Temple MQ Before Upper Water Switch Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ Before Upper Water Switch Lower Crate 2", "Water Temple MQ Before Upper Water Switch Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ Before Upper Water Switch Lower Crate 3", "Water Temple MQ Before Upper Water Switch Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ Before Upper Water Switch Lower Crate 4", "Water Temple MQ Before Upper Water Switch Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ Before Upper Water Switch Lower Crate 5", "Water Temple MQ Before Upper Water Switch Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ Before Upper Water Switch Lower Crate 6", "Water Temple MQ Before Upper Water Switch Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ Before Upper Water Switch Upper Crate 2", "Water Temple MQ Before Upper Water Switch Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ Before Upper Water Switch Upper Crate 1", "Water Temple MQ Before Upper Water Switch Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-892, -91), "MQ GS Storage Room Lower Crate 1", "Water Temple MQ GS Storage Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1149, 173), "MQ GS Storage Room Lower Crate 2", "Water Temple MQ GS Storage Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1157, -221), "MQ GS Storage Room Lower Crate 3", "Water Temple MQ GS Storage Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-945, -315), "MQ GS Storage Room Lower Crate 4", "Water Temple MQ GS Storage Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, -141), "MQ GS Storage Room Lower Crate 5", "Water Temple MQ GS Storage Room Lower Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ GS Storage Room Lower Crate 6", "Water Temple MQ GS Storage Room Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ GS Storage Room Upper Crate 1", "Water Temple MQ GS Storage Room Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ GS Storage Room Upper Crate 2", "Water Temple MQ GS Storage Room Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2)); locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Before BK By Torches Crate 1", "Water Temple MQ Before BK By Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1)); locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Before BK By Torches Crate 2", "Water Temple MQ Before BK By Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2)); locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Before BK Submerged Crate 2", "Water Temple MQ Before BK Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 76cd6e64051..7e84c1ddb74 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1708,14 +1708,14 @@ std::map rcToRandomizerInf = { { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, }, { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, }, { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, }, { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, }, { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, }, { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, }, diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 5780844b3a3..77359252fbf 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2496,14 +2496,14 @@ typedef enum { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 6fde8758e71..00d3db9e050 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -905,14 +905,14 @@ typedef enum { RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_3, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_4, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_5, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_LOWER_CRATE_6, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_UPPER_WATER_SWITCH_UPPER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, From 643748da7b8f0739f2c047bf72aaccb92e2c546f Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 16:42:12 -0500 Subject: [PATCH 24/52] finish water temple + renames --- soh/soh/Enhancements/randomizer/dungeon.cpp | 40 +++---- .../location_access/dungeons/water_temple.cpp | 105 +++++++++++++++--- .../Enhancements/randomizer/location_list.cpp | 40 +++---- .../Enhancements/randomizer/randomizer.cpp | 40 +++---- .../Enhancements/randomizer/randomizerTypes.h | 40 +++---- .../Enhancements/randomizer/randomizer_inf.h | 40 +++---- 6 files changed, 188 insertions(+), 117 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index f79ad6cebc6..8de80457e3d 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -860,31 +860,31 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, - RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index b66110afe19..5133a654f34 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -427,6 +427,7 @@ void RegionTable_Init_WaterTemple() { //Events EventAccess(&logic->MQWaterOpenedPillarB1, []{return ((logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_DINS_FIRE)) || (ctx->GetTrickOption(RT_WATER_MQ_CENTRAL_PILLAR) && logic->CanUse(RG_FIRE_ARROWS))) && (logic->HasItem(RG_BRONZE_SCALE) || (logic->CanUse(RG_IRON_BOOTS) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslash()));}), }, { + //Locations LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_UPPER_CRATE_2, logic->CanBreakCrates()), }, { @@ -633,7 +634,15 @@ void RegionTable_Init_WaterTemple() { }); //This region assumes Iron boots to access - areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL] = Region("Water Temple MQ Dragon Room Tunnel", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL] = Region("Water Temple MQ Dragon Room Tunnel", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE, []{return logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT);}), @@ -643,13 +652,25 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_ALCOVE] = Region("Water Temple MQ Dragon Room Alcove", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, { //Events EventAccess(&logic->MQWaterDragonTorches, []{return true;}), - }, {}, { + }, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16;}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return logic->HasItem(RG_SILVER_SCALE);}), }); - areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR] = Region("Water Temple MQ Dragon Room Door", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_RIVER_POTS, []{return logic->CanUse(RG_LONGSHOT);}), Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_TUNNEL, []{return logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanUse(RG_HOOKSHOT);}), @@ -660,6 +681,7 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH] = Region("Water Temple MQ Boss Key Room Switch", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return true;}), @@ -668,7 +690,15 @@ void RegionTable_Init_WaterTemple() { }); //this exists for the crates in preparation for clips through the grate - areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT] = Region("Water Temple MQ Boss Key Room Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_PIT] = Region("Water Temple MQ Boss Key Room Pit", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH, []{return logic->CanHitSwitch(ED_BOOMERANG);}), }); @@ -694,7 +724,17 @@ void RegionTable_Init_WaterTemple() { Entrance(RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_CHEST, []{return logic->CanUse(RG_IRON_BOOTS) && logic->HasItem(RG_BRONZE_SCALE) && (logic->MQWaterLevel(WL_LOW) || logic->WaterTimer() >= 24);}) }); - areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_ROOM] = Region("Water Temple MQ Triangle Torch Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_1, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_2, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_3, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + }, + { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && ((logic->MQWaterLevel(WL_LOW) && logic->HasItem(RG_GOLDEN_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 40 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_LONGSHOT))));}), Entrance(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->CanUse(RG_FIRE_ARROWS) && ((logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)) || (logic->CanUse(RG_LONGSHOT) && Here(RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE, []{return logic->ScarecrowsSong();})));}) @@ -702,14 +742,30 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_TRIANGLE_TORCH_CAGE] = Region("Water Temple MQ Triangle Torch Cage", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG)), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, logic->CanBreakCrates()), }, {}); - areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM] = Region("Water Temple MQ Crates Whirlpools Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM] = Region("Water Temple MQ Crates Whirlpools Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + //Locations + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 16 && logic->CanBreakCrates()), + + }, + { //Exits //we can backflip over the spikes, but land in water. Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterB1Switch && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && (logic->CanUse(RG_LONGSHOT) || logic->HasItem(RG_BRONZE_SCALE));}), @@ -724,9 +780,15 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_SINGLE_STALFOS_ROOM] = Region("Water Temple MQ Single Stalfos Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, true), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_CRATE_5, logic->CanBreakCrates()), + }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_ROOM, []{return logic->HasItem(RG_SILVER_SCALE) || (logic->IsChild && logic->HasItem(RG_BRONZE_SCALE)) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8 && (logic->HasItem(RG_BRONZE_SCALE) || logic->CanUse(RG_HOOKSHOT)));}) @@ -740,8 +802,13 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_DODONGO_ROOM] = Region("Water Temple MQ Dodongo Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_4_TORCH_ROOM, []{return (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS)) && Here(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return logic->CanKillEnemy(RE_DODONGO, ED_CLOSE, true, 5);});}), @@ -750,7 +817,11 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_CRATES_WHIRLPOOLS_CAGE] = Region("Water Temple MQ Basement Gated Areas", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), + LOCATION(RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA) && logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, logic->CanBreakCrates()), }, { Entrance(RR_WATER_TEMPLE_MQ_DODONGO_ROOM, []{return true;}) }); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index ea90de6bd0f..58b1c767c2b 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1786,31 +1786,31 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1103, -315), "MQ GS Storage Room Lower Crate 6", "Water Temple MQ GS Storage Room Lower Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6)); locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-884, 65), "MQ GS Storage Room Upper Crate 1", "Water Temple MQ GS Storage Room Upper Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1)); locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1150, 56), "MQ GS Storage Room Upper Crate 2", "Water Temple MQ GS Storage Room Upper Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Before BK By Torches Crate 1", "Water Temple MQ Before BK By Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Before BK By Torches Crate 2", "Water Temple MQ Before BK By Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Before BK Submerged Crate 2", "Water Temple MQ Before BK Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Before BK Submerged Crate 3", "Water Temple MQ Before BK Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Before BK Submerged Crate 4", "Water Temple MQ Before BK Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Before BK Submerged Crate 1", "Water Temple MQ Before BK Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Before BK By Door Crate 1", "Water Temple MQ Before BK By Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Before BK By Door Crate 2", "Water Temple MQ Before BK By Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1918), "MQ Dragon Room Torches Crate 1", "Water Temple MQ Dragon Room Torches Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2196, -1978), "MQ Dragon Room Torches Crate 2", "Water Temple MQ Dragon Room Torches Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1718, -2006), "MQ Dragon Room Submerged Crate 1", "Water Temple MQ Dragon Room Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1778, -2006), "MQ Dragon Room Submerged Crate 2", "Water Temple MQ Dragon Room Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1912), "MQ Dragon Room Submerged Crate 3", "Water Temple MQ Dragon Room Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1997, -1972), "MQ Dragon Room Submerged Crate 4", "Water Temple MQ Dragon Room Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1092, -1926), "MQ Dragon Room Door Crate 1", "Water Temple MQ Dragon Room Door Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1153, -1926), "MQ Dragon Room Door Crate 2", "Water Temple MQ Dragon Room Door Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2)); locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1257, -1567), "MQ BK Room Upper Crate", "Water Temple MQ BK Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE)); locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1289, -1205), "MQ BK Room Lower Crate 1", "Water Temple MQ BK Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1)); locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-985, -1333), "MQ BK Room Lower Crate 2", "Water Temple MQ BK Room Lower Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2)); locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1297, -1300), "MQ BK Room Lower Crate 3", "Water Temple MQ BK Room Lower Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3)); locationTable[RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1069, -1402), "MQ BK Room Lower Crate 4", "Water Temple MQ BK Room Lower Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Key Area Front Crate 2", "Water Temple MQ Key Area Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Key Area Front Crate 1", "Water Temple MQ Key Area Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Key Area Submerged Crate 1", "Water Temple MQ Key Area Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Key Area Submerged Crate 2", "Water Temple MQ Key Area Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Key Area Submerged Crate 3", "Water Temple MQ Key Area Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Key Area Submerged Crate 4", "Water Temple MQ Key Area Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Key Area Submerged Crate 5", "Water Temple MQ Key Area Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Key Area Submerged Crate 6", "Water Temple MQ Key Area Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Key Area Behind Gate Crate 1", "Water Temple MQ Key Area Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Key Area Behind Gate Crate 2", "Water Temple MQ Key Area Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Key Area Behind Gate Crate 3", "Water Temple MQ Key Area Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Key Area Behind Gate Crate 4", "Water Temple MQ Key Area Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-11, -2075), "MQ Whirlpool Front Crate 1", "Water Temple MQ Whirlpool Front Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-371, -2077), "MQ Whirlpool Front Crate 2", "Water Temple MQ Whirlpool Front Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-455, -2394), "MQ Whirlpool Submerged Crate 1", "Water Temple MQ Whirlpool Submerged Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-498, -2661), "MQ Whirlpool Submerged Crate 2", "Water Temple MQ Whirlpool Submerged Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(11, -2737), "MQ Whirlpool Submerged Crate 3", "Water Temple MQ Whirlpool Submerged Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-251, -2731), "MQ Whirlpool Submerged Crate 4", "Water Temple MQ Whirlpool Submerged Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-119, -2481), "MQ Whirlpool Submerged Crate 5", "Water Temple MQ Whirlpool Submerged Crate 5", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(126, -2485), "MQ Whirlpool Submerged Crate 6", "Water Temple MQ Whirlpool Submerged Crate 6", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-7, -3126), "MQ Whirlpool Behind Gate Crate 1", "Water Temple MQ Whirlpool Behind Gate Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-87, -3126), "MQ Whirlpool Behind Gate Crate 2", "Water Temple MQ Whirlpool Behind Gate Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-303, -3126), "MQ Whirlpool Behind Gate Crate 3", "Water Temple MQ Whirlpool Behind Gate Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-390, -3126), "MQ Whirlpool Behind Gate Crate 4", "Water Temple MQ Whirlpool Behind Gate Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4)); locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-397, -3818), "MQ Dodongo Room Upper Crate", "Water Temple MQ Dodongo Room Upper Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE)); locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(30, -3215), "MQ Dodongo Room Hall Crate", "Water Temple MQ Dodongo Room Hall Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE)); locationTable[RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-85, -3460), "MQ Dodongo Room Lower Crate 1", "Water Temple MQ Dodongo Room Lower Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 7e84c1ddb74..122d318e0ac 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1716,31 +1716,31 @@ std::map rcToRandomizerInf = { { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, }, { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, }, { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, }, { RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, }, { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, }, { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, }, { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, }, { RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, }, - { RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, }, { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, }, { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, }, { RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, }, diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 77359252fbf..5ee1afc0067 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2504,31 +2504,31 @@ typedef enum { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, - RC_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, - RC_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RC_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, - RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, - RC_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, - RC_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RC_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RC_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 00d3db9e050..72b2799cfc8 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -913,31 +913,31 @@ typedef enum { RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_TORCHES_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_3, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_SUBMERGED_CRATE_4, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_BEFORE_BK_BY_DOOR_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_BK_ROOM_LOWER_CRATE_4, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_FRONT_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_3, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_4, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_5, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_SUBMERGED_CRATE_6, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_1, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_2, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_3, - RAND_INF_WATER_TEMPLE_MQ_KEY_AREA_BEHIND_GATE_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_FRONT_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_SUBMERGED_CRATE_6, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_WHIRLPOOL_BEHIND_GATE_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_UPPER_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_HALL_CRATE, RAND_INF_WATER_TEMPLE_MQ_DODONGO_ROOM_LOWER_CRATE_1, From 074188c0c18fb757e1439948c3782d6a6c34e778 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 17:26:05 -0500 Subject: [PATCH 25/52] fix dmc crate --- soh/soh/Enhancements/randomizer/location_list.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 58b1c767c2b..fecfe6b8c2b 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1694,7 +1694,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_KAK_NEAR_BAZAAR_CHILD_CRATE] = Location::Crate(RC_KAK_NEAR_BAZAAR_CHILD_CRATE, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(-636, -478), "Near Bazaar Child Crate", "Kak Near Bazaar Child Crate", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_BAZAAR_CHILD_CRATE)); locationTable[RC_GRAVEYARD_CRATE] = Location::Crate(RC_GRAVEYARD_CRATE, RCQUEST_BOTH, RCAREA_GRAVEYARD, SCENE_GRAVEYARD, TWO_ACTOR_PARAMS(-1050, -350), "Freestanding PoH Crate", "GY Freestanding PoH Crate", RHT_CRATE_GRAVEYARD, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GRAVEYARD_CRATE)); locationTable[RC_GC_MAZE_CRATE] = Location::Crate(RC_GC_MAZE_CRATE, RCQUEST_BOTH, RCAREA_GORON_CITY, SCENE_GORON_CITY, TWO_ACTOR_PARAMS(-1124, -1339), "Maze Crate", "GC Maze Crate", RHT_CRATE_GORON_CITY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GC_MAZE_CRATE)); - locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1898), "Crate", "DMC Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); + locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1892), "Crate", "DMC Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", "LLR Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); locationTable[RC_LH_LAB_CRATE] = Location::Crate(RC_LH_LAB_CRATE, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(90, -119), "Lab Crate", "LH Lab Crate", RHT_CRATE_LAKESIDE_LABORATORY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE)); locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); From f21fcf8888dc458d28f51149e8633555002ab600 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:36:30 -0500 Subject: [PATCH 26/52] remove child GV + GF crates :( + simplify hints + french --- .../hint_list/hint_list_exclude_overworld.cpp | 36 ++++++++-------- .../Enhancements/randomizer/ShuffleCrates.cpp | 12 +++++- .../Enhancements/randomizer/ShuffleCrates.h | 1 + .../location_access/gerudo_fortress.cpp | 1 - .../overworld/gerudo_valley.cpp | 4 -- .../Enhancements/randomizer/location_list.cpp | 43 ++++++++----------- 6 files changed, 47 insertions(+), 50 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp index 505ccbaf222..1a13f4f5c19 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_overworld.cpp @@ -1952,44 +1952,42 @@ void StaticData::HintTable_Init_Exclude_Overworld() { hintTextTable[RHT_CRATE_GERUDO_VALLEY] = HintText(CustomMessage("They say that a #crate in Gerudo Valley# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans une vallée# a #[[1]]#.", { QM_RED, QM_GREEN })); hintTextTable[RHT_CRATE_GERUDOS_FORTRESS] = HintText(CustomMessage("They say that a #crate in Gerudo Fortress# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans la Forteresse Gerudo# contient #[[1]]#.", { QM_RED, QM_GREEN })); hintTextTable[RHT_CRATE_WASTELAND] = HintText(CustomMessage("They say that a #crate in Haunted Wasteland# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); - hintTextTable[RHT_CRATE_THIEVES_HIDEOUT] = HintText(CustomMessage("They say that a #crate in the Thieves' Hideout# contains #[[1]]#.", - /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans le Désert Hanté# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_MARKET] = HintText(CustomMessage("They say that a #crate in the Market# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); - hintTextTable[RHT_CRATE_DOG_LADY_HOUSE] = HintText(CustomMessage("They say that a #crate in Richard the Dog's house# contains #[[1]]#.", - /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); - hintTextTable[RHT_CRATE_MARKET_GUARD_HOUSE] = HintText(CustomMessage("They say that a #crate in the Market Guard House# contains #[[1]]#.", - /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans la Place du Marché# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_KAKARIKO_VILLAGE] = HintText(CustomMessage("They say that a #crate in Kakariko Village# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans le Village de Cocorico# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_GRAVEYARD] = HintText(CustomMessage("They say that a #crate in the Graveyard# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans le Cimetière# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_GORON_CITY] = HintText(CustomMessage("They say that a #crate in Goron City# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans le Village Goron# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_DEATH_MOUNTAIN_CRATER] = HintText(CustomMessage("They say that a #crate in Death Mountain Crater# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse sur le Mont du Péril# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_LON_LON_RANCH] = HintText(CustomMessage("They say that a #crate in Lon Lon Ranch# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans le Ranch Lon Lon# contient #[[1]]#.", { QM_RED, QM_GREEN })); + hintTextTable[RHT_CRATE_LAKESIDE_LABORATORY] = HintText(CustomMessage("They say that a #crate in the Laboratory# contains #[[1]]#.", /*german*/ "", - /*french*/ "", { QM_RED, QM_GREEN })); + /*french*/ "Selon moi, une #caisse dans un laboratoire# contient #[[1]]#.", { QM_RED, QM_GREEN })); } } diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 5e6113da5da..1181a434d2c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -19,7 +19,7 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL_25Opa(play->state.gfxCtx); - gDPSetGrayscaleColor(POLY_OPA_DISP++, 255, 175, 0, 255); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 200, 0, 200, 255); if (Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) == 0) { gSPGrayscale(POLY_OPA_DISP++, true); @@ -103,10 +103,18 @@ void ObjKibako2_MoveForRandomizer(ObjKibako2* objKibako2, PlayState* play) { void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); + //ignore crates that are either OOB or inaccessible in logic (child-only GV + GF) + //TODO add back when able to exclude from tracker if (actor->id != ACTOR_OBJ_KIBAKO2 || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) || - (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429)) + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429) || + (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -764 && (s16)actor->world.pos.z == 148) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -125) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -150) || + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90)) return; ObjKibako2* crateActor = static_cast(actorRef); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h index 3ebf5b4f4a7..0b80e999125 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.h +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -12,6 +12,7 @@ void ObjKibako2_RandomizerInit(void* actorRef); }; #endif +bool GetCrateLocationExcluded(Rando::Location* loc); void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); #endif //ShuffleCrates_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index 744425a9b1e..76f1fac25bb 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -60,7 +60,6 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_ARCHERY_START_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), - LOCATION(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, logic->IsChild && logic->HasExplosives()), LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_KITCHEN_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index b7ee0952b12..84aa6ebd1a9 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -68,10 +68,6 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)), LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), - LOCATION(RC_GV_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()), - LOCATION(RC_GV_CRATE_BRIDGE_2, logic->IsChild && logic->CanBreakCrates()), - LOCATION(RC_GV_CRATE_BRIDGE_3, logic->IsChild && logic->CanBreakCrates()), - LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index fecfe6b8c2b..458c6ac4c5b 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1621,10 +1621,6 @@ void Rando::StaticData::InitLocationTable() { // // Crates 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", "GV 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", "GV Near Cow Crate", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_NEAR_COW_CRATE)); - locationTable[RC_GV_CRATE_BRIDGE_1] = Location::Crate(RC_GV_CRATE_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-764, 148), "Near Bridge Crate 1", "GV Near Bridge Crate 1", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_1)); - locationTable[RC_GV_CRATE_BRIDGE_2] = Location::Crate(RC_GV_CRATE_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -125), "Near Bridge Crate 2", "GV 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::Crate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", "GV 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::Crate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", "GV Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4)); 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", "GF 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", "GF 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", "GF Outside Center Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_2)); @@ -1643,22 +1639,21 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF 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", "GF 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", "GF 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_LEFT_END_CHILD_CRATE] = Location::Crate(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", "GF 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_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", "GF 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", "GF 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", "GF Kitchen Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 3", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 4", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Kitchen Crate 5", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 4", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 2", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF Break Room Crate 3", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF North F1 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF North F3 Carpenter Crate", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 1", RHT_CRATE_THIEVES_HIDEOUT, 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", "GF South F2 Carpenter Crate 2", RHT_CRATE_THIEVES_HIDEOUT, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF 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", "GF South F2 Carpenter Crate 2", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_SOUTH_F2_CARPENTER_CRATE_2)); 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", "HW 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", "HW 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", "HW After Quicksand Crate 2", RHT_CRATE_WASTELAND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_HW_AFTER_QUICKSAND_CRATE_2)); @@ -1668,12 +1663,12 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_MK_NEAR_BAZAAR_CRATE_2] = Location::Crate(RC_MK_NEAR_BAZAAR_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(490, 132), "Near Bazaar Crate 2", "MK Near Bazaar Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_NEAR_BAZAAR_CRATE_2)); locationTable[RC_MK_SHOOTING_GALLERY_CRATE_1] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-150, -576), "Shooting Gallery Crate 1", "MK Shooting Gallery Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_1)); locationTable[RC_MK_SHOOTING_GALLERY_CRATE_2] = Location::Crate(RC_MK_SHOOTING_GALLERY_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_DAY, TWO_ACTOR_PARAMS(-90, -576), "Shooting Gallery Crate 2", "MK Shooting Gallery Crate 2", RHT_CRATE_MARKET, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_SHOOTING_GALLERY_CRATE_2)); - locationTable[RC_MK_LOST_DOG_HOUSE_CRATE] = Location::Crate(RC_MK_LOST_DOG_HOUSE_CRATE, RCQUEST_BOTH, RCAREA_MARKET, SCENE_DOG_LADY_HOUSE, TWO_ACTOR_PARAMS(176, 170), "Lost Dog House Crate", "MK Lost Dog House Crate", RHT_CRATE_DOG_LADY_HOUSE, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_LOST_DOG_HOUSE_CRATE)); - locationTable[RC_MK_GUARD_HOUSE_CRATE_1] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(76, -210), "Guard House Crate 1", "MK Guard House Crate 1", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_1)); - locationTable[RC_MK_GUARD_HOUSE_CRATE_2] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -210), "Guard House Crate 2", "MK Guard House Crate 2", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_2)); - locationTable[RC_MK_GUARD_HOUSE_CRATE_3] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 120), "Guard House Crate 3", "MK Guard House Crate 3", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_3)); - locationTable[RC_MK_GUARD_HOUSE_CRATE_4] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 168), "Guard House Crate 4", "MK Guard House Crate 4", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_4)); - locationTable[RC_MK_GUARD_HOUSE_CRATE_5] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 216), "Guard House Crate 5", "MK Guard House Crate 5", RHT_CRATE_MARKET_GUARD_HOUSE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_5)); + locationTable[RC_MK_LOST_DOG_HOUSE_CRATE] = Location::Crate(RC_MK_LOST_DOG_HOUSE_CRATE, RCQUEST_BOTH, RCAREA_MARKET, SCENE_DOG_LADY_HOUSE, TWO_ACTOR_PARAMS(176, 170), "Lost Dog House Crate", "MK Lost Dog House Crate", RHT_CRATE_MARKET, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_LOST_DOG_HOUSE_CRATE)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_1] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_1, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(76, -210), "Guard House Crate 1", "MK Guard House Crate 1", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_1)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_2] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_2, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(28, -210), "Guard House Crate 2", "MK Guard House Crate 2", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_2)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_3] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_3, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 120), "Guard House Crate 3", "MK Guard House Crate 3", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_3)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_4] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_4, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 168), "Guard House Crate 4", "MK Guard House Crate 4", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_4)); + locationTable[RC_MK_GUARD_HOUSE_CRATE_5] = Location::Crate(RC_MK_GUARD_HOUSE_CRATE_5, RCQUEST_BOTH, RCAREA_MARKET, SCENE_MARKET_GUARD_HOUSE, TWO_ACTOR_PARAMS(-90, 216), "Guard House Crate 5", "MK Guard House Crate 5", RHT_CRATE_MARKET, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_MK_GUARD_HOUSE_CRATE_5)); locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1039, 10), "Near Open Grotto Adult Crate 1", "Kak Near Open Grotto Adult Crate 1", RHT_CRATE_KAKARIKO_VILLAGE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_1)); locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(1099, 10), "Near Open Grotto Adult Crate 2", "Kak Near Open Grotto Adult Crate 2", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_2)); locationTable[RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3] = Location::Crate(RC_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3, RCQUEST_BOTH, RCAREA_KAKARIKO_VILLAGE, SCENE_KAKARIKO_VILLAGE, TWO_ACTOR_PARAMS(506, -358), "Near Open Grotto Adult Crate 3", "Kak Near Open Grotto Adult Crate 3", RHT_CRATE_KAKARIKO_VILLAGE, RG_RED_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_KAK_NEAR_OPEN_GROTTO_ADULT_CRATE_3)); From 734aa11bd2949b2502339931a2ea1fb438b699de Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 20:50:58 -0500 Subject: [PATCH 27/52] fix dungeon hint + add french attempt --- .../hint_list/hint_list_exclude_dungeon.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index b36e4def3f6..9094e568f35 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -123,7 +123,7 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { hintTextTable[RHT_CRATE_DEKU_TREE] = HintText(CustomMessage("They say that a #crate in the Deku Tree# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans l'Arbre Mojo# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | DODONGOS CAVERN | @@ -301,7 +301,7 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Dodongo's Cavern# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans la Caverne Dodongo# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- @@ -900,7 +900,7 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa hintTextTable[RHT_CRATE_FIRE_TEMPLE] = HintText(CustomMessage("They say that a #crate in Fire Temple# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans le Temple du Feu# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | WATER TEMPLE | @@ -1049,9 +1049,9 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil avant un duel avec son ombre# révèle #[[1]]#.", {QM_RED, QM_GREEN})); - hintTextTable[RHT_CRATE_DODONGOS_CAVERN] = HintText(CustomMessage("They say that a #crate in Water Temple# contains #[[1]]#.", + hintTextTable[RHT_CRATE_WATER_TEMPLE] = HintText(CustomMessage("They say that a #crate in Water Temple# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans le Temple de l'Eau# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | SPIRIT TEMPLE | @@ -1300,7 +1300,7 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa hintTextTable[RHT_CRATE_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #crate in Spirit Temple# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans le colosse# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | SHADOW TEMPLE | @@ -1986,7 +1986,7 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th hintTextTable[RHT_CRATE_GERUDO_TRAINING_GROUND] = HintText(CustomMessage("They say that a #crate in Gerudo Training Ground# contains #[[1]]#.", /*german*/ "", - /*french*/ "", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans le Gymnase Gerudo# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | GANONS CASTLE | From 871627b42f0cb96ae573bef354d1b6999b2f9d6d Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 21:21:10 -0500 Subject: [PATCH 28/52] cleanup --- soh/soh/Enhancements/randomizer/ShuffleCrates.cpp | 1 - soh/soh/Enhancements/randomizer/ShuffleCrates.h | 1 - soh/soh/Enhancements/randomizer/dungeon.cpp | 4 +++- .../location_access/dungeons/deku_tree.cpp | 2 -- .../location_access/overworld/haunted_wasteland.cpp | 1 - .../location_access/overworld/lake_hylia.cpp | 1 - .../location_access/overworld/lon_lon_ranch.cpp | 1 - soh/soh/Enhancements/randomizer/location_list.cpp | 13 ++++++++++--- soh/soh/Enhancements/randomizer/randomizerTypes.h | 6 +++--- 9 files changed, 16 insertions(+), 14 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 1181a434d2c..df207f38282 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -5,7 +5,6 @@ extern "C" { #include "variables.h" #include "overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h" -#include "objects/gameplay_field_keep/gameplay_field_keep.h" #include "objects/object_kibako2/object_kibako2.h" extern PlayState* gPlayState; } diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h index 0b80e999125..3ebf5b4f4a7 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.h +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -12,7 +12,6 @@ void ObjKibako2_RandomizerInit(void* actorRef); }; #endif -bool GetCrateLocationExcluded(Rando::Location* loc); void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); #endif //ShuffleCrates_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 8de80457e3d..1fa9577f344 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -18,7 +18,7 @@ DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_ mqSetting(mqSetting_), vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)), vanillaPots(std::move(vanillaPots_)), mqPots(std::move(mqPots_)), - mqCrates(std::move(mqCrates_)), + vanillaCrates(std::move(vanillaCrates_)), mqCrates(std::move(mqCrates_)), sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) { } DungeonInfo::DungeonInfo() : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), @@ -171,6 +171,8 @@ std::vector DungeonInfo::GetEveryLocation() const { AddElementsToPool(locations, mqLocations); AddElementsToPool(locations, vanillaPots); AddElementsToPool(locations, mqPots); + AddElementsToPool(locations, vanillaCrates); + AddElementsToPool(locations, mqCrates); AddElementsToPool(locations, sharedLocations); AddElementsToPool(locations, bossRoomLocations); return locations; diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp index f54edd8b1f2..32d224aabd7 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/deku_tree.cpp @@ -176,7 +176,6 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_GS_LOBBY, logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA)), LOCATION(RC_DEKU_TREE_MQ_LOBBY_HEART, true), LOCATION(RC_DEKU_TREE_MQ_LOBBY_CRATE, logic->CanBreakCrates()), - }, { //Exits Entrance(RR_DEKU_TREE_MQ_1F, []{return true;}), @@ -198,7 +197,6 @@ void RegionTable_Init_DekuTree() { LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, true), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, logic->CanBreakCrates()), - }, { //Exits Entrance(RR_DEKU_TREE_MQ_2F, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp index ef996a97034..195ddd0e2f0 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/haunted_wasteland.cpp @@ -32,7 +32,6 @@ void RegionTable_Init_HauntedWasteland() { LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_2, logic->CanBreakCrates()), LOCATION(RC_HW_AFTER_QUICKSAND_CRATE_3, logic->CanBreakCrates()), - }, { //Exits Entrance(RR_WASTELAND_NEAR_COLOSSUS, []{return ctx->GetTrickOption(RT_LENS_HW) || logic->CanUse(RG_LENS_OF_TRUTH);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index 62b03d8fdd4..30e596f56b1 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -69,7 +69,6 @@ void RegionTable_Init_LakeHylia() { LOCATION(RC_LH_LAB_LEFT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_RIGHT_RUPEE, logic->CanUse(RG_IRON_BOOTS) || logic->HasItem(RG_GOLDEN_SCALE)), LOCATION(RC_LH_LAB_CRATE, logic->CanUse(RG_IRON_BOOTS) && logic->CanBreakCrates()), - }, { //Exits Entrance(RR_LAKE_HYLIA, []{return logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp index a817b701d27..888c9defa78 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp @@ -23,7 +23,6 @@ void RegionTable_Init_LonLonRanch() { LOCATION(RC_LLR_RAIN_SHED_POT_2, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_RAIN_SHED_POT_3, logic->IsChild && logic->CanBreakPots()), LOCATION(RC_LLR_NEAR_TREE_CRATE, logic->IsChild && logic->CanBreakCrates()), - }, { //Exits Entrance(RR_HYRULE_FIELD, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 458c6ac4c5b..756bf723bb9 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1618,7 +1618,12 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(199, -79), "MQ Lobby Right Pot 1", "Gerudo Training Ground MQ Lobby Right Pot 1", RHT_POT_GERUDO_TRAINING_GROUND, RG_RECOVERY_HEART, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1)); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2] = Location::Pot(RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(197, -179), "MQ Lobby Right Pot 2", "Gerudo Training Ground MQ Lobby Right Pot 2", RHT_POT_GERUDO_TRAINING_GROUND, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2)); - // Crates + /* +----------------+ + | SHUFFLE CRATES | + +----------------+ */ + + // Overworld Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check locationTable[RC_GV_FREESTANDING_POH_CRATE] = Location::Crate(RC_GV_FREESTANDING_POH_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-350, 1480), "Freestanding PoH Crate", "GV 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", "GV 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", "GF Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); @@ -1692,6 +1697,9 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_DMC_CRATE] = Location::Crate(RC_DMC_CRATE, RCQUEST_BOTH, RCAREA_DEATH_MOUNTAIN_CRATER, SCENE_DEATH_MOUNTAIN_CRATER, TWO_ACTOR_PARAMS(-950, 1892), "Crate", "DMC Crate", RHT_CRATE_DEATH_MOUNTAIN_CRATER, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DMC_CRATE)); locationTable[RC_LLR_NEAR_TREE_CRATE] = Location::Crate(RC_LLR_NEAR_TREE_CRATE, RCQUEST_BOTH, RCAREA_LON_LON_RANCH, SCENE_LON_LON_RANCH, TWO_ACTOR_PARAMS(1160, -2376), "Near Tree Crate", "LLR Near Tree Crate", RHT_CRATE_LON_LON_RANCH, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LLR_NEAR_TREE_CRATE)); locationTable[RC_LH_LAB_CRATE] = Location::Crate(RC_LH_LAB_CRATE, RCQUEST_BOTH, RCAREA_LAKE_HYLIA, SCENE_LAKESIDE_LABORATORY, TWO_ACTOR_PARAMS(90, -119), "Lab Crate", "LH Lab Crate", RHT_CRATE_LAKESIDE_LABORATORY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LH_LAB_CRATE)); + + // MQ Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check locationTable[RC_DEKU_TREE_MQ_LOBBY_CRATE] = Location::Crate(RC_DEKU_TREE_MQ_LOBBY_CRATE, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(279, 333), "MQ Lobby Crate", "Deku Tree MQ Lobby Crate", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_LOBBY_CRATE)); locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -62), "MQ Slingshot Room Crate 1", "Deku Tree MQ Slingshot Room Crate 1", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1)); locationTable[RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2] = Location::Crate(RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, RCQUEST_MQ, RCAREA_DEKU_TREE, SCENE_DEKU_TREE, TWO_ACTOR_PARAMS(-805, -2), "MQ Slingshot Room Crate 2", "Deku Tree MQ Slingshot Room Crate 2", RHT_CRATE_DEKU_TREE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2)); @@ -1832,8 +1840,7 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", "Spirit Temple MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", "Spirit Temple MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); - - + // Fairies locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", "SFM Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 5ee1afc0067..18b33ed7617 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2334,7 +2334,7 @@ typedef enum { RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, // End Pots - //Overworld Crates + // Overworld Crates RC_GV_FREESTANDING_POH_CRATE, RC_GV_NEAR_COW_CRATE, RC_GV_CRATE_BRIDGE_1, @@ -2414,7 +2414,7 @@ typedef enum { RC_LLR_NEAR_TREE_CRATE, RC_LH_LAB_CRATE, - //MQ Dungeon Crates + // MQ Dungeon Crates RC_DEKU_TREE_MQ_LOBBY_CRATE, RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_1, RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_CRATE_2, @@ -2555,7 +2555,7 @@ typedef enum { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, - //end crates + // End Crates RC_PIERRE, RC_DELIVER_RUTOS_LETTER, From 6e56ab105aa989f0c1f3fd790eb6881a75b6a836 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 22:00:43 -0500 Subject: [PATCH 29/52] smol crate loc list + enums --- .../hint_list/hint_list_exclude_dungeon.cpp | 12 ++++ soh/soh/Enhancements/randomizer/dungeon.cpp | 63 +++++++++++++++++-- .../Enhancements/randomizer/location_list.cpp | 38 ++++++++++- .../Enhancements/randomizer/randomizer.cpp | 35 +++++++++++ .../Enhancements/randomizer/randomizerTypes.h | 40 ++++++++++++ .../Enhancements/randomizer/randomizer_inf.h | 34 ++++++++++ 6 files changed, 215 insertions(+), 7 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index 9094e568f35..d6086ca7636 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -464,6 +464,10 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*german*/ "", /*french*/ "Selon moi, près d'un #ascenceur central dans le Ventre de Jabu-Jabu# se trouve #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_JABU_JABU] = HintText(CustomMessage("They say that a #crate in Jabu Jabu's Belly# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Ventre de Jabu-Jabu# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | FOREST TEMPLE | ---------------------------*/ @@ -694,6 +698,10 @@ hintTextTable[RHT_DODONGOS_CAVERN_BOSS_ROOM_CHEST] = HintText(CustomMessage("The /*german*/ "", /*french*/ "Selon moi, un #coeur dans le Temple de la Fôret# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_FOREST_TEMPLE] = HintText(CustomMessage("They say that a #crate in Forest Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de la Fôret# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | FIRE TEMPLE | ---------------------------*/ @@ -1565,6 +1573,10 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil près d’un coffre invisible gardé par les morts# révèle #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_CRATE_FOREST_TEMPLE] = HintText(CustomMessage("They say that a #crate in Shadow Temple# contains #[[1]]#.", + /*german*/ "", + /*french*/ "Selon moi, une #caisse dans le Temple de l'Ombre# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*-------------------------- | BOTTOM OF THE WELL | ---------------------------*/ diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 1fa9577f344..9c8e96e21a4 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -459,8 +459,16 @@ Dungeons::Dungeons() { RC_JABU_JABUS_BELLY_BARINADE_POT_5, RC_JABU_JABUS_BELLY_BARINADE_POT_6, }, - {}, - {}, + { + // Vanilla Small Crates + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + }, + { + // MQ Small Crates + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + }, {}, { // Boss Room Locations @@ -568,7 +576,12 @@ Dungeons::Dungeons() { RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, }, {}, - {}, + { + // MQ Small Crates + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + }, {}, { // Boss Room Locations @@ -683,7 +696,11 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, }, - {}, + { + // Vanilla Small Crates + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + }, { // MQ Crates RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_CRATE_1, @@ -709,6 +726,15 @@ Dungeons::Dungeons() { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, + + // MQ Small Crates + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, }, {}, { @@ -906,6 +932,17 @@ Dungeons::Dungeons() { RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_1, RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_2, RC_WATER_TEMPLE_MQ_TRIPLE_TORCH_ROOM_GATE_CRATE_3, + + // MQ Small Crates + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, }, {}, { @@ -1027,7 +1064,11 @@ Dungeons::Dungeons() { RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, }, - {}, + { + // Vanilla Small Crates + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + }, { // MQ Crates RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, @@ -1036,6 +1077,10 @@ Dungeons::Dungeons() { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_2, RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, + + // MQ Small Crates + RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, }, { // Shared Locations @@ -1168,7 +1213,13 @@ Dungeons::Dungeons() { RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, }, {}, - {}, + { + // MQ Small Crates + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + }, {}, { // Boss Room Locations diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 756bf723bb9..7dd697e3dfc 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1840,7 +1840,43 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-150, -1186), "MQ Big Mirror Crate 3", "Spirit Temple MQ Big Mirror Crate 3", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3)); locationTable[RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(270, -1186), "MQ Big Mirror Crate 4", "Spirit Temple MQ Big Mirror Crate 4", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4)); locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); - + + // Small Crates + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::Crate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-133, -1926), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::Crate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-181, -1906), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::Crate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::Crate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1700, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1700, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", "Fire Temple MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", "Fire Temple MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", "Fire Temple MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1259, 207), "MQ Lava Torch Small Crate 5", "Fire Temple MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1952), "MQ Dragon Room Torches Small Crate 1", "Water Temple MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1911), "MQ Dragon Room Torches Small Crate 2", "Water Temple MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1991), "MQ Dragon Room Torches Small Crate 3", "Water Temple MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", "Water Temple MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", "Water Temple MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", "Water Temple MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1160, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 380), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); + // Fairies locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_2] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_2, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1801, "Grotto Fairy 2", "SFM Grotto Fairy 2", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 122d318e0ac..b0097afb8ca 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1767,6 +1767,41 @@ std::map rcToRandomizerInf = { { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, }, { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, }, { RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, }, + + { RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, }, + { RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, }, + { RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, }, + { RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, }, + { RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, }, + { RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, }, + + { RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, }, + { RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, }, + { RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, }, + { RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, }, + { RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, }, + { RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, }, + { RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, }, + { RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, }, + { RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, }, + { RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, }, + { RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, }, + { RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, }, + { RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, }, + { RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, }, }; BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) { diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 18b33ed7617..ca85760a8fe 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -2555,6 +2555,43 @@ typedef enum { RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_3, RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + + // Dungeon Small Crates + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + + // MQ Dungeon Small Crates + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, // End Crates RC_PIERRE, @@ -5003,9 +5040,12 @@ typedef enum { RHT_CRATE_LAKESIDE_LABORATORY, RHT_CRATE_DEKU_TREE, RHT_CRATE_DODONGOS_CAVERN, + RHT_CRATE_JABU_JABU, + RHT_CRATE_FOREST_TEMPLE, RHT_CRATE_FIRE_TEMPLE, RHT_CRATE_WATER_TEMPLE, RHT_CRATE_SPIRIT_TEMPLE, + RHT_CRATE_SHADOW_TEMPLE, RHT_CRATE_GERUDO_TRAINING_GROUND, // Ganon Line RHT_GANON_JOKE01, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 72b2799cfc8..13ebc100438 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -965,6 +965,40 @@ typedef enum { RAND_INF_SPIRIT_TEMPLE_MQ_BIG_MIRROR_CRATE_4, RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, + RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, + + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, + RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, + RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, + RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, + RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, + RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, + RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, + RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, + RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RAND_INF_CAUGHT_LOACH, From 7f64c9c1d72d931860ce587a467ff368fc127a44 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 22:52:55 -0500 Subject: [PATCH 30/52] setup small crates --- .../game-interactor/GameInteractor.h | 3 + .../randomizer/3drando/item_pool.cpp | 1 + .../Enhancements/randomizer/ShuffleCrates.cpp | 88 +++++++++++++++++++ .../Enhancements/randomizer/ShuffleCrates.h | 2 + .../Enhancements/randomizer/hook_handlers.cpp | 8 ++ soh/soh/Enhancements/randomizer/location.cpp | 8 ++ soh/soh/Enhancements/randomizer/location.h | 5 ++ .../Enhancements/randomizer/location_list.cpp | 4 + .../Enhancements/randomizer/randomizer.cpp | 22 +++++ soh/soh/Enhancements/randomizer/randomizer.h | 1 + .../Enhancements/randomizer/randomizerTypes.h | 6 ++ .../randomizer/randomizer_check_objects.cpp | 1 + .../randomizer/randomizer_check_tracker.cpp | 3 + .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 7 ++ .../actors/ovl_Obj_Kibako/z_obj_kibako.h | 1 + 15 files changed, 160 insertions(+) diff --git a/soh/soh/Enhancements/game-interactor/GameInteractor.h b/soh/soh/Enhancements/game-interactor/GameInteractor.h index 3557dff704b..59ed932ca72 100644 --- a/soh/soh/Enhancements/game-interactor/GameInteractor.h +++ b/soh/soh/Enhancements/game-interactor/GameInteractor.h @@ -255,6 +255,9 @@ typedef enum { // Opt: *ObjKabiko2 VB_CRATE_SETUP_DRAW, VB_CRATE_DROP_ITEM, + // Opt: *ObjKabiko + VB_SMALL_CRATE_SETUP_DRAW, + VB_SMALL_CRATE_DROP_ITEM, // Opt: *ActorDoorShutter VB_LOCK_BOSS_DOOR, // Vanilla condition: true diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 7e25ffd4007..45c20bd0c65 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -938,6 +938,7 @@ void GenerateItemPool() { ctx->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL); if (overworldCratesActive || dungeonCratesActive) { PlaceItemsForType(RCTYPE_CRATE, overworldCratesActive, dungeonCratesActive, false); + PlaceItemsForType(RCTYPE_SMALL_CRATE, overworldCratesActive, dungeonCratesActive, false); } auto fsMode = ctx->GetOption(RSK_FISHSANITY); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index df207f38282..77286abab40 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -6,6 +6,8 @@ extern "C" { #include "variables.h" #include "overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.h" #include "objects/object_kibako2/object_kibako2.h" +#include "overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h" +#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" extern PlayState* gPlayState; } @@ -31,6 +33,25 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } +extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { + static Gfx* dList = (Gfx*)gSmallWoodenBoxDL; + auto smallcrateActor = ((ObjKibako*)thisx); + + OPEN_DISPS(play->state.gfxCtx); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + gDPSetGrayscaleColor(POLY_OPA_DISP++, 200, 0, 200, 255); + + if (Flags_GetRandomizerInf(smallcrateActor->smallcrateIdentity.randomizerInf) == 0) { + gSPGrayscale(POLY_OPA_DISP++, true); + } + + Gfx_DrawDListOpa(play, dList); + + gSPGrayscale(POLY_OPA_DISP++, false); + + CLOSE_DISPS(play->state.gfxCtx); +} + static ColliderCylinderInit sCylinderInit = { { COLTYPE_NONE, @@ -67,6 +88,22 @@ uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) } } +uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallcrateActor, PlayState* play) { + RandomizerCheck rc = smallcrateActor->smallcrateIdentity.randomizerCheck; + uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + + // Don't pull randomized item if crate isn't randomized or is already checked + if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || + (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) || + Flags_GetRandomizerInf(smallcrateActor->smallcrateIdentity.randomizerInf) || + smallcrateActor->smallcrateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + return false; + } else { + return true; + } +} + void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* play) { EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &crateActor->dyna.actor.world.pos, ITEM00_SOH_DUMMY); item00->randoInf = crateActor->crateIdentity.randomizerInf; @@ -77,6 +114,17 @@ void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* pl item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); } +void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallcrateActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &smallcrateActor->actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = smallcrateActor->smallcrateIdentity.randomizerInf; + item00->itemEntry = + Rando::Context::GetInstance()->GetFinalGIEntry(smallcrateActor->smallcrateIdentity.randomizerCheck, true, GI_NONE); + item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; + item00->actor.velocity.y = 8.0f; + item00->actor.speedXZ = 2.0f; + item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); +} + void ObjKibako2_MoveForRandomizer(ObjKibako2* objKibako2, PlayState* play) { bool moved = false; @@ -123,6 +171,17 @@ void ObjKibako2_RandomizerInit(void* actorRef) { crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); } +void ObjKibako_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); + + if (actor->id != ACTOR_OBJ_KIBAKO) return; + + ObjKibako* smallcrateActor = static_cast(actorRef); + + smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); +} + void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { va_list args; va_copy(args, originalArgs); @@ -149,5 +208,34 @@ void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, } } + va_end(args); +} + +void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { + va_list args; + va_copy(args, originalArgs); + + // Draw custom model for crates to indicate it holding a randomized item. + if (id == VB_SMALL_CRATE_SETUP_DRAW) { + ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { + smallcrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; + *should = false; + } else { + *should = true; + } + } + + // Do not spawn vanilla item from crates, instead spawn the randomized item. + if (id == VB_SMALL_CRATE_DROP_ITEM) { + ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { + ObjKibako_RandomizerSpawnCollectible(smallcrateActor, gPlayState); + *should = false; + } else { + *should = true; + } + } + va_end(args); } \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h index 3ebf5b4f4a7..88054780ed4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.h +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -8,10 +8,12 @@ extern "C" { #endif void ObjKibako2_RandomizerInit(void* actorRef); +void ObjKibako_RandomizerInit(void* actorRef); #ifdef __cplusplus }; #endif void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); +void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); #endif //ShuffleCrates_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 4d9f21d1840..b0ee93cedbd 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -2374,6 +2374,8 @@ void RandomizerRegisterHooks() { static uint32_t shuffleCratesOnActorInitHook = 0; static uint32_t shuffleCratesOnVanillaBehaviorHook = 0; + static uint32_t shuffleSmallCratesOnActorInitHook = 0; + static uint32_t shuffleSmallCratesOnVanillaBehaviorHook = 0; GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { ShipInit::Init("IS_RANDO"); @@ -2412,6 +2414,8 @@ void RandomizerRegisterHooks() { GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnActorInitHook); GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnVanillaBehaviorHook); + GameInteractor::Instance->UnregisterGameHook(shuffleSmallCratesOnActorInitHook); + GameInteractor::Instance->UnregisterGameHook(shuffleSmallCratesOnVanillaBehaviorHook); onFlagSetHook = 0; onSceneFlagSetHook = 0; @@ -2443,6 +2447,8 @@ void RandomizerRegisterHooks() { shuffleCratesOnActorInitHook = 0; shuffleCratesOnVanillaBehaviorHook = 0; + shuffleSmallCratesOnActorInitHook = 0; + shuffleSmallCratesOnVanillaBehaviorHook = 0; ShuffleFairies_UnregisterHooks(); @@ -2500,6 +2506,8 @@ void RandomizerRegisterHooks() { if (RAND_GET_OPTION(RSK_SHUFFLE_CRATES) != RO_SHUFFLE_CRATES_OFF) { shuffleCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako2_RandomizerInit); shuffleCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleCrates_OnVanillaBehaviorHandler); + shuffleSmallCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako_RandomizerInit); + shuffleSmallCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleSmallCrates_OnVanillaBehaviorHandler); } }); } diff --git a/soh/soh/Enhancements/randomizer/location.cpp b/soh/soh/Enhancements/randomizer/location.cpp index d619e61e40a..83c72f89ab3 100644 --- a/soh/soh/Enhancements/randomizer/location.cpp +++ b/soh/soh/Enhancements/randomizer/location.cpp @@ -386,6 +386,14 @@ Rando::Location Rando::Location::Crate(RandomizerCheck rc, RandomizerCheckQuest collectionCheck }; } +Rando::Location Rando::Location::SmallCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, + SceneID scene_, int32_t actorParams_, std::string&& shortName_, + std::string&& spoilerName_, RandomizerHintTextKey hintKey, + RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck) { + return {rc, quest_, RCTYPE_SMALL_CRATE, area_, ACTOR_OBJ_KIBAKO, scene_, actorParams_, std::move(shortName_), std::move(spoilerName_), hintKey, vanillaItem, false, + collectionCheck }; +} + Rando::Location Rando::Location::HintStone(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, int32_t actorParams_, std::string&& shortName_) { return { rc, quest_, RCTYPE_GOSSIP_STONE, area_, ACTOR_EN_GS, scene_, actorParams_, std::move(shortName_), RHT_NONE, RG_NONE, false }; } diff --git a/soh/soh/Enhancements/randomizer/location.h b/soh/soh/Enhancements/randomizer/location.h index 8724f3a6f3d..ec1a9a1b34d 100644 --- a/soh/soh/Enhancements/randomizer/location.h +++ b/soh/soh/Enhancements/randomizer/location.h @@ -180,6 +180,11 @@ class Location { RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, SpoilerCollectionCheck collectionCheck); + static Location SmallCrate(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, SceneID scene_, + int32_t actorParams_, std::string&& shortName_, std::string&& spoilerName_, + RandomizerHintTextKey hintKey, RandomizerGet vanillaItem, + SpoilerCollectionCheck collectionCheck); + static Location OtherHint(RandomizerCheck rc, RandomizerCheckQuest quest_, RandomizerCheckArea area_, ActorID actorId_, SceneID scene_, std::string&& shortName_, std::string&& spoilerName_); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 7dd697e3dfc..856c8c03bf6 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -49,6 +49,9 @@ std::vector Rando::StaticData::GetOverworldCrateLocations() { if (location.GetRCType() == RCTYPE_CRATE && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { overworldCrateLocations.push_back(location.GetRandomizerCheck()); } + if (location.GetRCType() == RCTYPE_SMALL_CRATE && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + overworldCrateLocations.push_back(location.GetRandomizerCheck()); + } } return overworldCrateLocations; } @@ -125,6 +128,7 @@ std::vector Rando::StaticData::GetOverworldLocations() { location.GetRCType() != RCTYPE_FISH && // temp fix while locations are properly sorted out location.GetRCType() != RCTYPE_POT && // Same as fish location.GetRCType() != RCTYPE_CRATE && // Same as fish + location.GetRCType() != RCTYPE_SMALL_CRATE && // Same as fish location.GetRCType() != RCTYPE_CHEST_GAME && //this is supposed to be excluded (ctx->GetOption(RSK_SHUFFLE_ADULT_TRADE) || location.GetRCType() != RCTYPE_ADULT_TRADE) && //trade is handled elsewhere in location pool location.GetRCType() != RCTYPE_STATIC_HINT && diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index b0097afb8ca..b0d7958a402 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2117,6 +2117,28 @@ CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { return crateIdentity; } +SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) { + struct SmallCrateIdentity smallcrateIdentity; + uint32_t crateSceneNum = sceneNum; + + smallcrateIdentity.randomizerInf = RAND_INF_MAX; + smallcrateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, crateSceneNum, actorParams); + + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + smallcrateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + smallcrateIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return smallcrateIdentity; +} + u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { return Rando::Context::GetInstance()->GetOption(randoSettingKey).GetContextOptionIndex(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 6e539748a12..53c76a74ad6 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -55,6 +55,7 @@ class Randomizer { PotIdentity IdentifyPot(s32 sceneNum, s32 posX, s32 posZ); FishIdentity IdentifyFish(s32 sceneNum, s32 actorParams); CrateIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ); + SmallCrateIdentity IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ); GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability = true); ItemObtainability GetItemObtainabilityFromRandomizerCheck(RandomizerCheck randomizerCheck); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index ca85760a8fe..76b36a57943 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -289,6 +289,7 @@ typedef enum { RCTYPE_BOSS_HEART_OR_OTHER_REWARD, // Boss heart container or lesser dungeon rewards (lens, ice arrow) RCTYPE_POT, // Pots RCTYPE_CRATE, // Crates + RCTYPE_SMALL_CRATE, // Small crates RCTYPE_DUNGEON_REWARD, // Dungeon rewards (blue warps) RCTYPE_OCARINA, // Ocarina locations RCTYPE_BEEHIVE, // Beehives @@ -5956,6 +5957,11 @@ typedef struct CrateIdentity { RandomizerCheck randomizerCheck; } CrateIdentity; +typedef struct SmallCrateIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} SmallCrateIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index 22936f52e0c..15013e8d81d 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -173,6 +173,7 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { (location.GetRCType() != RCTYPE_COW || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCows"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_POT || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShufflePots"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_CRATE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && + (location.GetRCType() != RCTYPE_SMALL_CRATE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleCrates"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_FISH || ctx->GetFishsanity()->GetFishLocationIncluded(&location, FSO_SOURCE_CVARS)) && (location.GetRCType() != RCTYPE_ADULT_TRADE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleAdultTrade"), RO_GENERIC_NO)) && diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 789ab817823..516d8ac706f 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -1343,6 +1343,9 @@ bool IsCheckShuffled(RandomizerCheck rc) { (loc->GetRCType() != RCTYPE_CRATE || (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_SMALL_CRATE || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_COW || showCows) && (loc->GetRCType() != RCTYPE_FISH || OTRGlobals::Instance->gRandoContext->GetFishsanity()->GetFishLocationIncluded(loc)) && (loc->GetRCType() != RCTYPE_FREESTANDING || diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index 16e27e39ed9..dd86a76b7b3 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -7,6 +7,7 @@ #include "z_obj_kibako.h" #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" #include "overlays/effects/ovl_Effect_Ss_Kakera/z_eff_ss_kakera.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_CAN_PRESS_SWITCHES) @@ -107,6 +108,10 @@ void ObjKibako_Destroy(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjKibako* this = (ObjKibako*)thisx; + if (!GameInteractor_Should(VB_SMALL_CRATE_DROP_ITEM, false, this)) { + return; + } + Collider_DestroyCylinder(play, &this->collider); } @@ -284,5 +289,7 @@ void ObjKibako_Draw(Actor* thisx, PlayState* play) { s32 pad; ObjKibako* this = (ObjKibako*)thisx; + if (!GameInteractor_Should(VB_SMALL_CRATE_SETUP_DRAW, false, thisx)) {} + Gfx_DrawDListOpa(play, gSmallWoodenBoxDL); } diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h index 68e871c7888..5162f6a10b9 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h +++ b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h @@ -12,6 +12,7 @@ typedef struct ObjKibako { /* 0x0000 */ Actor actor; /* 0x014C */ ObjKibakoActionFunc actionFunc; /* 0x0150 */ ColliderCylinder collider; + /* */ SmallCrateIdentity smallcrateIdentity; } ObjKibako; // size = 0x019C #endif From 8711f7419486ef562375f4979bca92a16e46a9cf Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 23:02:43 -0500 Subject: [PATCH 31/52] fix fire temple fairy hints --- .../3drando/hint_list/hint_list_exclude_dungeon.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index d6086ca7636..c6a910f681c 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -898,11 +898,11 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa /*german*/ "", /*french*/ "Selon moi, un #coeur dans le Temple du Feu# cache #[[1]]#.", {QM_RED, QM_GREEN})); - hintTextTable[RAND_INF_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a hot arena# reveals #[[1]]#.", + hintTextTable[RHT_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun in a hot arena# reveals #[[1]]#.", /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil dans une arène chaude# révèle #[[1]]#.", {QM_RED, QM_GREEN})); - hintTextTable[RAND_INF_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun behind a knight's throne in a volcano# reveals #[[1]]#.", + hintTextTable[RHT_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY] = HintText(CustomMessage("They say that #calling the sun behind a knight's throne in a volcano# reveals #[[1]]#.", /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil derrière le trône d’un chevalier dans un volcan# révèle #[[1]]#.", {QM_RED, QM_GREEN})); From 718c281efec1aff13bd3d8c1c03a5e7f977f417b Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 24 Jan 2025 23:27:40 -0500 Subject: [PATCH 32/52] add logic --- .../location_access/dungeons/fire_temple.cpp | 15 ++++++++++++++- .../location_access/dungeons/forest_temple.cpp | 9 ++++++++- .../location_access/dungeons/jabujabus_belly.cpp | 10 +++++++--- .../location_access/dungeons/shadow_temple.cpp | 10 +++++++++- .../location_access/dungeons/spirit_temple.cpp | 7 ++++++- .../location_access/dungeons/water_temple.cpp | 9 +++++++++ soh/soh/Enhancements/randomizer/logic.cpp | 4 ++++ soh/soh/Enhancements/randomizer/logic.h | 1 + 8 files changed, 58 insertions(+), 7 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index 30d6cc7cb5f..be8dc973ab1 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -326,7 +326,13 @@ void RegionTable_Init_FireTemple() { Entrance(RR_FIRE_TEMPLE_HAMMER_RETURN_PATH, []{return logic->CanUse(RG_MEGATON_HAMMER);}), }); - areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FIRE_TEMPLE_HAMMER_RETURN_PATH] = Region("Fire Temple Hammer Return Path", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_FIRE_TEMPLE_ABOVE_FIRE_MAZE, []{return logic->CanUse(RG_MEGATON_HAMMER);}), }); @@ -559,6 +565,8 @@ void RegionTable_Init_FireTemple() { LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), //Assumes maze access LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()), }, { @@ -627,6 +635,11 @@ void RegionTable_Init_FireTemple() { LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp index 241a82064ad..5b755429027 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/forest_temple.cpp @@ -529,7 +529,14 @@ void RegionTable_Init_ForestTemple() { }); //This room exists to show the actual map layout, and for when the crates get added to logic - areaTable[RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM] = Region("Forest Temple MQ Torch Shot Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_FOREST_TEMPLE_MQ_TORCH_SHOT_ROOM] = Region("Forest Temple MQ Torch Shot Room", "Forest Temple", {RA_FOREST_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_FOREST_TEMPLE_MQ_FALLING_ROOM, []{return logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_DINS_FIRE);}), Entrance(RR_FOREST_TEMPLE_MQ_BETH_ROOM, []{return logic->SmallKeys(RR_FOREST_TEMPLE, 6);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp index fe043caa39d..466ea975e09 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/jabujabus_belly.cpp @@ -28,10 +28,12 @@ void RegionTable_Init_JabuJabusBelly() { EventAccess(&logic->JabuWestTentacle, []{return logic->JabuRutoIn1F && logic->CanKillEnemy(RE_TENTACLE, ED_BOOMERANG);}), }, { //Locations - LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()), + LOCATION(RC_JABU_JABUS_BELLY_DEKU_SCRUB, logic->HasItem(RG_BRONZE_SCALE) && (logic->IsChild || logic->HasItem(RG_SILVER_SCALE) || ctx->GetTrickOption(RT_JABU_ALCOVE_JUMP_DIVE) || logic->CanUse(RG_IRON_BOOTS)) && logic->CanStunDeku()), //We can kill the Stingers with ruto - LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F), - LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle), + LOCATION(RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, logic->JabuRutoIn1F), + LOCATION(RC_JABU_JABUS_BELLY_MAP_CHEST, logic->JabuWestTentacle), + LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_BEGINNING, []{return true;}), @@ -254,6 +256,8 @@ void RegionTable_Init_JabuJabusBelly() { LOCATION(RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, logic->CanUse(RG_FAIRY_SLINGSHOT)), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, logic->CanBreakPots()), LOCATION(RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, logic->CanBreakPots()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_JABU_JABUS_BELLY_MQ_HOLES_ROOM, []{return logic->CanUse(RG_BOOMERANG);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp index 1267e240856..242be2c721f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -125,7 +125,15 @@ void RegionTable_Init_ShadowTemple() { Entrance(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}), }); - areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM] = Region("Shadow Temple MQ Spinner Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, + { + // Locations + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + }, + { //Exits Entrance(RR_SHADOW_TEMPLE_ENTRYWAY, []{return true;}), Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_HOVER_BOOTS) || (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->CanUse(RG_LENS_OF_TRUTH));}) && (logic->CanUse(RG_HOVER_BOOTS) || Here(RR_SHADOW_TEMPLE_MQ_SPINNER_ROOM, []{return logic->CanUse(RG_FIRE_ARROWS);}) || (ctx->GetTrickOption(RT_SHADOW_MQ_GAP) && logic->CanUse(RG_LONGSHOT) && logic->CanJumpslashExceptHammer()));}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp index f2dbcd8459d..422f5efe4c3 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -38,6 +38,8 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_2, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_3, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), + LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -283,8 +285,10 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakPots();})), - LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, [] { return logic->CanBreakCrates();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_1, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_CRATE_2, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakCrates();})), + LOCATION(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, MQSpiritSharedStatueRoom(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM, []{return logic->CanBreakSmallCrates();})), + }, { //Exits //we check possible adult access directly in MQSpiritSharedBrokenWallRoom, so this exit only covers Certain Access @@ -425,6 +429,7 @@ void RegionTable_Init_SpiritTemple() { areaTable[RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM] = Region("Spirit Temple MQ Four Beamos Room", "Spirit Temple", {RA_SPIRIT_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, logic->CanKillEnemy(RE_BEAMOS)), + LOCATION(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, logic->CanKillEnemy(RE_BEAMOS) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_STATUE_ROOM_EAST, []{return logic->CanAvoidEnemy(RE_BEAMOS, true, 4) && logic->CanUse(RG_SONG_OF_TIME) && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->CanUse(RG_HOOKSHOT);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index 5133a654f34..d5fc6789760 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -476,6 +476,10 @@ void RegionTable_Init_WaterTemple() { LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}), @@ -492,8 +496,10 @@ void RegionTable_Init_WaterTemple() { LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), @@ -657,6 +663,9 @@ void RegionTable_Init_WaterTemple() { //Locations LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()), }, { //Exits diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 750e9838d60..e6b6d81c9e3 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1030,6 +1030,10 @@ namespace Rando { return true; } + bool Logic::CanBreakSmallCrates() { + return true; + } + bool Logic::HasExplosives(){ return CanUse(RG_BOMB_BAG) || CanUse(RG_BOMBCHU_5); } diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index 05356543ea0..5d01a7575f4 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -239,6 +239,7 @@ class Logic { bool CanBreakLowerBeehives(); bool CanBreakPots(); bool CanBreakCrates(); + bool CanBreakSmallCrates(); bool HasFireSource(); bool HasFireSourceWithTorch(); bool TradeQuestStep(RandomizerGet rg); From 1e70e70f96f861628a8a9d6c7513f191df38e0c2 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 16:11:48 -0500 Subject: [PATCH 33/52] fix small crates + locs --- .../Enhancements/randomizer/ShuffleCrates.cpp | 4 +- soh/soh/Enhancements/randomizer/context.cpp | 1 + .../Enhancements/randomizer/location_list.cpp | 77 +++++++++++-------- .../Enhancements/randomizer/randomizer.cpp | 4 +- soh/soh/Enhancements/randomizer/static_data.h | 1 + .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 7 +- 6 files changed, 53 insertions(+), 41 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 77286abab40..6159a48ebe9 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -150,7 +150,6 @@ void ObjKibako2_MoveForRandomizer(ObjKibako2* objKibako2, PlayState* play) { void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); - uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); //ignore crates that are either OOB or inaccessible in logic (child-only GV + GF) //TODO add back when able to exclude from tracker @@ -173,13 +172,12 @@ void ObjKibako2_RandomizerInit(void* actorRef) { void ObjKibako_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); - uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); if (actor->id != ACTOR_OBJ_KIBAKO) return; ObjKibako* smallcrateActor = static_cast(actorRef); - smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); + smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); } void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index d047f9cd24a..dd14e2c65ba 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -147,6 +147,7 @@ void Context::GenerateLocationPool() { if (mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { AddLocations(StaticData::GetOverworldCrateLocations()); + AddLocations(StaticData::GetOverworldSmallCrateLocations()); } AddLocations(StaticData::GetAllDungeonLocations()); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 856c8c03bf6..31122ed9928 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -56,6 +56,17 @@ std::vector Rando::StaticData::GetOverworldCrateLocations() { return overworldCrateLocations; } +std::vector Rando::StaticData::GetOverworldSmallCrateLocations() { + std::vector overworldSmallCrateLocations = {}; + for (Location& location : locationTable) { + if (location.GetRCType() == RCTYPE_SMALL_CRATE && location.IsOverworld() && + location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + overworldSmallCrateLocations.push_back(location.GetRandomizerCheck()); + } + } + return overworldSmallCrateLocations; +} + std::vector Rando::StaticData::GetStaticHintLocations() { std::vector staticHintLocations = {}; for (Location& location : locationTable) { @@ -1847,39 +1858,39 @@ void Rando::StaticData::InitLocationTable() { // // Small Crates // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check - locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::Crate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-133, -1926), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); - locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::Crate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-181, -1906), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); - locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::Crate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); - locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::Crate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::Crate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::Crate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::Crate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1700, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1700, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", "Fire Temple MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", "Fire Temple MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", "Fire Temple MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::Crate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1259, 207), "MQ Lava Torch Small Crate 5", "Fire Temple MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1952), "MQ Dragon Room Torches Small Crate 1", "Water Temple MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1911), "MQ Dragon Room Torches Small Crate 2", "Water Temple MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2200, -1991), "MQ Dragon Room Torches Small Crate 3", "Water Temple MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", "Water Temple MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", "Water Temple MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", "Water Temple MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::Crate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1160, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::Crate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 380), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::Crate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::Crate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", "Fire Temple MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", "Fire Temple MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", "Fire Temple MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1267, 200), "MQ Lava Torch Small Crate 5", "Fire Temple MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1952), "MQ Dragon Room Torches Small Crate 1", "Water Temple MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1911), "MQ Dragon Room Torches Small Crate 2", "Water Temple MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1991), "MQ Dragon Room Torches Small Crate 3", "Water Temple MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", "Water Temple MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", "Water Temple MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", "Water Temple MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1166, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 382), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); // Fairies locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index b0d7958a402..ac640aa241a 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2119,14 +2119,14 @@ CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) { struct SmallCrateIdentity smallcrateIdentity; - uint32_t crateSceneNum = sceneNum; + uint32_t smallcrateSceneNum = sceneNum; smallcrateIdentity.randomizerInf = RAND_INF_MAX; smallcrateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); - Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, crateSceneNum, actorParams); + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, smallcrateSceneNum, actorParams); if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index d0024fc96fc..e414a4d4086 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -48,6 +48,7 @@ class StaticData { static std::vector GetOverworldFishLocations(); static std::vector GetOverworldPotLocations(); static std::vector GetOverworldCrateLocations(); + static std::vector GetOverworldSmallCrateLocations(); static std::vector GetOverworldFairyLocations(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index dd86a76b7b3..a063c24dc9b 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -68,6 +68,10 @@ static InitChainEntry sInitChain[] = { void ObjKibako_SpawnCollectible(ObjKibako* this, PlayState* play) { s16 collectible; + if (!GameInteractor_Should(VB_SMALL_CRATE_DROP_ITEM, false, this)) { + return; + } + collectible = this->actor.params & 0x1F; if ((collectible >= 0) && (collectible <= 0x19)) { Item_DropCollectible(play, &this->actor.world.pos, @@ -108,9 +112,6 @@ void ObjKibako_Destroy(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjKibako* this = (ObjKibako*)thisx; - if (!GameInteractor_Should(VB_SMALL_CRATE_DROP_ITEM, false, this)) { - return; - } Collider_DestroyCylinder(play, &this->collider); } From 3e09925cfa723da31da4e3209105801dbaba8c6c Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 16:33:53 -0500 Subject: [PATCH 34/52] align GF crates without moving --- .../Enhancements/randomizer/ShuffleCrates.cpp | 45 ------------------- .../Enhancements/randomizer/randomizer.cpp | 8 +++- 2 files changed, 7 insertions(+), 46 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 6159a48ebe9..a0e520442ed 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -52,26 +52,6 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } -static ColliderCylinderInit sCylinderInit = { - { - COLTYPE_NONE, - AT_NONE, - AC_ON | AC_TYPE_PLAYER, - OC1_NONE, - OC2_TYPE_2, - COLSHAPE_CYLINDER, - }, - { - ELEMTYPE_UNK0, - { 0x00000000, 0x00, 0x00 }, - { 0x40000040, 0x00, 0x00 }, - TOUCH_NONE, - BUMP_ON, - OCELEM_NONE, - }, - { 31, 48, 0, { 0, 0, 0 } }, -}; - uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); @@ -125,29 +105,6 @@ void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallcrateActor, PlayState* item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); } -void ObjKibako2_MoveForRandomizer(ObjKibako2* objKibako2, PlayState* play) { - bool moved = false; - - // Move misaligned child crates in Gerudo Fortress - if (play->sceneNum == SCENE_GERUDOS_FORTRESS && gPlayState->linkAgeOnLoad == 1 && objKibako2->dyna.actor.world.pos.x == 310) { - if (objKibako2->dyna.actor.world.pos.z == -1830) { - objKibako2->dyna.actor.world.pos.z = -1842.0f; - moved = true; - } else if (objKibako2->dyna.actor.world.pos.z == -1770) { - objKibako2->dyna.actor.world.pos.z = -1782.0f; - moved = true; - } - } - - if (moved) { - // Reposition collider - Collider_InitCylinder(play, &objKibako2->collider); - Collider_SetCylinder(play, &objKibako2->collider, &objKibako2->dyna.actor, &sCylinderInit); - Collider_UpdateCylinder(&objKibako2->dyna.actor, &objKibako2->collider); - ; - } -} - void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); @@ -165,8 +122,6 @@ void ObjKibako2_RandomizerInit(void* actorRef) { ObjKibako2* crateActor = static_cast(actorRef); - ObjKibako2_MoveForRandomizer(crateActor, gPlayState); - crateActor->crateIdentity = OTRGlobals::Instance->gRandomizer->IdentifyCrate(gPlayState->sceneNum, (s16)actor->world.pos.x, (s16)actor->world.pos.z); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index ac640aa241a..a7fd39c66e3 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2097,7 +2097,13 @@ CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { // pretend night is day to align crates in market and align GF child/adult crates if (sceneNum == SCENE_MARKET_NIGHT) { crateSceneNum = SCENE_MARKET_DAY; - } + } else if (sceneNum == SCENE_GERUDOS_FORTRESS && gPlayState->linkAgeOnLoad == 1 && posX == 310) { + if (posZ == -1830) { + posZ = -1842.0f; + } else if (posZ == -1770) { + posZ = -1782.0f; + } + } crateIdentity.randomizerInf = RAND_INF_MAX; crateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; From df02f995da05d8e89fe2b3f67cd5e20ae58a61e9 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 17:16:15 -0500 Subject: [PATCH 35/52] add child GV-GF crates for No Logic --- .../Enhancements/randomizer/ShuffleCrates.cpp | 25 ++++++++++++++++--- .../Enhancements/randomizer/ShuffleCrates.h | 1 + .../location_access/gerudo_fortress.cpp | 1 + .../overworld/gerudo_valley.cpp | 5 +++- .../Enhancements/randomizer/location_list.cpp | 5 ++++ .../Enhancements/randomizer/randomizer.cpp | 1 + .../randomizer/randomizer_check_tracker.cpp | 3 ++- 7 files changed, 36 insertions(+), 5 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index a0e520442ed..ee6682e0aab 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -52,6 +52,23 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { CLOSE_DISPS(play->state.gfxCtx); } +bool GetOverworldCratesIncluded(Rando::Location* loc) { + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + + if (loc->GetRCType() != RCTYPE_CRATE || crateSetting == RO_SHUFFLE_CRATES_OFF) { + return false; + } + + RandomizerCheck rc = loc->GetRandomizerCheck(); + + if (logicSetting != RO_LOGIC_NO_LOGIC && (rc == RC_GV_CRATE_BRIDGE_1 || rc == RC_GV_CRATE_BRIDGE_2 || rc == RC_GV_CRATE_BRIDGE_3 || + rc == RC_GV_CRATE_BRIDGE_4 || rc == RC_GF_ARCHERY_LEFT_END_CHILD_CRATE)) { + return false; + } + return true; +} + uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); @@ -107,17 +124,19 @@ void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallcrateActor, PlayState* void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); //ignore crates that are either OOB or inaccessible in logic (child-only GV + GF) //TODO add back when able to exclude from tracker - if (actor->id != ACTOR_OBJ_KIBAKO2 || + if (actor->id != ACTOR_OBJ_KIBAKO2 || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429) || - (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) || + (logicSetting != RO_LOGIC_NO_LOGIC && + ((gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) || (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -764 && (s16)actor->world.pos.z == 148) || (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -125) || (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -150) || - (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90)) + (gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90)))) return; ObjKibako2* crateActor = static_cast(actorRef); diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h index 88054780ed4..051f88cbe54 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.h +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -13,6 +13,7 @@ void ObjKibako_RandomizerInit(void* actorRef); }; #endif +bool GetOverworldCratesIncluded(Rando::Location* loc); void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index 76f1fac25bb..1c28e974c40 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -60,6 +60,7 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_ARCHERY_START_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_LEFT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), + LOCATION(RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, logic->IsChild && logic->HasExplosives() && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RIGHT_END_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_KITCHEN_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index 84aa6ebd1a9..d957dcb4cbb 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -68,7 +68,10 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_TRADE_SAW, logic->IsAdult && logic->CanUse(RG_POACHERS_SAW)), LOCATION(RC_GV_GS_BEHIND_TENT, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), LOCATION(RC_GV_GS_PILLAR, logic->IsAdult && logic->HookshotOrBoomerang() && logic->CanGetNightTimeGS()), - + LOCATION(RC_GV_CRATE_BRIDGE_1, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_2, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_3, logic->IsChild && logic->CanBreakCrates()), + LOCATION(RC_GV_CRATE_BRIDGE_4, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GERUDO_FORTRESS, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 31122ed9928..7b377ab8524 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1642,6 +1642,10 @@ void Rando::StaticData::InitLocationTable() { // 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", "GV 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", "GV 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", "GF Above Jail Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_PURPLE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ABOVE_JAIL_CRATE)); + locationTable[RC_GV_CRATE_BRIDGE_1] = Location::Crate(RC_GV_CRATE_BRIDGE_1, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-764, 148), "Near Bridge Crate 1", "GV Near Bridge Crate 1", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_1)); + locationTable[RC_GV_CRATE_BRIDGE_2] = Location::Crate(RC_GV_CRATE_BRIDGE_2, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -125), "Near Bridge Crate 2", "GV 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::Crate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", "GV 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::Crate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", "GV Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4)); 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", "GF 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", "GF 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", "GF Outside Center Crate 3", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_OUTSIDE_CENTER_CRATE_3)); @@ -1659,6 +1663,7 @@ void Rando::StaticData::InitLocationTable() { // 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", "GF 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", "GF 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", "GF 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_LEFT_END_CHILD_CRATE] = Location::Crate(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", "GF 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_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", "GF 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", "GF 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", "GF Kitchen Crate 1", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_KITCHEN_CRATE_1)); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index a7fd39c66e3..0a762662281 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -1573,6 +1573,7 @@ std::map rcToRandomizerInf = { { RC_GF_ARCHERY_START_CRATE_2, RAND_INF_GF_ARCHERY_START_CRATE_2, }, { RC_GF_ARCHERY_LEFT_END_CRATE_1, RAND_INF_GF_ARCHERY_LEFT_END_CRATE_1, }, { RC_GF_ARCHERY_LEFT_END_CRATE_2, RAND_INF_GF_ARCHERY_LEFT_END_CRATE_2, }, + { RC_GF_ARCHERY_LEFT_END_CHILD_CRATE, RAND_INF_GF_ARCHERY_LEFT_END_CHILD_CRATE, }, { RC_GF_ARCHERY_RIGHT_END_CRATE_1, RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_1, }, { RC_GF_ARCHERY_RIGHT_END_CRATE_2, RAND_INF_GF_ARCHERY_RIGHT_END_CRATE_2, }, { RC_GF_KITCHEN_CRATE_1, RAND_INF_GF_KITCHEN_CRATE_1, }, diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index 516d8ac706f..50172a54cec 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -20,6 +20,7 @@ #include "z64item.h" #include "randomizerTypes.h" #include "fishsanity.h" +#include "ShuffleCrates.h" extern "C" { #include "variables.h" @@ -1341,7 +1342,7 @@ bool IsCheckShuffled(RandomizerCheck rc) { (showOverworldPots && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonPots && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_CRATE || - (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || + (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea()) && GetOverworldCratesIncluded(loc)) || (showDungeonCrates && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && (loc->GetRCType() != RCTYPE_SMALL_CRATE || (showOverworldCrates && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || From a450a3ff4496942bf24402c9ac94785acf78868a Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 17:41:31 -0500 Subject: [PATCH 36/52] convert to shipinit --- .../Enhancements/randomizer/ShuffleCrates.cpp | 102 +++++++++++++----- .../Enhancements/randomizer/hook_handlers.cpp | 22 ---- 2 files changed, 77 insertions(+), 47 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index ee6682e0aab..d30ede98f1c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -11,8 +11,9 @@ extern "C" { extern PlayState* gPlayState; } -extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); +#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).GetContextOptionIndex() +extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { static Gfx* dList = (Gfx*)gLargeCrateDL; @@ -154,12 +155,70 @@ void ObjKibako_RandomizerInit(void* actorRef) { smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); } -void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { - va_list args; - va_copy(args, originalArgs); - - // Draw custom model for crates to indicate it holding a randomized item. - if (id == VB_CRATE_SETUP_DRAW) { +//void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { +// va_list args; +// va_copy(args, originalArgs); +// +// // Draw custom model for crates to indicate it holding a randomized item. +// if (id == VB_CRATE_SETUP_DRAW) { +// ObjKibako2* crateActor = va_arg(args, ObjKibako2*); +// if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { +// crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; +// *should = false; +// } else { +// *should = true; +// } +// } +// +// // Do not spawn vanilla item from crates, instead spawn the randomized item. +// if (id == VB_CRATE_DROP_ITEM) { +// ObjKibako2* crateActor = va_arg(args, ObjKibako2*); +// if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { +// ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); +// *should = false; +// } else { +// *should = true; +// } +// } +// +// va_end(args); +//} + +//void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { +// va_list args; +// va_copy(args, originalArgs); +// +// // Draw custom model for crates to indicate it holding a randomized item. +// if (id == VB_SMALL_CRATE_SETUP_DRAW) { +// ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); +// if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { +// smallcrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; +// *should = false; +// } else { +// *should = true; +// } +// } +// +// // Do not spawn vanilla item from crates, instead spawn the randomized item. +// if (id == VB_SMALL_CRATE_DROP_ITEM) { +// ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); +// if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { +// ObjKibako_RandomizerSpawnCollectible(smallcrateActor, gPlayState); +// *should = false; +// } else { +// *should = true; +// } +// } +// +// va_end(args); +//} + +void RegisterShuffleCrates() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_CRATES); + + COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO2, shouldRegister, ObjKibako2_RandomizerInit); + + COND_VB_SHOULD(VB_CRATE_SETUP_DRAW, shouldRegister, { ObjKibako2* crateActor = va_arg(args, ObjKibako2*); if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; @@ -167,10 +226,9 @@ void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, } else { *should = true; } - } + }); - // Do not spawn vanilla item from crates, instead spawn the randomized item. - if (id == VB_CRATE_DROP_ITEM) { + COND_VB_SHOULD(VB_CRATE_DROP_ITEM, shouldRegister, { ObjKibako2* crateActor = va_arg(args, ObjKibako2*); if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); @@ -178,17 +236,11 @@ void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, } else { *should = true; } - } + }); - va_end(args); -} + COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, shouldRegister, ObjKibako_RandomizerInit); -void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { - va_list args; - va_copy(args, originalArgs); - - // Draw custom model for crates to indicate it holding a randomized item. - if (id == VB_SMALL_CRATE_SETUP_DRAW) { + COND_VB_SHOULD(VB_SMALL_CRATE_SETUP_DRAW, shouldRegister, { ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { smallcrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; @@ -196,10 +248,9 @@ void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sho } else { *should = true; } - } + }); - // Do not spawn vanilla item from crates, instead spawn the randomized item. - if (id == VB_SMALL_CRATE_DROP_ITEM) { + COND_VB_SHOULD(VB_SMALL_CRATE_DROP_ITEM, shouldRegister, { ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { ObjKibako_RandomizerSpawnCollectible(smallcrateActor, gPlayState); @@ -207,7 +258,8 @@ void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* sho } else { *should = true; } - } + }); + +} - va_end(args); -} \ No newline at end of file +static RegisterShipInitFunc initFunc(RegisterShuffleCrates, { "IS_RANDO" }); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index b0ee93cedbd..2d9fb598722 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -16,7 +16,6 @@ #include "soh/Notification/Notification.h" #include "soh/SaveManager.h" #include "soh/Enhancements/randomizer/ShuffleFairies.h" -#include "soh/Enhancements/randomizer/ShuffleCrates.h" extern "C" { #include "macros.h" @@ -2372,11 +2371,6 @@ void RandomizerRegisterHooks() { static uint32_t shuffleFreestandingOnVanillaBehaviorHook = 0; - static uint32_t shuffleCratesOnActorInitHook = 0; - static uint32_t shuffleCratesOnVanillaBehaviorHook = 0; - static uint32_t shuffleSmallCratesOnActorInitHook = 0; - static uint32_t shuffleSmallCratesOnVanillaBehaviorHook = 0; - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) { ShipInit::Init("IS_RANDO"); @@ -2412,11 +2406,6 @@ void RandomizerRegisterHooks() { GameInteractor::Instance->UnregisterGameHook(shuffleFreestandingOnVanillaBehaviorHook); - GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnActorInitHook); - GameInteractor::Instance->UnregisterGameHook(shuffleCratesOnVanillaBehaviorHook); - GameInteractor::Instance->UnregisterGameHook(shuffleSmallCratesOnActorInitHook); - GameInteractor::Instance->UnregisterGameHook(shuffleSmallCratesOnVanillaBehaviorHook); - onFlagSetHook = 0; onSceneFlagSetHook = 0; onPlayerUpdateForRCQueueHook = 0; @@ -2445,11 +2434,6 @@ void RandomizerRegisterHooks() { shuffleFreestandingOnVanillaBehaviorHook = 0; - shuffleCratesOnActorInitHook = 0; - shuffleCratesOnVanillaBehaviorHook = 0; - shuffleSmallCratesOnActorInitHook = 0; - shuffleSmallCratesOnVanillaBehaviorHook = 0; - ShuffleFairies_UnregisterHooks(); if (!IS_RANDO) return; @@ -2503,11 +2487,5 @@ void RandomizerRegisterHooks() { ShuffleFairies_RegisterHooks(); } - if (RAND_GET_OPTION(RSK_SHUFFLE_CRATES) != RO_SHUFFLE_CRATES_OFF) { - shuffleCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako2_RandomizerInit); - shuffleCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleCrates_OnVanillaBehaviorHandler); - shuffleSmallCratesOnActorInitHook = GameInteractor::Instance->RegisterGameHook(ObjKibako_RandomizerInit); - shuffleSmallCratesOnVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleSmallCrates_OnVanillaBehaviorHandler); - } }); } From 9169e4773150da03a13ccd988790461af033f371 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 17:42:51 -0500 Subject: [PATCH 37/52] whitespace --- soh/soh/Enhancements/randomizer/hook_handlers.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 2d9fb598722..b14f4187cd6 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -2486,6 +2486,5 @@ void RandomizerRegisterHooks() { if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { ShuffleFairies_RegisterHooks(); } - }); } From 74952703db88e2601fd6360c438fae2564e89143 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 25 Jan 2025 17:46:38 -0500 Subject: [PATCH 38/52] remove old comments --- soh/soh/Enhancements/randomizer/ShuffleCrates.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index d30ede98f1c..d672233cc38 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -127,8 +127,6 @@ void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); - //ignore crates that are either OOB or inaccessible in logic (child-only GV + GF) - //TODO add back when able to exclude from tracker if (actor->id != ACTOR_OBJ_KIBAKO2 || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429) || From 4c0610a4db342613901ff930293d3a45c3ab7569 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:44:35 -0500 Subject: [PATCH 39/52] assets --- .../objects/object_kibako/bosskey_crate_top | Bin 0 -> 8284 bytes .../object_kibako/gSmallBossKeyCrateDL | 14 ++ .../object_kibako/gSmallBossKeyCrateDL_tri_0 | 11 + .../object_kibako/gSmallBossKeyCrateDL_vtx_0 | 26 +++ .../gSmallBossKeyCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallHeartCrateDL | 14 ++ .../object_kibako/gSmallHeartCrateDL_tri_0 | 11 + .../object_kibako/gSmallHeartCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallHeartCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallJunkCrateDL | 14 ++ .../object_kibako/gSmallJunkCrateDL_tri_0 | 11 + .../object_kibako/gSmallJunkCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallJunkCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallMajorCrateDL | 14 ++ .../object_kibako/gSmallMajorCrateDL_tri_0 | 11 + .../object_kibako/gSmallMajorCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallMajorCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallMinorCrateDL | 14 ++ .../object_kibako/gSmallMinorCrateDL_tri_0 | 11 + .../object_kibako/gSmallMinorCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallMinorCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallRandoCrateDL | 14 ++ .../object_kibako/gSmallRandoCrateDL_tri_0 | 11 + .../object_kibako/gSmallRandoCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallRandoCrateDL_vtx_cull | 10 + .../object_kibako/gSmallSmallKeyCrateDL | 14 ++ .../object_kibako/gSmallSmallKeyCrateDL_tri_0 | 11 + .../object_kibako/gSmallSmallKeyCrateDL_vtx_0 | 26 +++ .../gSmallSmallKeyCrateDL_vtx_cull | 10 + .../objects/object_kibako/gSmallTokenCrateDL | 14 ++ .../object_kibako/gSmallTokenCrateDL_tri_0 | 11 + .../object_kibako/gSmallTokenCrateDL_vtx_0 | 26 +++ .../object_kibako/gSmallTokenCrateDL_vtx_cull | 10 + .../objects/object_kibako/heart_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako/junk_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako/major_crate_top | Bin 0 -> 8284 bytes ...lBossKeyCrateDL_f3dlite_smallcrate_bosskey | 21 ++ ...SmallHeartCrateDL_f3dlite_smallcrate_heart | 21 ++ ..._gSmallJunkCrateDL_f3dlite_smallcrate_junk | 21 ++ ...SmallMajorCrateDL_f3dlite_smallcrate_major | 21 ++ ...SmallMinorCrateDL_f3dlite_smallcrate_minor | 21 ++ ...SmallRandoCrateDL_f3dlite_smallcrate_rando | 21 ++ ...mallKeyCrateDL_f3dlite_smallcrate_smallkey | 21 ++ ...SmallTokenCrateDL_f3dlite_smallcrate_token | 21 ++ .../objects/object_kibako/minor_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako/rando_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako/smallkey_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako/token_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/bosskey_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/bosskey_crate_top | Bin 0 -> 8284 bytes .../object_kibako2/gLargeBossKeyCrateDL | 16 ++ .../object_kibako2/gLargeBossKeyCrateDL_tri_0 | 6 + .../object_kibako2/gLargeBossKeyCrateDL_tri_1 | 9 + .../object_kibako2/gLargeBossKeyCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeBossKeyCrateDL_vtx_1 | 18 ++ .../gLargeBossKeyCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeHeartCrateDL | 16 ++ .../object_kibako2/gLargeHeartCrateDL_tri_0 | 6 + .../object_kibako2/gLargeHeartCrateDL_tri_1 | 9 + .../object_kibako2/gLargeHeartCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeHeartCrateDL_vtx_1 | 18 ++ .../gLargeHeartCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeJunkCrateDL | 16 ++ .../object_kibako2/gLargeJunkCrateDL_tri_0 | 6 + .../object_kibako2/gLargeJunkCrateDL_tri_1 | 9 + .../object_kibako2/gLargeJunkCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeJunkCrateDL_vtx_1 | 18 ++ .../object_kibako2/gLargeJunkCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeMajorCrateDL | 16 ++ .../object_kibako2/gLargeMajorCrateDL_tri_0 | 6 + .../object_kibako2/gLargeMajorCrateDL_tri_1 | 9 + .../object_kibako2/gLargeMajorCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeMajorCrateDL_vtx_1 | 18 ++ .../gLargeMajorCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeMinorCrateDL | 16 ++ .../object_kibako2/gLargeMinorCrateDL_tri_0 | 6 + .../object_kibako2/gLargeMinorCrateDL_tri_1 | 9 + .../object_kibako2/gLargeMinorCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeMinorCrateDL_vtx_1 | 18 ++ .../gLargeMinorCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeRandoCrateDL | 16 ++ .../object_kibako2/gLargeRandoCrateDL_tri_0 | 6 + .../object_kibako2/gLargeRandoCrateDL_tri_1 | 9 + .../object_kibako2/gLargeRandoCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeRandoCrateDL_vtx_1 | 18 ++ .../gLargeRandoCrateDL_vtx_cull | 10 + .../object_kibako2/gLargeSmallKeyCrateDL | 16 ++ .../gLargeSmallKeyCrateDL_tri_0 | 6 + .../gLargeSmallKeyCrateDL_tri_1 | 9 + .../gLargeSmallKeyCrateDL_vtx_0 | 6 + .../gLargeSmallKeyCrateDL_vtx_1 | 18 ++ .../gLargeSmallKeyCrateDL_vtx_cull | 10 + .../objects/object_kibako2/gLargeTokenCrateDL | 16 ++ .../object_kibako2/gLargeTokenCrateDL_tri_0 | 6 + .../object_kibako2/gLargeTokenCrateDL_tri_1 | 9 + .../object_kibako2/gLargeTokenCrateDL_vtx_0 | 6 + .../object_kibako2/gLargeTokenCrateDL_vtx_1 | 18 ++ .../gLargeTokenCrateDL_vtx_cull | 10 + .../objects/object_kibako2/heart_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/heart_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/junk_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/junk_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/major_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/major_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/mask_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/mask_crate_top | Bin 0 -> 8284 bytes ...eBossKeyCrateDL_f3dlite_crate_side_bosskey | 21 ++ ...geBossKeyCrateDL_f3dlite_crate_top_bosskey | 21 ++ ...LargeHeartCrateDL_f3dlite_crate_side_heart | 21 ++ ...gLargeHeartCrateDL_f3dlite_crate_top_heart | 21 ++ ..._gLargeJunkCrateDL_f3dlite_crate_side_junk | 21 ++ ...t_gLargeJunkCrateDL_f3dlite_crate_top_junk | 21 ++ ...LargeMajorCrateDL_f3dlite_crate_side_major | 21 ++ ...gLargeMajorCrateDL_f3dlite_crate_top_major | 21 ++ ...LargeMinorCrateDL_f3dlite_crate_side_minor | 21 ++ ...gLargeMinorCrateDL_f3dlite_crate_top_minor | 21 ++ ...LargeRandoCrateDL_f3dlite_crate_side_rando | 21 ++ ...gLargeRandoCrateDL_f3dlite_crate_top_rando | 21 ++ ...mallKeyCrateDL_f3dlite_crate_side_smallkey | 21 ++ ...SmallKeyCrateDL_f3dlite_crate_top_smallkey | 21 ++ ...LargeTokenCrateDL_f3dlite_crate_side_token | 21 ++ ...gLargeTokenCrateDL_f3dlite_crate_top_token | 21 ++ .../objects/object_kibako2/minor_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/minor_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/rando_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/rando_crate_top | Bin 0 -> 8284 bytes .../object_kibako2/smallkey_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/smallkey_crate_top | Bin 0 -> 8284 bytes .../objects/object_kibako2/token_crate_side | Bin 0 -> 8284 bytes .../objects/object_kibako2/token_crate_top | Bin 0 -> 8284 bytes soh/assets/soh_assets.h | 48 +++++ .../Enhancements/randomizer/ShuffleCrates.cpp | 193 ++++++++++-------- .../Enhancements/randomizer/location_list.cpp | 48 ++--- 133 files changed, 1697 insertions(+), 104 deletions(-) create mode 100644 soh/assets/custom/objects/object_kibako/bosskey_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL create mode 100644 soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako/heart_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/junk_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/major_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey create mode 100644 soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token create mode 100644 soh/assets/custom/objects/object_kibako/minor_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/rando_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/smallkey_crate_top create mode 100644 soh/assets/custom/objects/object_kibako/token_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/bosskey_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/bosskey_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 create mode 100644 soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull create mode 100644 soh/assets/custom/objects/object_kibako2/heart_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/heart_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/junk_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/junk_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/major_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/major_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/mask_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/mask_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_side_bosskey create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token create mode 100644 soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token create mode 100644 soh/assets/custom/objects/object_kibako2/minor_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/minor_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/rando_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/rando_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/smallkey_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/smallkey_crate_top create mode 100644 soh/assets/custom/objects/object_kibako2/token_crate_side create mode 100644 soh/assets/custom/objects/object_kibako2/token_crate_top diff --git a/soh/assets/custom/objects/object_kibako/bosskey_crate_top b/soh/assets/custom/objects/object_kibako/bosskey_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..4b055671e4805a8800f673465022fcc70335858d GIT binary patch literal 8284 zcmd^EPiPxw7I*d%8xd+FmW?nWI|x%mSQdK^3%cyqCX{Fprk*vsWe{c=j46{+g58@A zyF?~*BVmFigwqHiJHlj>A%u45Nx4PFl**VA31ea-d z>ehJXFmo_nRmvQgHJPDu6JB-s&;WtNNok}`BU76-gA$_VN^=jv= zoSh@0+jkoHfCG*qeu%&|bzOO4lT*$bBrAszc#7G0F5j4gRVtb4>HG-)%zTc{95{{Z z$(0GGL1Z%#${+B`6@yhH)CH&R)bVS<#<$$-@0=YxjnFP}4pDH0ESM3_X>bM6RCOik zo~%r`Cz)zGt{Mn+79oZbV|IwC$XI0ocMZAL-9Gh5&V+l;BBJ1PEuDi=C;Zq8s_p#Z z$^<`lZn_Hm9yBmd`>Q@N513qoI3QdF2S|FS>){R8<;r|>hV0znGq(?k`_#)cBu-oT zrThftcN&yFZP9N?w0WR6kzXWJDTD*T1>#DQ>j8mJMKb;h?vR`qX;@X*bK$9h zQ4RNGnS4Ud{33LnwCvRW*oa|{?j%OQeS>nRt;zk=UTP0qfl_-@&`sI`2O34V(uPWo zAi2<(O}i*E^$zZAXmKuxJC$HgG#P4T`2>>Ar}h#tqcplRdTZ$1|2GZK1hhH~`h_m^ z-Rkg7ju`^sTgF9K9r0gRjts{0dr-&W8Z%gRb$BK*qGXtCyQJWE z4A120**9YtHzp(XiWxgf;6`{Do{=?7nID7yo0I!fV`=((g?Rc}=%= z#jR(0o_F-FootwOTqg_qee5bkcua+|C@heb4Lu)OtZ`|K9sl{R6s#o>F_7 zX$_N_XD!Gtt$+jKuOywinSh;k((wQv(U;oO{)ts`a^JD;J@>zC9e@rypHKtP7Hr-5 z-1FMYo@bA{#~q*2`ycrqwJM#*<(H^rv>tp!{9p8MWLc%D`@*(Xey73u>C|bfNPc7q z;+qNWQKsUV?~Chx&EIHMTZhoVV`BPV_s!9p&JBFNYA+N0=xwXw&jP>Nd9q>;zNE^Zh8PC$?Zq-@21x1jRE_w z(SAmW8l(^9<1I+<&w5#ZwpD?RH~bC%uV1f!U3rv!WP0!UmG))7%D4V(JK1zq`?LV^ z<{tb{YKsvQ-xm)M|4XuW6D=eEI+6SrcPIDJhcV9~n}MqNORdA!3qR|b-Uw;yi_P1c z=EirM7dEq-rAM(x*X}<9?cCq>V(nzXK~`t()Xa!_5BZ`0i@WeQ=|Mzx_#Qh-^n2)h z;lU>=KdTb*UC{57yUf9IzjpcFVL4m8R{XH|;q5Q}X$Eu~-?#r|-oAEo_2#piJ2!WV zv*mgk85a@E=oLz#*I@h&UnL4WU%Y^sNOvFfG%FY8{|Fy`q1|-mpwR5xXdBSKN^fpt zL9-k0HP#y6HTM3!w)yS7tCXJJS8TA4k_-&bnL_+X{GS8<488n1a-UPb4&6ik96HaO z#oYydMgAxGN4nvPWWagbemaTFRssHb@BG#^pkDy~1zKREw7CZx?Bd;pXUDDM>3O2k z@=_g87ZNe8Kf_l?QGt;C(SHLU5^MgEdW0vD|J^dOw4itq)}nWMpLUkJkNtIez@weJ zCa{&DiOuX*?9sQriO5ejCnP&!E;BcINbM(r`Zu~WH3o^G_iTwBEB)BjWw;L--&xaQ{PaPzpJ?Yu+D`$h_>ol-(peMr$+Hp#B5=#0Yj7!A`^x z+e3bEK>X{-$q_#5kJSF@D($D4V8uX&eb;^;I)DbYzSy`e_@#}~mPGxt!_HFP;ZA~H z6YOSSKgb``{0r?@X>0CofD2U719mU03a9vq5yYQ#|JBeZpF4>d1Qqbi2EhmCbBus{*2aFA7BSS*+zHR=`fz?Z?w8}0>EZgj_^NF ze9>S<@)$S(AxC)L)5)WE-6yI8csybreiv(PJWaJ;J2`p^vl+cs;$Ll8g8YcTi@U71 z8qw4e@!1DRM}V9h=wIuPW}X0<=*;Ive4?SeBsul*!> zPOV9&2QNe(W&K6|8C@0I^e7E�DB>zxP+<{Aca3>01sa@&#-EWS5 zMm9h;^t1kY*X#KH>%t-|){`0IVq?gsCkUB?sWGiTi4poGKFEx`vm$(U1o`bye&jzZ zSc$9H+NCHLPQCc*>14-;A7-g}`2AL)X(59JGq~qROlek;+2d&|F(UQPG!v9tZAtl& zhnbHj;QgqGijOR1Lena>c&c)c=_1DOgiZ1h^XI0{^7)3%>&CQSrRL7n+O_XjN-A?a)(> zXcOswcIkhHsqcEPm-h|3JS`yW}2o zuK?d?y*zXB!;`G(YHB~|KeGBeYp3#wH~vqxlv`(~!A>eT z?_kWJznre30wMoM{3G_oQ@{b_$1Z?98Sg^>8(t+oJ)*EpQe3$Lm+17Gqc`YAiC^;9 z+LzmxJ4>C<@{Z&PMl~qp!KsJ%Mx=kS0Ps16HOOAz%7OgApQHRDZ=eNa2NJnq&L}niYF<28Y`~qj z$d6tCvW56FMpp5O3Sxyqx57@v!s#y0MVwmq4eU=1%(m9MZ;yUPXMkNvp-G9Pr-<^W zHIRRq*F|=TK{-`hU>`vHNBW;J%uJP55dw$wBCg3is9Y4bkN?lmodmFOk1%2D)VouL>bQFb4@b+yPW+jM@?jJczWH>;6Tv=5E-ZT;i|OoS$rc4-YUR{28fS+FLcFDpZ$(K9@?M#FLq}n z`n*zTdpv_=gGAg=o76ecVP#Y-)o*G~_a9gn_QcKz=T$__9I#Kt2d5u+win=YpEQC| zsC?W->Dd-*i`Eo5?b}P8o(@LmeR5KWUpV*520O44Prc(xh-KKm|w8=ilzhL!~$&s~LhGR9oQdL@!#r^cNde}}ub z@O%@Ji9Vn;eUE*WoDcFBy$R6=#;> zUM=_X|2f`;vrS|bb~eG=1b6h|JATVZ^%?Oe{%=fuh#Bn^2~Q)BlQGenSh+Wtf4C-A zwNH6aJou(|zu`(i)s^(yOemi^TJO0o-{Km0y!bsiv9;q2`_6DB&JKFgFcxH{%tN>OA3n6F zatd^4j63m=2jyR$D-Xm#Z_CwrWfc}W48HM;D=O(Tjyp@_G2}^Wi|#{3bE?Ay<$&C9 zuE-3XqHamXl#%cr%&zcVh{SuWZp-)xSNQ#fFX{~CGr+>!U^aCSo)9qCqn3w#1Z#ng zr&h?lpveqD#hqwVye5zvJCWcn(uCSc^^5W7PgEwY++qDD7s3g$z0`kH9nl7T1Kg5- z;X0w~3;&_~(87RE$au-;qFbpVtSEZ+A-*OY$jXYV|I?L`z}IKQ#GVbSiHG$<=|y(c WAFh-OtATfp(+{78qk`|i*Z%`M1f4Vh literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL new file mode 100644 index 00000000000..c42484ebe6c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 new file mode 100644 index 00000000000..96b7903de90 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallBossKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL new file mode 100644 index 00000000000..1fd3a1f8b7d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 new file mode 100644 index 00000000000..bbcb5c4c97c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallHeartCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL new file mode 100644 index 00000000000..e0d09ffa485 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 new file mode 100644 index 00000000000..a0af63d7fb3 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallJunkCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL new file mode 100644 index 00000000000..9999462e6f0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 new file mode 100644 index 00000000000..6eea14d8ca3 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMajorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL new file mode 100644 index 00000000000..8237aa0e73e --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 new file mode 100644 index 00000000000..c1c8d6cfc89 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallMinorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL new file mode 100644 index 00000000000..17467a73bc8 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 new file mode 100644 index 00000000000..6df8755b2f9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallRandoCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL new file mode 100644 index 00000000000..e3cc0ebe1de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 new file mode 100644 index 00000000000..692fd7ec322 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallSmallKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL new file mode 100644 index 00000000000..dc73b60898b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 new file mode 100644 index 00000000000..88a23f0e7fb --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_tri_0 @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 new file mode 100644 index 00000000000..1a288d21317 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_0 @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull new file mode 100644 index 00000000000..9b63c4a72de --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/gSmallTokenCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/heart_crate_top b/soh/assets/custom/objects/object_kibako/heart_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..f5b47bd092e88a063328f34c17caf883277ded00 GIT binary patch literal 8284 zcmd^EPe>eD8rSt;`XH?gi=9JAhapVM9M;_2)3!7VDTYBB7j}y#tihAyFyy+w-}k*&)skIy@9Rfb zy{dZe{l0(i`@Z+=>FMeD%OC$V(Tn@p-=B2&L-T+B`we=g%})p2{X zn3xSX#tk*VQQ^GWrk-?UJJ)6##1`B3S>Afkos8EJhELBi{exV47QdX2KENwX$|iY@S$C+DR2*5A}bCh&=%%`{m4Z@T4<|$!k_T!3y*?Md`ir@A#pj~ zDjpQT0WCmu`VC2a5WQ$;UVTcQYkMjI5Y=w99p=N+4By2m8J`TrsagIgbN+M1&QG{b zx;0i#Ws;dxrg)g2m>Hmkh*sPiqRT?diwZ{9$`yKpc4SA3r z6nMc+%sCUE8E~l=pb9^f0^E5%c&=bfC0mivezt;sZSZ5rYdig;Wy(I-JJ{Rve@+*A zEq$mB`{l#?U^wc-Zy&xnujBLIlbJ*&(VL(zmQ&@Z=LOgX@8Km%YYLv5V_Tv zFQBI#sdsogeGmQ)kMSdX_$EAL6rPA5uUHklYKv=xZ@S5TmHr%4N|nT$Awj}$Fqq+p z^zL|ndKW&AJF^a>Wey%%ShDz(9q3qx8VfWtF{4C3ZE>Ai(%7L_%nt<1AJ-b^PGqn$ z7~QaP3`ulnWbi*){;S1@p88VYl{`{E=8pEiBh^VLf2b!|w3H;l#%h6N8Ii_eJOm=5 zW+ARwrZ6#o=zsL^qQxJC^h8(wX&;e?_|RTjVx+!dTlfQyR$AJNny20q;z!p0$r7Zl zFj5!djFgD`i1fKO<5KZ(`DKI;-Kz#gcGaoobwS)!oda9!7-5qK;0ro9=mUWZ8)p(3 z=0VC{WK4_~fsgEkH_TJT1B;*N9W6(45j`zA0htxV9A&>MXVI0quzE1sgFRBu>(_{CAzk(b?Ym&ef*3v$k`(wdUW*eg;jHmBtY5)dNz*2M3Ce z`x3N){Fn&U^z9R>aU%U>IOVv?C-lzU^KDCt}h~!UYBAebE+I|cP-|d|~ zd(-rQ@~Y`IYdc?UeZ2W)r*ZslXS#k|JE~VVhHI1cvCV$vp*}u0Sw0Lh}Wq-pBZg(0tL};&%hkf?Uz6#P9$1{_x*cEAemR`t6Q?C-~a` z+Q;3m996%6@=5-I8%V5grGQV_F7#$&y7ndZ`0%{SELI=!5tk;c{K-su7g3s(R|VcR z-MmbhYeOrGKkSqAY5l=EB)3ni(9Atbzj$wPb?E8k7junU{&%_xt^O|{t5NF0K(39S zPyNrfxpQC?wD@9w*j=+u>(gJZ)~nR=$^mQ)O)KL1q;dg|z&HL@C;1h$xUyfbb{fH1 z>4ro@WB|24v%2fdDt4TRh(B$Of!+8v{=e! zAsigkk2~K4XZdCIKa0=&3yHA;BKet-s0FMFqyHXo$^63==)@jfc{){pwf=Ggo<`&l z|H#M>$=8nrUpP>%nl;LQGtTwL_@nYCN)GmNTFZ0a!pa+a1o$9y0>4!I6MwX%HMsj( z^)=S?4N3^2{>cNSrOrd5MpSQ%0OBR}xP2f)MnGWj4!M)R-^ziq9(Xv{oN@9V~A4&e^h?8;z$ z?o~`wj_{#<;&bh8zJ>qS=z&BL?Ju&WaX|b+o>ec<&>|yL>(=%Yu72*r$NN(z|7iZ@ z%-r9z4w7t04&sapR{t9RHFo5eA6}_`|KmR@hu>nY-}Ub<-0>L&?%;=Kw(!hVZ|U3k z{XaKG@-MYkVFhK^-(W9MRWjUT9%}*J9U&H5e6CVtJgiCXgLD4&$lfV)n_8F}h*rI5 zo$_n^#W&;tcW=EjS6G%AWR@`#f0D4jW_4svi8;iVS_J6xM*c2*>d48*TepsG@0~WM z>Qz}`3+iLW;uhOvfc2yLtK)Z%Jgw|_<$hB$aH>qplLx75AwSVgE<#S~j(-x9oLq&g zV|n2=fs0a$OiRVFDDsD# z)FyYPkKR4M=InFdW%g;Za~Om7nfe3%FZj?cZ6NZ?`kM_ReAJ(r-}mDj0r?+wId)2D z;S7O0CcpaRlg3E(3tjn$28Jr}&FRMD#w}-mu$L7xV~3ocU}V-AYv~RM`>%8I!~RRm z#s%05t*rI`R5^=PSIm+psg!v?pobKfwrZW(&eLZ#WWdQE4kQww3V8PB;MuO^-PQJRiqX`MdZN} zUHB#FAN7C|Px#n^rLbCN258y*#P%n@d|a<0Cc4c_!AS6!ILxUM(M9jbs(NbYkB9na zR#*L}TgmsM&bO3VXf@N2BJk!mo>J6QTv68dl zq>wETeb%j{cWwLyYRuwO7kaKrAK@O{;wLkXY7!b$E0Rl|7;E14DqOFdmwx%@)|JPv z?;lwt)~n{kveFfQ5&zZyZT#oXgz~fMW<=%*d^dg~GX_4HA-Rs&2j>=O>&dc=X>%u< z&(h=g1u_}0qI7yrpl9&d+w7|KdwNG(?9V-Ah>!S)EQ_~@fT8??k8?!!B_}+COe2cR zc@6NCFRc%Bwe!kKk5wbld452C83P#q^b88;4~U86Q1NL2#z*F)sQzO9g?&+*ur|!b zxJT#tFiyy&TI5^$I%@+ZMs*umL|ZZ^a}B?{h(E^un1OpelEgpB2Gp>F|3ujOU+@ho zJ%i{ZoZP^lwJjD8@u@$=dPIAz?KmH`OetvF5Fh!+O0V%(bw-O}hG_q-`ycgQNC6*_ zILa2=f(JY3Gq1D>bigafS_b;XH`PCVJ6U2qJc{fe5G6*bYz>X^Pe28l@UU3#*-K|3TXw`OE!Wq#A1JgLW7z4`GS zpY_VO`c-XW@f1~dx$tBApC7THtO@$FRw~+xo{WcyuhGLf+W3L2Wv*u-`Nr?~8Z-B( zuZ$xu$4WiQQG6>aOJ`QU;%o+A`WQ^KZ7;o(lk;SH%3I=~A22u{pM>D8SPA+Zv!ipU zdu?0iAOa~u;vBY*+`|#)-k$GcW-<6&D_Ap(BYFnF*o}(&+!)1Vgi%Dpx5KeA5BMQBt*L@Fl)#KdWVpX?SAv0nf}XUGq_1khPOR6b_U}`$grjTyi!=#%NeV z$V7Ey0LcORpGW3&EpubZ6^1oID`qp9t)QTwP*P5XNFY^KK+0wj6cjW`)ym9bGP9td;J^e%EP`e+ zG~B-sKYsSD(^vLX?R5Fx{y2T!^WCjGy?&>~QJI2uaq$d}8Y3kG63H{>gaq;~2{PwtT4^LY5wcOo} zwLUl2GKZ+m_fuM@uY8C%j?y$z0yf< zbVZBxP`e`uo}SLfo9oNbY}o(l&u!~{>o(SyX=y(9-P6u@xwNB}ivGnz+Tb`iex_vg zoC-=>c7FZtB879yi+#iX;5h8lMzhhZO9h5&P-O%iEi2(5#aB->(2l)t#nJtf6Af<= zb>br;72&PpEwhhj9cE3lffSxiBICN8ku23(&UMK z$62qp7?aazHaLQR@c^Z<-Hq_|kU9uH+LIZ{0_!2!V6$#zbpEz_SVc-oat#X%j&MtL zB!4_L$l~vZfBjne>k;^rhFvYgy|krg_WH)oc&6+>ID%LiyWNwm_pi@yhvoOfe^=t8 z|Kvm+vKE1KOJ)49y1KQ`NT?*SIaW`ck}L2Y9Px5npTJ)a_oKt|u>8+h`{R8okcg?t z_^a(>d1#QWVk0&{^JriC5Bs1|Ev>}QZ=Nlj2&>&;Y0eIg;|&$~H|`&mkO(AUfX4IjIa#R1_v&^abdw zQSXVr(G1(8JLdoqPi5xzgN>&1(tkQvUuvmpyrG}PLEjN=83xo`d>VN5_~EV`@Jz!1<^nFK~jpKL7$d7 z^8IjF-oH}eLC4zGK+iAz7<{6f98`DePtE{Npt3&^XRhh#c%rp@D$iesgQ7<@wiiU6tn(uaOoXUN*0}*6foj=OfN^Aa-kGcO0j+4{P z69^z;`Lemacq18BG|(b3D@B|9K~kF z!9@!C$X5Q*>al9})cf{@6PWW?dGHL>!RJ>XbvgQj-^DaWc?Q2EXrm+g=Zy^fu2%oi z%yIC&b>}Y9wSQ};Xl4~=M1xBr01Mbx8doD(&L8nZf&SQDe4hT&B>z%NjV0qN+=xHx zins05c_Lm<7&+>SBrSd`8D|cD$NoHHfANjoL^Pb$(Fj+9WVn*#%z!dh56MviY_$L~T z=S06Fp3MC6agN?RagRlke|%WWD6IGsA8C~X|66@lyWn&FPv=;M8NI{PW{;>zV}H(_ z)CC5*fkeUGjK;iWEwKef(oD4GH8eKAgd= zJR$$3`ivj_Ma>gA>sW(_W)RWG$#eCqG` zBd*H>aPiK7&r1L6OK)khAX1_S@ofFY65Koe1yM-yDKvsQAM^_UCRwOxxp2$?c0bOnnjiVte)*(SEyU#5&$$75kI_ z;|=`O9_jogj}-n-K#OngB7qUr_KdXLWbs6N#M{2|cpnv??+PFq{ovofaz|v$*Z=zc zJvp(4?0Q*Ut+de_O~ehhu|SNV4|Y!M@cqI22WMf+o(V+IZ1xdeN9PKjPQqiyme+yM2ew zce_@U6*1Xkw1{Mc)e39XLX&mnXmQ%U`NvGqLl4JL(uZ&8+?5zdo=~2@vvOKp+k97=a22sedZU#hzPuarC$1}B;H}{xSL~1%U5>%w| zUH!s|B=wG@>RI~ByB$~U4}Kv;|9C*I^$cFk#CFjO?L;fh=`jaQ=sayW$MgWY@mF>e QgISwALI=;Rv2Nqc5td^Jv>+Uyk|o_yo!FUG{xu;GE8$>BND-^lb#duZO#nh51l=Kx%X@{q zLK;C32;qN)yh2_f-#4?%r7YiF(ge{!%O$zoZ)SFOW;pEidc8kS|MYZ&rD_5tN0m#0BHoMKP z+E?f5ygz>(zJb2azkmKd-|SZPvV66B+^NnS#nCU8PktG!oAqf0TI!6^s?N6AcHNAp zod22>pWLlaIY#^n|82OcNy~C$e}->lMqozwx9f&a#fNM38KsB(@u7l@=9q1-@%I<< zSNm-HHe|a#0e|1hFVYA3!;IN>JY7Ny+0+Jzs+9;lnBz(Hhzddi!#gzsYZKOWpi`PS28ONtIUVF+BpipGQi-1KFL~S<>F_O=(K$^Zbk}JC4BUQlAjc%N(POU7S5-gQW48 zILdxxJF0uPy_^35-Htk_|3CO~efNRB|^RDq;T*%N|og4ow%IG6i; zswL%if%wvJ7(BP9-p!UznWB&%O{WD1AbEQ$;r{p!rAx_)Sjs(R5zEc?&i1{IsCY?B|M4^_%1pkLIQu` z@u~d|5-_QWiC~L-U0HFR)Q(r(o5aLo3Dl*ZH!duFgI%9A4zEtcSGvT<+5$r*?jVv2 z(J)s+yrkvI@KhNvREY&NEMk2_#VcL;f@I zz0EO?WcIhJH+DQQwu4`AHjz+vAZHKgA}2Kq9Vjotqacc|s4pd;LxaU7{`zE)^)4l! zT$a^&hB%xJFY!4KeL!bt`8nM+-s#>|d%M0u`}6C+*g^jNtWV3&ktL#c+MkgDPT~K8 z{6%tfk-wiiq6KPPXM~q*fLXwK_G$UFe9CRt#|z)I1koAoFW5iwhHv+`%nu*?=J;x7 z$bj_9r~q3MzT0BKiM699C^^FMgJw12_Dje$G^M5E`q0H z-cR(G!Pnud<#B(`=eG6#BLn=1^8*|E4Nqy0h@_f%&jQG+;cB>kT0fc6p)WFW&KU@3)Rvei<-W46G z?_qn1pA;TV^-o*w`T*_<9}nm!ReEv&9>hmGO~`t*_y!}RoNua*y!WlnSpQc3(M<~P zlJ|8cT7r5)!J(|6OAZXiBDOI?NR(j2@fHy5Z)ETs@moUd+ixTSb>-(edHr?erv60} zY!BTGhr02U_f_luJj9=ov3Q%v=3)JP^xf=$|IM$zkAIwjGIw}sQ7GN@b&;92;&uai z2gvXI@7;}wkpFb>LnOGshy0>Pv1zOV_Siy5b{ltG=~g-LhE?J^S+{CjBkTUDk3R+C z={B3w-qh+Z@I(F~_>A<7_d<#pcxY{$>)< zFx%5yD|iLf19jx%Ponzo;4>3vHoR`G@pb=dcCXe>yJj{c{GcU1^D`H3um`)c6Q5q9 zBR{m0ZpVXQb@C=I?_-F6t^URT0*f^O=HVorN&CK44s{e;a>D2r7lCW~g1Aus9~X*` zdYsGpm#CFVovVHyf8nPk-lMhBL*~pLA|B7>u8v?1AQgyRdSDjdxfO4SIr50tY5ybm zU&=4FK)idt3|Lvbza1Cm81N-ZM~m}%xc&tC4APdp&xrP)aYyL+EYx6E)U?dJ&+NnW zb)QI!dwAzM#=8HU{IhaA9T%)(O8i=?~Tu-(pzT{?zzmrqi#D{hBYFYcskF3420(^mA4R@V|BNfR<_Iej^bd>OrVVS(toqF&tu3?qe2wqr6K!HX@jaLeZ?p!s z<+R*E5)CM-dSPu1p7H({UIOx?))^6zlarU3 zzQn{P{ zWAm6HFZTIQTx5M%IB>bPY^4|Zo~$_LL2}STzBR6ebk@Z`U7_uBgiFb zRB5kCjQRMCbuWp{jEv~(+b8`$`lx?;%zrk z+&`hwuZJ1XL;X46hDvFLbhR^78dX4jhyM8>->jY8X6Y>B@`2K?$xPEE!$M(CEyN+}B9f@C(I^Uu$ zzB0Xk%74e=tm8r2+#~jQV*V2!SPk)O;=lSW`DF-s>6gK>WV~dxig`10cYS~1TbzD% zMg0POR`QU?ZZp)=nBOtCclCYAFhkWD-VQOJUloa5o%wC^$N2e?)hcF60l)jz?>nj| ziqD$X2DtpD>+vPSe}~WSqnwf7UspBjU*Y@fwfylxt5x~&SNN|s+g4|`(3X?`BYd3^ zQcs!xAPbxROn&AH_)_|j{CtncSMMPI47D`Uy7?JC^)27jrS`^L=rQ_0|IixOe^rwM euIZKh@9_CPIqT;~j_u-ymDk>~WajyZ{O8}p+Kf5? literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey b/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey new file mode 100644 index 00000000000..4996f105484 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallBossKeyCrateDL_f3dlite_smallcrate_bosskey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart b/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart new file mode 100644 index 00000000000..f1df8a15cd0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallHeartCrateDL_f3dlite_smallcrate_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk b/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk new file mode 100644 index 00000000000..85a1aef61af --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallJunkCrateDL_f3dlite_smallcrate_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major b/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major new file mode 100644 index 00000000000..ea7b5edf0bf --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallMajorCrateDL_f3dlite_smallcrate_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor b/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor new file mode 100644 index 00000000000..7a6580630e4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallMinorCrateDL_f3dlite_smallcrate_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando b/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando new file mode 100644 index 00000000000..e8ff9db185d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallRandoCrateDL_f3dlite_smallcrate_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey b/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey new file mode 100644 index 00000000000..593bf9e5483 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallSmallKeyCrateDL_f3dlite_smallcrate_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token b/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token new file mode 100644 index 00000000000..f58840a2bcd --- /dev/null +++ b/soh/assets/custom/objects/object_kibako/mat_gSmallTokenCrateDL_f3dlite_smallcrate_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako/minor_crate_top b/soh/assets/custom/objects/object_kibako/minor_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..830d8ff65b34ca91e71ff42f60422a1981d32a4e GIT binary patch literal 8284 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako/token_crate_top b/soh/assets/custom/objects/object_kibako/token_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..d4d5442860fb49fe962d1b4ee6ac461ac1aee1a8 GIT binary patch literal 8284 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 UekcppDD}WOM?7$hj8NqN0{SG^yZ`_I literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/bosskey_crate_side b/soh/assets/custom/objects/object_kibako2/bosskey_crate_side new file mode 100644 index 0000000000000000000000000000000000000000..d5ec9241ab3b5603a02ad3cfb4f7f8f050df50a7 GIT binary patch literal 8284 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�DB>zxP+<{Aca3>01sa@&#-EWS5 zMm9h;^t1kY*X#KH>%t-|){`0IVq?gsCkUB?sWGiTi4poGKFEx`vm$(U1o`bye&jzZ zSc$9H+NCHLPQCc*>14-;A7-g}`2AL)X(59JGq~qROlek;+2d&|F(UQPG!v9tZAtl& zhnbHj;QgqGijOR1Lena>c&c)c=_1DOgiZ1h^XI0{^7)3%>&CQSrRL7n+O_XjN-A?a)(> zXcOswcIkhHsqcEPm-h|3JS`yW}2o zuK?d?y*zXB!;`G(YHB~|KeGBeYp3#wH~vqxlv`(~!A>eT z?_kWJznre30wMoM{3G_oQ@{b_$1Z?98Sg^>8(t+oJ)*EpQe3$Lm+17Gqc`YAiC^;9 z+LzmxJ4>C<@{Z&PMl~qp!KsJ%Mx=kS0Ps16HOOAz%7OgApQHRDZ=eNa2NJnq&L}niYF<28Y`~qj z$d6tCvW56FMpp5O3Sxyqx57@v!s#y0MVwmq4eU=1%(m9MZ;yUPXMkNvp-G9Pr-<^W zHIRRq*F|=TK{-`hU>`vHNBW;J%uJP55dw$wBCg3is9Y4bkN?lmodmFOk1%2D)VouL>bQFb4@b+yPW+jM@?jJczWH>;6Tv=5E-ZT;i|OoS$rc4-YUR{28fS+FLcFDpZ$(K9@?M#FLq}n z`n*zTdpv_=gGAg=o76ecVP#Y-)o*G~_a9gn_QcKz=T$__9I#Kt2d5u+win=YpEQC| zsC?W->Dd-*i`Eo5?b}P8o(@LmeR5KWUpV*520O44Prc(xh-KKm|w8=ilzhL!~$&s~LhGR9oQdL@!#r^cNde}}ub z@O%@Ji9Vn;eUE*WoDcFBy$R6=#;> zUM=_X|2f`;vrS|bb~eG=1b6h|JATVZ^%?Oe{%=fuh#Bn^2~Q)BlQGenSh+Wtf4C-A zwNH6aJou(|zu`(i)s^(yOemi^TJO0o-{Km0y!bsiv9;q2`_6DB&JKFgFcxH{%tN>OA3n6F zatd^4j63m=2jyR$D-Xm#Z_CwrWfc}W48HM;D=O(Tjyp@_G2}^Wi|#{3bE?Ay<$&C9 zuE-3XqHamXl#%cr%&zcVh{SuWZp-)xSNQ#fFX{~CGr+>!U^aCSo)9qCqn3w#1Z#ng zr&h?lpveqD#hqwVye5zvJCWcn(uCSc^^5W7PgEwY++qDD7s3g$z0`kH9nl7T1Kg5- z;X0w~3;&_~(87RE$au-;qFbpVtSEZ+A-*OY$jXYV|I?L`z}IKQ#GVbSiHG$<=|y(c WAFh-OtATfp(+{78qk`|i*Z%`M1f4Vh literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL new file mode 100644 index 00000000000..c5967488447 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 new file mode 100644 index 00000000000..f43cacd886b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 new file mode 100644 index 00000000000..d877460d442 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeBossKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL new file mode 100644 index 00000000000..ce8bcb69fcc --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 new file mode 100644 index 00000000000..64c96a3a348 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 new file mode 100644 index 00000000000..ee780d50d5e --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeHeartCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL new file mode 100644 index 00000000000..2d9c5974c18 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 new file mode 100644 index 00000000000..a3a46e621f7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 new file mode 100644 index 00000000000..041d794d9f6 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeJunkCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL new file mode 100644 index 00000000000..190005d99eb --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 new file mode 100644 index 00000000000..867e166d7f6 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 new file mode 100644 index 00000000000..5ab5bf39b95 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMajorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL new file mode 100644 index 00000000000..d093960d59b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 new file mode 100644 index 00000000000..9ab4cdf9ae0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 new file mode 100644 index 00000000000..8a22d508b5d --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeMinorCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL new file mode 100644 index 00000000000..b1c1ffd1fa4 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 new file mode 100644 index 00000000000..3e87c23b19c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 new file mode 100644 index 00000000000..296988ca1b9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeRandoCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL new file mode 100644 index 00000000000..c4d711d10aa --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 new file mode 100644 index 00000000000..126e0bde7c9 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 new file mode 100644 index 00000000000..908b646bb75 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeSmallKeyCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL new file mode 100644 index 00000000000..b1b1269b91a --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 new file mode 100644 index 00000000000..c02cd056d2a --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 new file mode 100644 index 00000000000..dd2c07c5249 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_tri_1 @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 new file mode 100644 index 00000000000..e769465866c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_0 @@ -0,0 +1,6 @@ + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 new file mode 100644 index 00000000000..1c6430bd42c --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_1 @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull new file mode 100644 index 00000000000..42422b027ad --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/gLargeTokenCrateDL_vtx_cull @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/heart_crate_side b/soh/assets/custom/objects/object_kibako2/heart_crate_side new file mode 100644 index 0000000000000000000000000000000000000000..d0d916c0788346102dec8cc08b1a9e2713d9f82e GIT binary patch literal 8284 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/junk_crate_top b/soh/assets/custom/objects/object_kibako2/junk_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..ef303867ccfd03e50cc146013a7ebf0ff58bfd2b GIT binary patch literal 8284 zcma)>EpubZ6^1oID`qp9t)QTwP*P5XNFY^KK+0wj6cjW`)ym9bGP9td;J^e%EP`e+ zG~B-sKYsSD(^vLX?R5Fx{y2T!^WCjGy?&>~QJI2uaq$d}8Y3kG63H{>gaq;~2{PwtT4^LY5wcOo} zwLUl2GKZ+m_fuM@uY8C%j?y$z0yf< zbVZBxP`e`uo}SLfo9oNbY}o(l&u!~{>o(SyX=y(9-P6u@xwNB}ivGnz+Tb`iex_vg zoC-=>c7FZtB879yi+#iX;5h8lMzhhZO9h5&P-O%iEi2(5#aB->(2l)t#nJtf6Af<= zb>br;72&PpEwhhj9cE3lffSxiBICN8ku23(&UMK z$62qp7?aazHaLQR@c^Z<-Hq_|kU9uH+LIZ{0_!2!V6$#zbpEz_SVc-oat#X%j&MtL zB!4_L$l~vZfBjne>k;^rhFvYgy|krg_WH)oc&6+>ID%LiyWNwm_pi@yhvoOfe^=t8 z|Kvm+vKE1KOJ)49y1KQ`NT?*SIaW`ck}L2Y9Px5npTJ)a_oKt|u>8+h`{R8okcg?t z_^a(>d1#QWVk0&{^JriC5Bs1|Ev>}QZ=Nlj2&>&;Y0eIg;|&$~H|`&mkO(AUfX4IjIa#R1_v&^abdw zQSXVr(G1(8JLdoqPi5xzgN>&1(tkQvUuvmpyrG}PLEjN=83xo`d>VN5_~EV`@Jz!1<^nFK~jpKL7$d7 z^8IjF-oH}eLC4zGK+iAz7<{6f98`DePtE{Npt3&^XRhh#c%rp@D$iesgQ7<@wiiU6tn(uaOoXUN*0}*6foj=OfN^Aa-kGcO0j+4{P z69^z;`Lemacq18BG|(b3D@B|9K~kF z!9@!C$X5Q*>al9})cf{@6PWW?dGHL>!RJ>XbvgQj-^DaWc?Q2EXrm+g=Zy^fu2%oi z%yIC&b>}Y9wSQ};Xl4~=M1xBr01Mbx8doD(&L8nZf&SQDe4hT&B>z%NjV0qN+=xHx zins05c_Lm<7&+>SBrSd`8D|cD$NoHHfANjoL^Pb$(Fj+9WVn*#%z!dh56MviY_$L~T z=S06Fp3MC6agN?RagRlke|%WWD6IGsA8C~X|66@lyWn&FPv=;M8NI{PW{;>zV}H(_ z)CC5*fkeUGjK;iWEwKef(oD4GH8eKAgd= zJR$$3`ivj_Ma>gA>sW(_W)RWG$#eCqG` zBd*H>aPiK7&r1L6OK)khAX1_S@ofFY65Koe1yM-yDKvsQAM^_UCRwOxxp2$?c0bOnnjiVte)*(SEyU#5&$$75kI_ z;|=`O9_jogj}-n-K#OngB7qUr_KdXLWbs6N#M{2|cpnv??+PFq{ovofaz|v$*Z=zc zJvp(4?0Q*Ut+de_O~ehhu|SNV4|Y!M@cqI22WMf+o(V+IZ1xdeN9PKjPQqiyme+yM2ew zce_@U6*1Xkw1{Mc)e39XLX&mnXmQ%U`NvGqLl4JL(uZ&8+?5zdo=~2@vvOKp+k97=a22sedZU#hzPuarC$1}B;H}{xSL~1%U5>%w| zUH!s|B=wG@>RI~ByB$~U4}Kv;|9C*I^$cFk#CFjO?L;fh=`jaQ=sayW$MgWY@mF>e QgISwALI=;RB}=-aI*CU-ngE0#2)aWWm-h;J zg){~s5W@Egd4;?}e!rO=E@k=dOOPNkUb9<9F_k($PNy`$no0s>4Y&$Pk$EP8vdIoLw zn|*z#Pxa|=`Z{_6eP4Y4^nJ0}uXfAwxjNuZec~vNeyaH7m*KiyA6KBI&KRwB**4p* z+sTacUy|aJyY(^0h~L708Lf7tWx1(-hVNuXU`Dq$>y}T&ub1d^N)P$t*BUaqCfi=( zAI{{j583u*#N+x1{6ir$#ES`px2-4FxeuzJhGRz36 zO4?s3IeKc7HU&+FM%l2VDqG}6haBX-DdqkwS8|7UK{k4kfpYvO!`mp|8r?@mK;I=> z(2U1)n;uEiV-{smJ_J=D;Y8c6a*G^)cW?*Z%X9=qF`n;FmD#GTLij3Uu7Y2%rVy7E|<+5HD3{3(w*GdOnRck!RF zD&p-qzR2ZNIy}c`yBRO8ygq)U0mF}rae?*MX~1VkWXQ=dIri}d;opc3ll^AWqxUq}RNh4F}^O5S!DB~BL&^wHaFmF;Lx^_OlZkZvKCWx(J zT|KU0oJdEy8 zr?1oIPH5UpyWVg=t*0Pf_c$xkf_-tJ_;FE{$RSbNJMr1QTq?4)Sqz+}h# z4d@jlNNg)UuR-0NK390Yj=lVG{jhh#99i1v>*(uclN;1adTaP_Q3C7}sas7BghFX}fCdNahLe(qeIoZlzMVm)~7l0a5g%}S4(o9piMug?^Bd;S6lt@+JiOM*MF5C z<^y_ujw%tY}vt!bYyx|0*C4}|G50T{G3;|%DL|7 zG0>1`hWbfr)&IDtD%1_%Zf{s0-Va>!T+LAd<;@ekqK}_8tS*G2u7&F=R2+M>OU$=_ zI4wU`d#*9^ATbhaPB;)A(pSU(aGejp_czx4M1LB79X(e(A5QtAI&|_o;76Pv*b)8E zI1$XU+Oh6=0P7VO5AG*V)TJMNjANb}1TD&asL$&De zuM_ij?|tTZZUBCu5tAMAvkhI`LCcVt>$T@G^u1tz@;E&@Lse{lg#J5x@Jao3z9)Vs zy6mq4Xa(F<nJDXgZhNEpf%@{(PNu)U+>~E5!6Txr&EIKA?&bp@GrO@#ZTYW41j!b` z{+4|=d*FXF`y+ygu8BpNd%SdW68o}WID+LEbGRDFC-a}ipAXkA!W&f&KV*V4e8?|) zRI9?TtMWleRvTAb>8%`igOzBf%3F;VtNcIp@h>irDYn^y{-$1khW~3Pzu>DE5eKB0 zfrrk=X$SKVdV!9VmOhD*(|YVUcMPc@|46-#Tv#4{LRJX=7o$$GnMCs4ed+X0SM| z5?_&7Rcg!7^_m2@*q{WH@Eo3}i z%UvD88bEd+_US9D0OMAoA?C;<_S65zh`*Fy_5zPzaOTe9?aiccO~98d9X*`ZqxDD7 zCy*Z5`h;x%33r4ZPeLtL#g4fzAF%px16?O_#J#GVHnFb1Lh=h5Ry&=k{-%gIM0JHU404>t<7Nug*2x z_uK5}W&9fK@9|sAPsu4M^`I?q0?t_VfD7J}R?FBRk!J@)^b^;p+7VxBvjVm`rfvMX zZl5de{pAh!UbzE&hF|2-1M!7859=&Swf^|9XAZCSfeT6>ViVdY^q|iZEEDt(kKLv% z_nf)wH;;60nY+)I_$Hrd6Z6r+4s-D>9=_$Z+(Qx#D5}M4p81T$UqlJWkG;-_=-k^j z%BrybP$j~LOn)W~Wq{p6dPkyNrp=)r9=%E}i zx@Z)7FA@<~qmiC97V49Xe_DTN{7;T1Gh>fYHnjDJJjwirYEo=2tNC#cUcf#2D*Rzp z%gStPrqb$ABfjL%$VI3cDi;O)Q~rQ&*gR*bi!J}hMK*wk1D_o5D6Pm^VsXq%TR*@G z>KVUi?g1)mPiO@CBDZ~fw72i$r~UVDdH>P349*6E&mkfUi3g&k+SNX-(P)|A4=MQJ zn7;nep2fSq+}6habGQG%6~+v5PMTG^KFKlfUvU>(ax*g{+FJcF{-cfkN5kx&$GiUi zC*NXa=MQg8@}^Mt!L9_YISS>FhCfG2$aX}JeUvUB&{ z$@k;he@Eh%q~5ovv#(5VpR(^*oOLox+gs!wBi29hD|bW8Cic~D$uC2wOTP@4CG#bB zt5`R)cGve8zQyTRSL|P)&7C~dvD*y$X{_&9+xz`}sW8K?Gol@GKEEmwxjymR=8y67 zhPzd)lmdSLtKWC*o+v)|v^K!yH(kS*3jYm0zmIZ8et%uzNyRJ s8*8Ea=pFq-YqbArM-FJy3;EyR^L=tY$QzFB;|I%YYgw}Lyhr`>Psk?v2Nqc5td^Jv>+Uyk|o_yo!FUG{xu;GE8$>BND-^lb#duZO#nh51l=Kx%X@{q zLK;C32;qN)yh2_f-#4?%r7YiF(ge{!%O$zoZ)SFOW;pEidc8kS|MYZ&rD_5tN0m#0BHoMKP z+E?f5ygz>(zJb2azkmKd-|SZPvV66B+^NnS#nCU8PktG!oAqf0TI!6^s?N6AcHNAp zod22>pWLlaIY#^n|82OcNy~C$e}->lMqozwx9f&a#fNM38KsB(@u7l@=9q1-@%I<< zSNm-HHe|a#0e|1hFVYA3!;IN>JY7Ny+0+Jzs+9;lnBz(Hhzddi!#gzsYZKOWpi`PS28ONtIUVF+BpipGQi-1KFL~S<>F_O=(K$^Zbk}JC4BUQlAjc%N(POU7S5-gQW48 zILdxxJF0uPy_^35-Htk_|3CO~efNRB|^RDq;T*%N|og4ow%IG6i; zswL%if%wvJ7(BP9-p!UznWB&%O{WD1AbEQ$;r{p!rAx_)Sjs(R5zEc?&i1{IsCY?B|M4^_%1pkLIQu` z@u~d|5-_QWiC~L-U0HFR)Q(r(o5aLo3Dl*ZH!duFgI%9A4zEtcSGvT<+5$r*?jVv2 z(J)s+yrkvI@KhNvREY&NEMk2_#VcL;f@I zz0EO?WcIhJH+DQQwu4`AHjz+vAZHKgA}2Kq9Vjotqacc|s4pd;LxaU7{`zE)^)4l! zT$a^&hB%xJFY!4KeL!bt`8nM+-s#>|d%M0u`}6C+*g^jNtWV3&ktL#c+MkgDPT~K8 z{6%tfk-wiiq6KPPXM~q*fLXwK_G$UFe9CRt#|z)I1koAoFW5iwhHv+`%nu*?=J;x7 z$bj_9r~q3MzT0BKiM699C^^FMgJw12_Dje$G^M5E`q0H z-cR(G!Pnud<#B(`=eG6#BLn=1^8*|E4Nqy0h@_f%&jQG+;cB>kT0fc6p)WFW&KU@3)Rvei<-W46G z?_qn1pA;TV^-o*w`T*_<9}nm!ReEv&9>hmGO~`t*_y!}RoNua*y!WlnSpQc3(M<~P zlJ|8cT7r5)!J(|6OAZXiBDOI?NR(j2@fHy5Z)ETs@moUd+ixTSb>-(edHr?erv60} zY!BTGhr02U_f_luJj9=ov3Q%v=3)JP^xf=$|IM$zkAIwjGIw}sQ7GN@b&;92;&uai z2gvXI@7;}wkpFb>LnOGshy0>Pv1zOV_Siy5b{ltG=~g-LhE?J^S+{CjBkTUDk3R+C z={B3w-qh+Z@I(F~_>A<7_d<#pcxY{$>)< zFx%5yD|iLf19jx%Ponzo;4>3vHoR`G@pb=dcCXe>yJj{c{GcU1^D`H3um`)c6Q5q9 zBR{m0ZpVXQb@C=I?_-F6t^URT0*f^O=HVorN&CK44s{e;a>D2r7lCW~g1Aus9~X*` zdYsGpm#CFVovVHyf8nPk-lMhBL*~pLA|B7>u8v?1AQgyRdSDjdxfO4SIr50tY5ybm zU&=4FK)idt3|Lvbza1Cm81N-ZM~m}%xc&tC4APdp&xrP)aYyL+EYx6E)U?dJ&+NnW zb)QI!dwAzM#=8HU{IhaA9T%)(O8i=?~Tu-(pzT{?zzmrqi#D{hBYFYcskF3420(^mA4R@V|BNfR<_Iej^bd>OrVVS(toqF&tu3?qe2wqr6K!HX@jaLeZ?p!s z<+R*E5)CM-dSPu1p7H({UIOx?))^6zlarU3 zzQn{P{ zWAm6HFZTIQTx5M%IB>bPY^4|Zo~$_LL2}STzBR6ebk@Z`U7_uBgiFb zRB5kCjQRMCbuWp{jEv~(+b8`$`lx?;%zrk z+&`hwuZJ1XL;X46hDvFLbhR^78dX4jhyM8>->jY8X6Y>B@`2K?$xPEE!$M(CEyN+}B9f@C(I^Uu$ zzB0Xk%74e=tm8r2+#~jQV*V2!SPk)O;=lSW`DF-s>6gK>WV~dxig`10cYS~1TbzD% zMg0POR`QU?ZZp)=nBOtCclCYAFhkWD-VQOJUloa5o%wC^$N2e?)hcF60l)jz?>nj| ziqD$X2DtpD>+vPSe}~WSqnwf7UspBjU*Y@fwfylxt5x~&SNN|s+g4|`(3X?`BYd3^ zQcs!xAPbxROn&AH_)_|j{CtncSMMPI47D`Uy7?JC^)27jrS`^L=rQ_0|IixOe^rwM euIZKh@9_CPIqT;~j_u-ymDk>~WajyZ{O8}p+Kf5? literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/mask_crate_side b/soh/assets/custom/objects/object_kibako2/mask_crate_side new file mode 100644 index 0000000000000000000000000000000000000000..634969f2ad117d3451b8c75b9cc8f9493ee6ae5a GIT binary patch literal 8284 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 Q#&X6$YPJAT7ShiD0o@t@O#lD@ literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/mask_crate_top b/soh/assets/custom/objects/object_kibako2/mask_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..d8292e33fe439000e45629da4e2315ca18f16131 GIT binary patch literal 8284 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 gLL + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey new file mode 100644 index 00000000000..6bbbe040899 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeBossKeyCrateDL_f3dlite_crate_top_bosskey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart new file mode 100644 index 00000000000..e79a71e4017 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_side_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart new file mode 100644 index 00000000000..2e20008c7e0 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeHeartCrateDL_f3dlite_crate_top_heart @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk new file mode 100644 index 00000000000..b7eee4eb115 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_side_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk new file mode 100644 index 00000000000..d59ca15f8a2 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeJunkCrateDL_f3dlite_crate_top_junk @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major new file mode 100644 index 00000000000..e930dced0f7 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_side_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major new file mode 100644 index 00000000000..ee053858d87 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMajorCrateDL_f3dlite_crate_top_major @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor new file mode 100644 index 00000000000..c9b542226eb --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_side_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor new file mode 100644 index 00000000000..619787be2ef --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeMinorCrateDL_f3dlite_crate_top_minor @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando new file mode 100644 index 00000000000..8e2e6bb4600 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_side_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando new file mode 100644 index 00000000000..ca00e4780df --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeRandoCrateDL_f3dlite_crate_top_rando @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey new file mode 100644 index 00000000000..b4cb8d67249 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_side_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey new file mode 100644 index 00000000000..a0ea4349908 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeSmallKeyCrateDL_f3dlite_crate_top_smallkey @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token new file mode 100644 index 00000000000..d87ec41480b --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_side_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token new file mode 100644 index 00000000000..369b6a05ae3 --- /dev/null +++ b/soh/assets/custom/objects/object_kibako2/mat_gLargeTokenCrateDL_f3dlite_crate_top_token @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/soh/assets/custom/objects/object_kibako2/minor_crate_side b/soh/assets/custom/objects/object_kibako2/minor_crate_side new file mode 100644 index 0000000000000000000000000000000000000000..27a62c8c4d9c0eb801f2c264e2180f5f2535604f GIT binary patch literal 8284 zcmc&(&1x&l5tefhvJiqX-i+{Ow42#!&dQ@r?noFh62e%HAwD7-dzYsO2qT0sUKu|{ zULl)<5JFspSH_#XLS7-?SJge;l7EtrkgGy7Jv}}BRaIA4Rd-h^mC7H_{&0SP`#=8n z*T3_R;=ld-9a{ck{`%2heqX8JA5|*JLwgji+N0zl-F`wZ=@zZ(>9%{^yX;*JpFq#U z=gBMRZSpp4O;4sLx6|7{ktVO*qjWobnzk-mc>9W$Z2#1|!ndIAW%rmZq{qkZQG3)L z^)B1>_UIGzZTdp)y2ots9{;lC<4;ezMIkN*mP zdZK!4*D*dGzSX|PZ<`*ehju-7O8aw(BAERH6|8#iOZnWw>mA;gJA3uF0 zDs8UauoSMNb-0LdRf^Y1<2|L#bnH`ho;~7!p7L&Kr-k1-9Vg?Y5pHO8O39-oV9%pF z&>64sUA!W7R%tD*Wpz*is;3|==S4os@Xzn_d%iGPKHz zi;bnU9<42=e-9RwZSL}J-&M~`uI!(7C-C<{cz0~sHD-6*Ju;1e0)Lp&!qRb zb9_*jw%@}8c$hQHe~rVidmEpJPwhrhckO~a+$Hr)uFiO>y;hcAa6;>_T)2Lt8NBP- zjXEME3Hd~{Nj>~9kNO_XqCPyLA@qS~kNC_QQ@_ho1fGLjbr9s8WxSF&Zt?+*lFVho zOzlEEq zw7&r3q-f;8%8ve*pr0T?Vp;L|3@YFFT;cm!XygxP7mK`}j)$eyBYQIB>tFHnYF4Gh zDjECd6R*Mr%g}_9v@!U$#(qZ$009;7d-(>*ST$U-xMEoHX*n+KJ**13-{5 zK%aPWL>(wEY~%4LBS4)S&d}~Xe)l+e2v?dC@CHihHXi zzrEIA&iVR>{K-S_61n222R^#T(-v~vdg|l%qos-b7z3rw5_gjeAf_`LU>2|$HYewk z^Q^G5ob!$r0}Y90sGn%2`Vaa=QQT*b;fnbov%le!8iXgLwgK{03Ea{=TZjUSDh^PBU0V9(~=6fLn`UQEzL-;H^Qw~{v%=u3<=Z@@cL{taKWvw}v^|Rb8!f1} zvDlIg7!8O`8k=w&`SB<0%lJ1+t4H*=w6& zXXWW%{4ZqT9ze`F1k#?gY_CQ)rd^CV$5?|uc(Gj57r6X$2OqZ2y)u&E@5J9s;=V-S zg3-5N#(@$d9-rl{)JqN^I}nTbC$j*{t$0IxnblZN`w!rMDL?mvbT^TEOW}$;Tu%QI zrE3?Po5oEOGzRIFr7@!Y7;l8GH$rR7iaBFnR%P~)S9PAq74M2cXBq1J>nnb`ZPkg1 zows`Sayw18;TrhH{{erN)vh;!rkM6hj)1PXB@gRsLDBfj`EU8coRxQ3HI%ir`XB6b zt%uLtt4kiZ?>Br-x53JdzrkOle@aeCsRu2A6L7|?2VC%-l-BeO;(6vkL_KjW6?5WC zZq~=xtfF-=?_FZWH^Q0^9B>4%Z&=!&(LeEp*bnn8N_Eq`STKec3&#becfJYb4Qfzl z2qWY44~xb6FBt=|4)jOe36|aGk@Y_o-^wT2M1LIN9DQ*W58ET7*?I)Ii@&nj62G(aKbm1Ie0<9X?!Nqz zCqmcY7T!ZSpm$L(^pPhbu6iTAt1r|q>HjqUQ2+1Azl&ey9}@qNP0EMM zY8k(1>;WosPiO@CBDX$1%CP@({5|m$4}hFme|b5h_YsX^#3Sh|M4UI zVD9gKauq8(e^@ceiV{~>`g$kMy|rJc_35r+qBT~glH;jG@f+HhwJ6#Y%jPYukND-Y*2}CUN9;+iDBCu;!yCc>SWHC! z@+2l)#Pd^dkRe00*VEPMs)IkTKDlSU(>8W*L~GcGEwKmpbvzFj4wZR;63?IF4Nsin zjo#m%K1oe8Y2p-0$(=Mcan2-lAAQ9hwO5{Pg=>4}#rWGE1$R7;b2cfZ7s(8dnH{Gu z3C?J_TP3HiSUcGD3)XSElE!*Y)>JL*rj2Ajjq94dQ%5h?+yZsQ_{SUsJ3(Wf@9vO? z&wVQHR&kdOnfn*`lh&!2h;_qbDWm~{b?6pR`Kt~pXk!o*ME85pku)NNAur*0`_Q@ AVE_OC literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/minor_crate_top b/soh/assets/custom/objects/object_kibako2/minor_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..830d8ff65b34ca91e71ff42f60422a1981d32a4e GIT binary patch literal 8284 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 literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/rando_crate_top b/soh/assets/custom/objects/object_kibako2/rando_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..2d211d61250cecc2530ca7829c1fe873e169ce9e GIT binary patch literal 8284 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 V4mDsu=t>#b7Gf{9h(#T@{s-5JmyrMf literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/smallkey_crate_top b/soh/assets/custom/objects/object_kibako2/smallkey_crate_top new file mode 100644 index 0000000000000000000000000000000000000000..542dfb837df5dfe96fc88c97a1be4e27dcff6615 GIT binary patch literal 8284 zcma)BUq~a_n(tj`nn6TFB!~oCM0#WxdSqy3^Rz3=A{i0MWW|jkh-pN$X&NKLF!5zE z4Hs_|X-bh$N(ixOB#~k0@?jv^r{rFmwpv6=kx&t7QkS9W$k6oqy1(Cds_ecm%k`rw zr>f35zwi6b_wO8U-MV$_zy9Mt$NmYwSO2qL=Y{4!{P)l3`ETx}2L1QH-nxbB?yXx^ z%+A^uR?O-)yAIDQXO*+VGqa0NR+Myj&i7`w73JmKl=GP^2UrSZyE z1@oBfBeQw)$;hZ318xjG&+NDMTc^*yRAUc;E^}cfnUS-0AD+9Tb}(w^a{}K{&cyHP zPDv_|gQzkGXTn^<>EDg#*u!(6_d7H8CB~dvU56q+@HkcxIF*)%oQ1yrU$SD5n&V}J zC776ldWNR$OP8|L&Ec6d>&)QluhdEt)Shrookc&F)84UmZcx<>7cy5?W|O4yaX9d@%x5*v)6myn&aC?UAF zC?V`c2$Dc|BuGS}Y#{F|pYcsy^?s5wQ=hH(o3YaP%ai;weJnrbysOXDd#SU^7GxhU zg^jQ=Zfup#tKHR@88fHMDJy5?Xs0CWt(mjl+70_H=d&A_bGANfHSC7vz3Ed}pWSC6 zA&IgUpzEoZCx15e&~jR9b@sqdcWI(DVRRHu3g9Y#l0PYS8kth9RIB={esX}{9xE>d z4y=X+T#R%1B0u$e^?vY{w{qmU+EewH{YK5O%RN<$H*@$t3rWF+l`EYWPV`V-TQ-;1 zg2Oiy3NnNE?V&qE!?-*e9vVg$^|ulvsXwm|f6+(C8zaAg+y8?3zO3F& zeNz>*An$74$m_@}(qv1#HQstRMf$QjcpF&5p_R}Izsdb|##|a@|H&3_yv%|= zYBr1^VZ5T?aNsua2XAw($rc&+n)k$7Viea};%KR3sY9U$ZU=`Wui`E9Bl2xMv7Q*6 zADth;^IBp(dF;{=-pe<4hEe>2(DUzUB;FEwH8lJU@B_n~BYBimBXQTligar?vfK3y z^h6y+UL{7B&2*agU>HIxpyU-%V-XOB3hE#01KORPnNgWwA0 zknwW2bjz3kMPO}qb-Ma6aGR?hTA3e7wZTGQho8up@Y*s4Pevy^Wn7**KYf*69jY&F zIe(&S>9)jZXeDqb-ooA`+O`f%{7S6!n|?b7+nl3KQ2OLrx-EZVbe1M6naVlx(mz7z ziOd74WOxTnfIHz)*OEun!2GD$U8ylPda*^Kd#v%+nQgwmzCUy)02>aiBu3Ma-td9f zEhVko(e`v8(nC9juh?0#%^B;3399xQ5#^@5bB$zm+LP;(Ewq67bw--TO%!$dm?x~5 zGt(?I-(4>TZo}{HgkI4u@>a2vmq$PXRsmW8L5tLUxyO8Q`gQ%~>B5`))%VqR<(YDy zv6I&r+w`$No6G6tbYdi#p8q29*TC(&srV=}uhWYdsUqb=$rL$Ak1TM#5D@t%Tarh* zRfJs-Q6wcE2<-`Kg;dHA`}E11`@4;e>5b{_{C0l-Ub#^2E%)X%eN1a52PE<^{fZtx zzfRpVb2Mj~GrZ#&IR+VF%Jet)7(0T&cuP85q?I5ll2A)vMUk7%55->8I$O`L9$f!? zx&ZY22CzxHjon7MP<>(cGQt}jq*4cCeY$NP7MMI1^j@dGIjivb%xna|X|u8_>Ht4f z^Z_MvSOXUzSRvZT>VE1Ane*KA*T1@YP=C3dr|cWkMD}<%m@CiJzpChhK7NR?#m?oU zcuR04)ef0OcIX=%G-oNheQ9>5TbIqEPvl>jhxHXZE2z3?`LN>7(m3?6g$z~0n+)`^ zRUc63t39hd8`Fz=%3h2-@-69#n`)t4Fnchj10&%B`m@AH1o4{qO7|W<)`EE~r$5ui zteleH#m}&6qSg(d6Z3O&eyzVenA@0M?ICg?t>{r_$|gU%`Tc(Lce6(-!OhZmu`}IH z{U?r^{X`UdL*>()WmREK*;&|hhto&-8GX|2`IAp*qDSH2(BmQF{Bbb1onP%)(!X!} zzHKl_{J~(*{2}znm$Ipa@@##;^jCmh8ZVrr+o1p9fI{Ju@$@Aub#wepmUS$+A49*{gn zr0J8Ih4}D7)Mh)>F>0Q3r&q0id@MD-8!g#oKWl)}Iq#L4F;T(2Vwdd7MRodgVf*>& z^rOh66)*$l;M!n%aHRJRY2b@V?J2Bcw^4s-J;#XiQl{v0^}lZCAo~l}M9mpH2mBr4 zqwbTej6 z(KAucMB#bxJ0aA!PNDgsT-eA#eqUVVhYr$2zx&sLF9y?bi(avvufK#B)|dnGCn>H! za=!*Irw`Z{tbr+i<3i>|mFzrp?T`NFD`h0_Y$4K(!}r__L{1#|UiCe!Z+bD3va#YJ zXdoC^8-NuInSr%O5%GZr*8lfXhE<*ZEQt)vie`E3u*UcYv_30`okzBDVKW9Y3eI@; zw|s=`BR)^d13tW;{x5XyJidBx`h@sP`jQR{g!Dvq?Qcx^V7cIYa2}U3Mn|zj;SUW* zUK^b%0umpW*q_8?*7FJ<@mJxiY+7U#?IgNzfGq1gZhpLau-l-PQ})BoM-${BeiBGe zYLnVxM8(7UOGKyvMgYUb4-Us$CHr#ka?yAT+vkNH0`IVk7h?ax$m>)avMQy8*13LY zBkHL)u-0jC@ZrtZ8_)nFz>*%fegN(dp~Z+70Z;E=|J?it|KGy+4lT6o=6{UlevTUF zjso~jFY__iq&X|q=}Nps3mX%%>*X%Bn|#nl$&I|7a`u}aoDTto%pB=f{W@lD&*f-da9}{Re?B`)=8l!=JVkQAe-4#Mp*)K!^%<%l z)_*7IP+~pwI&f#Qg?f~DhutQ83EF2gAQ7MXNBkevLdFDl{-URt9R+d46hQ(|!#scB>I0wkzpOv} zA5oXN7XFKtIqm#%^}yM8{-}Rd?P-44&ZlhBYR~>X^F=B0QZlvhutkhd1S!sqPOLxj zKlLxtL;u8Q&Vlyj1VZppqXt*vt*Q3Bg}Bcedz|sFVmnWoAK%=6^EGO_g88oc-t+bY zT6<5i1N-)4^uw%jWjH(cHX{Ey<){Cp+WB3GHgIM|;rCLBF#5s&Sbqm6Ta(AAzay-_ zQT3w^ul698f7~BnwYl2Mxc5~2eq;KeaQd}@y_AtDMnJy&iH4mEb^unvqUW+sHzsr| zc})LHtRsE^pQ{8qvv(*zs{#A+bNr=_ZC_EBd~X}1+Cfiw@A*AeJd66$4r)z$zE16z zXHcKuoT1!%&;uNEeng@MV@3p=VU}V>KT94@wgm3XkA5!yA@G6D*w=5xXbC)3z@Geg zyUU!C8XdI?*M;~0y}JJK>buhgaKX3_+HU;iK71WB@I1=Onz3qkx-Hdac1uLM=9KdL>f6Y;SNVe~^S1Updp$>ZHF*c&~PyP`ov7SfNP->!fA%YE!O zq~_nBLymdR85qNHMn~_6@uUv#xW7>x^xBtIzu>=;^*<91TzvMysT@u~fmQene@a=z z^|#mGveG~O^>pDBHMjFo_B+!XxsAN@;d&5$^RW4lvtSSF{njn zJ^d%v^|Pv zpAO>N3s8n;N;JbQ{kF9T_12Bt6esw=Ncg9F4P|( z=1(!ks2U%0qCSudHLKx+epxMG&rm}CPs;ui_&ex-Ms%zJPw2sc*=_Hbe%O2AX8+Il zlVM!h^=TUX813DtR!iASsOy*D_uIK$9|-jTPde1Ej*}i8bpwAjL?DSj86(0uXnjM& z3GDxs{u$X}iHwqn&p3VMzF;pHLT%)+VqZ^tW?tS^m;i^Ovjdnje}Un}0xK z)HErJyu_%UpnxA z3mq$bS)+T+M~D{p)QYQ>MirU0WgS$^#~A?#dPn6(Daa|-Uz;CO__TiD)BlnGSlu$e z857v=t_HbPar&NuGy-(&1E?=gv6$4aP^4$LaC( zCTKhrme#nm*d}eJ!!EH8ddU;t^YWf~GTOm!iQ~!E;L6|~MnIguDl(Uk(x`LjD+V}L zB&Th@0d8e&=ebuj2$drD9vV-6g{6+pn1?|4`2?|eI*$Xqsx6Xov zIt3M)*dZe`Y6e=7N2*Ht^d$ZQe^nsic5Oq4llX6vn3;? zvg6K1oo``xLT{3M(%RU^dWK+oGqYHA?Fmgw58BN&YJZfyW zjN{mDIsfAvQ6)DuBV4(&v8~9{{-b4>^%g@^K{i2)XXiMZ zL8bvdwL$V^=O~g$EE@8(z&RA>o{f`NqPk-^hdhCoo7~MBLh1%hz1aDe}rO5Yty$eH;o z+80SFoxG8^XanDU=gKB?i)@nH_+QN|k!bhi#-2jPl8lD;S^EMP(B1lC3MUZE8R$)Y eV{S_A5fQliQ@%q9*blOj2eySg4v9q>cm5B<3T&GI literal 0 HcmV?d00001 diff --git a/soh/assets/custom/objects/object_kibako2/token_crate_side b/soh/assets/custom/objects/object_kibako2/token_crate_side new file mode 100644 index 0000000000000000000000000000000000000000..6de4f580f866bec141d9e660d032f519448f5ac8 GIT binary patch literal 8284 zcmeHLO=w$J7IwxMTa;ppVyqBKWQI~}QG%9Q%?M$_vnWNZ=z`DlI~Z_>gZe3yF^Px6d6+p14d%rZY<%%%i=5hn^>;f=XLi zB9%|_x%7b6hWx5Ka&1t_f2p8$!hL7-Bs0l;MCZ)-Cel$a`ULKz&9t~d8T~jjB~E1( zpL2kpq4Ld*h@EO)wkWgUu7!_T7m+*lWs zG#QD9E5KjKOkMjwsRrh*&HWE_K~$miRcnmD%%wrL-!*w-%jMSb_kZ&=wlU_hW96Ty zq*x~A#k|Y?7KA6;2*vmGlN+$j%p8L>9}VKguBA*t{>z60AyIf!}wxSw(v z!(50|h7z;sCbKjmt5Tu#39<~YoQwF*Z~17-Ped5o=u?Idqy4FCa~VcA#yLbg#Jd#k z%mS1k={N(64;{lAaYKlQvnzdPSi9~$0=4R&*4`^O-AFMs)ORCpq@1lDmA9(LW#sd8 z6Qe^A@3aau!nqeRlv4C(G99BOa~|bPPvEcg$szNEa$DM|xBQFtQrSl>%T zn1P@dU(SaY~6Iw!lmS2GUG4K4}J3G9!eUIAXrT8kp;0HDnGy9g1f1Lq)x`E=uPar?- zmYAgs-OA~=?PAcRjDp?=7k%Z0EtDS@NHmdc9e0;|&w(!$4*i_#LGe|3N=^%)@*dN+=PtJc9{H(}tbPqJ)>G zopGm0c>jBSe*4DuQwECYzTqyxZ{k~M7 z{#~p;R?K`G`ybY=ue*Ux;;?r3CA|;+r9KbcL(5rzRv-=`_>3zMb4=);G1k<{1@OR%xqu6@(;q5J zqxFaQ#}&!?xBlp~d;Ye)=x3{ql>^P%iRm0X-9`eS&!ij4={WLw{2(#o@3imq?uGxX zT$c!n7;g2y(7?VTDrB*t2kL`18RN_PLvCfXc7yKo^KS3At>cZC79ZL1pfpp3x6$9K z57MjpWdT)1{Gi<2Ywcfj6379x|AhWy4erKtf2g}Mi>)!y%CGp8o*HcbbpH1A%l4vs zJAN>(E>;d4Pd(02y)fefKRFW|?O$}4I|&_4AHw>x`3IiHc!&K2);8_V)u7t18U0KA zQT+oQaq;9yqTAWNQFf@uF|9xc<<-*6Bv)~--1K++SMBfJSID2hHujhGzmOp+clom0 z#+r9`Y%HuSP2#7r+(YX=x_lD8;TmWiRR_rDkWnc)jjY?KHsS~Jo`LMs8-4g*v3IZg zg}cLDyv~wzO#VR?!MzlvA|JFa{f<0b!AJaKQ~<#THgCcQf9~CD9hJXI&a527g|HI5 zYNnh~+b8h0(MRmP)4h5A?dGz0nfls%%2)h&pZt&q&900^HW$^95pDd5_ftM`B`#of zc#nFW!z8?LIcR#3H0(_tQqwu$uj48nlrz-~vth8+{`Byp(;Dgva!!H{QrQW7*x%p} zN;#qv`KtWMtmujL<&arm_etl&)9&e)r~#07T-e>6CbrUsClvZw#J#64l9eTmotT5R zMpYV<+CJVVKWyRb&XD-!6UDFHnY6#z0W${5eta!jZ*?pC7l;F+8erYa9TX38Uh!|_ z0vv=vcJJYfTfL4{qO=`2r?l4o%d`3}D+4~roTKu)!i8ObsJ~_ze{mLo)r$+ywY%Y) z){*a^?$O9|;7+He)0yOS4%*)k4xs;L?|!f2?oe*(O)4nKznnYX7i1IJh>xhVDEV+_ z?0=*9kFyAo9;+xl-2QCu`{0Nbn2mh7gH*&SwMe_z``o)oAnQo%$+Cj9 z`7cI%YM&gy1}eYQBEh8p#TwXAh~1${_|V#X<$5RK2dn_J2H?FIIvy!^Kz~qjr|VIF z$2-dxh@=&SGfW!)WBeCno@_L6`X=^A{5i?b(-V#VBm1x#(Unnyf7X^dAD(yjziVwF z3p>pDzT8I{K6tS|*16?nWazEAzb z0+e4*%$SFPU%V^={lA_r$%!?x7HRu90A_%pafA3=7%)n07h>3mQxQmaD8 zCD_8q-ykYtL+>3-`Rd2EiLb24Y7jpmi04zjZvQaj|ETlFK66>uJyHihad1He6;?l z|E8%^k*)OXIS*c_DL2@>*{$?C*kgSjzV6){{4;#kdwQ5`|5Uq6Y{q;>7uCJkc9j1p zKTnxiS*KCo6PJ;IBe+)W`eU3{R95HKlet$XNzH^9xBK`-GJJh_3mNBi=L_$Qv0f?` zs}W_GHGRRBBUonbu0`Hq~EkPnrg=QQz9dubjqcbrR0PC-w$ zC~<%D3&PntPqCHYeX{%KzB=C5GbK4!>XR?-iAXpBnLPi)yAo<@`-C3$`Pcj}cqGot z*iRxBPQ?r&F;iR%%(9Ni835y51_vg z2V)p7rE=8S4ZiTeJ~FG!EYDc&=&i(9H;Q>^6E7X1qYwK|@Mhi^ACwDx=NLpy#%_JW zo!sDVWFn#<841zbkdCnLc09itsoBrsD=(tip~%esz|pK>uty^~%IF7eqp?FiP3oMQ zun6{v|2kHCi$=wsv?$spWsM?U$h(nWxia=3w{~`}>Pck7p?ZjTiNzE=+7C1yEp>2{ z^ATyJZzI1!H?pXHiOA?G-=IlGuwTk6+BOm^qWB3~tQE8-#y80 z04HTc06`kAM*bVk5BUrtAA+y#W4X~jp0{9SQY4v^^KxcN&z>UAm~z zz2Et}=bU>zF)=am=cPaX;TC>B{JnR@3y;6}?^o#gdvocazy5Aw0#|Zkq7X0TODl!g za?Cw;4>KV5&^_i`Ay$YNVtA7l_TanR<9L#1yxCTLier}JOe>wsv@jFq(V5uF5jqa{ zJg?zfj_1V5lYXLe?G=qY%7#}wyAgd5KCtmrid{&(+ zpJfiyIgV7ViNu)AqEf~YqMd=iE8yS97d(p|g%hAbAJQM=mSbif?F~HiJS(lJwADFM z<*bm;9Mam5Uv)>W4J!FBt*D)F-x)p0OfnzQIWxYAbkvJJfjen4EoHxgew>*Sr*n$W zIl#}c_>EZ41vkn8CBdaShNMInBA%sBTlhv^>{tFOf6}rXOXr+uDv}&74r>pf3up%X zK<-R4-E?ve_!|2!Y^nH^2mOQ>JY&Wk+{Jp7741f1%1gu%uYy{g9qZbOCK}1%Og7Pg z?S05iT-S+`tHog|l8Qn%Xj8A`I)O(383YcjZiN?Ot`Ny`r>j@iq4+fXEMCZubwNp; zXfjv?{!Dh_*8ew6XQyxB0{vVY_(GDe;b-?jwQ})H7gH<5wP@*!Q!o)mf z-X&tlb1TyXadr|`GSF~wt#R%|gJZ^#1uIChQrWN0)r$4D#h*scRD@$052zo`rSmyC zuJ!s}{jz+4*s+8AMai!{tnYc(rJdz?SO-?qGYz#sVu%P5m*};_2!XgOIk9q9E7pqM zrNxK#MS5t<;97|?t=hw0s#op5?)L`0!3R*U_hkDK-#YJmsrnwG3D!5`hu-F@-KAssovO@Foj7}u+Qb#T*v z&2OFe^>$&!Jq9}BSkm|?JW%YPXqZfbs7d_loa9At#5`4-v+^ezuzgeYt~nvytljBX zk7`HG(Y?WHf4=j;-)cs@NHYq``7M8I_jdQPTin0yzT16XzJLzsX=?u{?C+6-L__iz zCJ=2=yguefN1U1&J5hr$CHs1WJNW9$Y`yK5d`0PyLJj=fVLz zha4cQz#i&<$)Rc<_GaFl1^x=FkL6gRG1G8zicjxzqV#WiD`lw84Q`H{{sLrW}`f{bZ`3+Z7252rGU@5 zsei7%Pw^=udzO90pSU&CUiZTw*A@m^XeS6$90^F&Un=Abk;rQs#7muBx3C< zl|Sm6%EgBrI^GDrg^aMdys-seAU~vUtT)6P{?;(OOp&4&CBF~+6DSao81>HyVsT-(C<^n8tdn+r#^ z^IB)t-}0jQAT{Ysx(&DCG3Hqg@Lc|~7^Jh#RAwo?u^k^U16WM8e5 zSHJ_GP`grgjS8dnC;3NLKz;ALfAz65+sv&s77r30DK(jgr<*v47*L+dG@Qw#2RcYi zHFr7>29JUtt9P)1B>GtW&or>FhznV4=z;p6O{(Gi<8mjAp3qkR^;LiH+xF?k_ZB|^ zoYK@9yp8_0_B6AkUuM8t@}Sb{w)d}lse(kc@cK_QxEs^`q3+5oHeb$@D zc>Z-~w)|!CfVHR6;(_a_$GNH(v{N_Elz*~+-CyXXD81Sc>(A6b^fksi>?g3cX?Ly$ z)xOQYntvD(mC9!?QvKfcXBC%v9Md9nP+2NXg}F+4l~!}7dC_@WzCiYq)i3K$*8fbF zs6a<#V|IadcQhJO`(gZaPWSDs)hcJf2d;tk$=V?*3dpGBOs+j$YpgYr2lAeU?2{Wq z_+D}FsQ;wAgRwy4<+wKg=nk85kq=szdM6J*!AJaq^)Z@0usIJO{LkP~`=s)XGqre- z6v9gI*0PnX+CGK1jUi(1gZ}*0cbg01W$J6ObW`z@L-HeaYm2#+vB>5kW@H@5q4{F8D1knt{E^LwYg~{B>N#gGzQS%WUXxb^dhp#d(cqI)($tpU#Ew zVSjoCy`YpQx~&Dm`gd~Nb8-#PTbED|uzPuu*h(9oP|(aF?!A2D zROd8y%6MQg|5LW)5IjNe&_Cv-{M5bT*B*rN%?_9`P%7Z%c)i`P?q4GgjB0>&FMm)x z$a}?qkPC1S__^-0H}?iTW)!gqSiDIVex2Co@@RG7s%<2nW!AYp^=#m3Qdl)El*|`B&u^WUefr6CZv*EBSC| z?0=*9j|x(x$12JkZ-3Q&>z}X!vym@iRkG*T|!6f@2hm7-I zVko%WCAG+d%1`ev`(gh}G*GvS-JwbN@N%qrrU|7vd`3%ktu zO}URUfYb$y#p|dG{jI^{?XOH^MPx7GtVt{2L;!DqRpxA#MyhIMpwU0Ye2U|S=JKCJWCHnAl`|Zwb=RxoDdJ)J&qLp!Lu`V0HlyU%My6FU(@3vtBXfcT87^Z;_fiy4U32lpV{gB$&$Uq()bjRr-M zvhQ8?Utf88)v7#=Rchi0_%5vUp9HV4$887yZXXl1TkJjqKB~k0%fXB8Wq_Sp zeGmIz#te)lQTv+zQ&Bl}hwLDU@QlKUmDqhF0*>Uj_~0DTLt{0ocxtbD$GhBp-g#I5 z_4=WgZ(eMFhTom--=L-KT`wb6Fy69$riXEU#y{PEGydaU(6zpn@9+bjgpbxg_1`je zDzcUA+3_C&~GFvH`>D<>v3>1cy#z<@M`e#$mzVVJtQ{sJ)?{2UTizkKjr5s zGb`&1>U-kSA31_+)viCW|B8ArYXtRD)XDT`ykTu4#_c|TgENq$d&oF9y(iu!W4+Bg z}p>nu7}t25037EQB;c^i#nf1@9?k^9j*+QV~NKDAE>M|!dL z7ZQ8YqLeu#YaH=H-c1{&P%gkZZ7{~7*2Zsq;&=Lukl>hB#l$__U-XXoh&0l-JdNHk zCy9Ea=HS7IuEH7K8QrK=JEuMgw`enR9`i|cVXdHiT3(IS#6p5Zd6|)w5NjE4rH(+3 z=8nN=CWaaY@teKPMepHQ-k~$%5(RWDgkR;0{Ky#TDg9*>buZXf3$%s77anj@X2xL# zW>zad=jXG`tNMyjFDg5^5gO0CVr8N{Mj~K?=nvupV+}xhX#-}9IYTwg>?LGTfu|_4 UekcppDD}WOM?7$hj8NqN0{SG^yZ`_I literal 0 HcmV?d00001 diff --git a/soh/assets/soh_assets.h b/soh/assets/soh_assets.h index 4cf6a426670..ef180ddf754 100644 --- a/soh/assets/soh_assets.h +++ b/soh/assets/soh_assets.h @@ -89,6 +89,54 @@ static const ALIGN_ASSET(2) char gBombchuBagBodyDL[] = dgBombchuBagBodyDL; #define dgBombchuBagMaskDL "__OTR__objects/object_bombchubag/gBombchuBagMaskDL" static const ALIGN_ASSET(2) char gBombchuBagMaskDL[] = dgBombchuBagMaskDL; +#define dgLargeMajorCrateDL "__OTR__objects/object_kibako2/gLargeMajorCrateDL" +static const ALIGN_ASSET(2) char gLargeMajorCrateDL[] = dgLargeMajorCrateDL; + +#define dgLargeMinorCrateDL "__OTR__objects/object_kibako2/gLargeMinorCrateDL" +static const ALIGN_ASSET(2) char gLargeMinorCrateDL[] = dgLargeMinorCrateDL; + +#define dgLargeRandoCrateDL "__OTR__objects/object_kibako2/gLargeRandoCrateDL" +static const ALIGN_ASSET(2) char gLargeRandoCrateDL[] = dgLargeRandoCrateDL; + +#define dgLargeSmallKeyCrateDL "__OTR__objects/object_kibako2/gLargeSmallKeyCrateDL" +static const ALIGN_ASSET(2) char gLargeSmallKeyCrateDL[] = dgLargeSmallKeyCrateDL; + +#define dgLargeTokenCrateDL "__OTR__objects/object_kibako2/gLargeTokenCrateDL" +static const ALIGN_ASSET(2) char gLargeTokenCrateDL[] = dgLargeTokenCrateDL; + +#define dgLargeBossKeyCrateDL "__OTR__objects/object_kibako2/gLargeBossKeyCrateDL" +static const ALIGN_ASSET(2) char gLargeBossKeyCrateDL[] = dgLargeBossKeyCrateDL; + +#define dgLargeHeartCrateDL "__OTR__objects/object_kibako2/gLargeHeartCrateDL" +static const ALIGN_ASSET(2) char gLargeHeartCrateDL[] = dgLargeHeartCrateDL; + +#define dgLargeJunkCrateDL "__OTR__objects/object_kibako2/gLargeJunkCrateDL" +static const ALIGN_ASSET(2) char gLargeJunkCrateDL[] = dgLargeJunkCrateDL; + +#define dgSmallMajorCrateDL "__OTR__objects/object_kibako/gSmallMajorCrateDL" +static const ALIGN_ASSET(2) char gSmallMajorCrateDL[] = dgSmallMajorCrateDL; + +#define dgSmallMinorCrateDL "__OTR__objects/object_kibako/gSmallMinorCrateDL" +static const ALIGN_ASSET(2) char gSmallMinorCrateDL[] = dgSmallMinorCrateDL; + +#define dgSmallRandoCrateDL "__OTR__objects/object_kibako/gSmallRandoCrateDL" +static const ALIGN_ASSET(2) char gSmallRandoCrateDL[] = dgSmallRandoCrateDL; + +#define dgSmallSmallKeyCrateDL "__OTR__objects/object_kibako/gSmallSmallKeyCrateDL" +static const ALIGN_ASSET(2) char gSmallSmallKeyCrateDL[] = dgSmallSmallKeyCrateDL; + +#define dgSmallTokenCrateDL "__OTR__objects/object_kibako/gSmallTokenCrateDL" +static const ALIGN_ASSET(2) char gSmallTokenCrateDL[] = dgSmallTokenCrateDL; + +#define dgSmallBossKeyCrateDL "__OTR__objects/object_kibako/gSmallBossKeyCrateDL" +static const ALIGN_ASSET(2) char gSmallBossKeyCrateDL[] = dgSmallBossKeyCrateDL; + +#define dgSmallHeartCrateDL "__OTR__objects/object_kibako/gSmallHeartCrateDL" +static const ALIGN_ASSET(2) char gSmallHeartCrateDL[] = dgSmallHeartCrateDL; + +#define dgSmallJunkCrateDL "__OTR__objects/object_kibako/gSmallJunkCrateDL" +static const ALIGN_ASSET(2) char gSmallJunkCrateDL[] = dgSmallJunkCrateDL; + //boss keys #define dgBossKeyCustomDL "__OTR__objects/object_bosskey/gBossKeyCustomDL" static const ALIGN_ASSET(2) char gBossKeyCustomDL[] = dgBossKeyCustomDL; diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index d672233cc38..fb02afc5814 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -1,6 +1,8 @@ #include "ShuffleCrates.h" #include "soh_assets.h" #include "static_data.h" +#include +#include "global.h" extern "C" { #include "variables.h" @@ -8,6 +10,8 @@ extern "C" { #include "objects/object_kibako2/object_kibako2.h" #include "overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h" #include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h" +#include "soh/Enhancements/enhancementTypes.h" +#include "soh/ResourceManagerHelpers.h" extern PlayState* gPlayState; } @@ -16,41 +20,128 @@ extern PlayState* gPlayState; extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { - static Gfx* dList = (Gfx*)gLargeCrateDL; + GetItemCategory getItemCategory; auto crateActor = ((ObjKibako2*)thisx); + //u8 hasCreatedRandoChestTextures = 0; + u8 hasCustomCrateDLs = 0; + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL_25Opa(play->state.gfxCtx); - gDPSetGrayscaleColor(POLY_OPA_DISP++, 200, 0, 200, 255); - - if (Flags_GetRandomizerInf(crateActor->crateIdentity.randomizerInf) == 0) { - gSPGrayscale(POLY_OPA_DISP++, true); + if (ResourceMgr_FileIsCustomByName(gLargeCrateDL)) { + hasCustomCrateDLs = 1; + return; } - Gfx_DrawDListOpa(play, dList); - - gSPGrayscale(POLY_OPA_DISP++, false); + int isVanilla = csmc == CSMC_DISABLED || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + + GetItemEntry crateItem = + Rando::Context::GetInstance()->GetFinalGIEntry(crateActor->crateIdentity.randomizerCheck, true, GI_NONE); + getItemCategory = crateItem.getItemCategory; + + // If they have bombchus, don't consider the bombchu item major + if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && + ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || + (crateItem.modIndex == MOD_NONE && + (crateItem.getItemId == GI_BOMBCHUS_5 || crateItem.getItemId == GI_BOMBCHUS_10 || + crateItem.getItemId == GI_BOMBCHUS_20)))) { + getItemCategory = ITEM_CATEGORY_JUNK; + // If it's a bottle and they already have one, consider the item lesser + } else if ((crateItem.modIndex == MOD_RANDOMIZER && crateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && crateItem.getItemId <= RG_BOTTLE_WITH_POE) || + (crateItem.modIndex == MOD_NONE && (crateItem.getItemId == GI_BOTTLE || crateItem.getItemId == GI_MILK_BOTTLE))) { + if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { + getItemCategory = ITEM_CATEGORY_LESSER; + } + } - CLOSE_DISPS(play->state.gfxCtx); + // Change texture + // TODO: add heart texture when supported gLargeHeartCrateDL + if (!isVanilla && !hasCustomCrateDLs && + (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE)) { + switch (getItemCategory) { + case ITEM_CATEGORY_MAJOR: + Gfx_DrawDListOpa(play, (Gfx*)gLargeMajorCrateDL); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + Gfx_DrawDListOpa(play, (Gfx*)gLargeTokenCrateDL); + break; + case ITEM_CATEGORY_SMALL_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gLargeSmallKeyCrateDL); + break; + case ITEM_CATEGORY_BOSS_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gLargeBossKeyCrateDL); + break; + case ITEM_CATEGORY_LESSER: + Gfx_DrawDListOpa(play, (Gfx*)gLargeMinorCrateDL); + break; + case ITEM_CATEGORY_JUNK: + default: + Gfx_DrawDListOpa(play, (Gfx*)gLargeJunkCrateDL); + break; + } + } else { + Gfx_DrawDListOpa(play, (Gfx*)gLargeRandoCrateDL); + } } extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { - static Gfx* dList = (Gfx*)gSmallWoodenBoxDL; + GetItemCategory getItemCategory; auto smallcrateActor = ((ObjKibako*)thisx); + // u8 hasCreatedRandoChestTextures = 0; + u8 hasCustomSmallCrateDLs = 0; + int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); + int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); - OPEN_DISPS(play->state.gfxCtx); - Gfx_SetupDL_25Opa(play->state.gfxCtx); - gDPSetGrayscaleColor(POLY_OPA_DISP++, 200, 0, 200, 255); - - if (Flags_GetRandomizerInf(smallcrateActor->smallcrateIdentity.randomizerInf) == 0) { - gSPGrayscale(POLY_OPA_DISP++, true); + if (ResourceMgr_FileIsCustomByName(gSmallWoodenBoxDL)) { + hasCustomSmallCrateDLs = 1; + return; } - Gfx_DrawDListOpa(play, dList); - - gSPGrayscale(POLY_OPA_DISP++, false); + int isVanilla = csmc == CSMC_DISABLED || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); + + GetItemEntry smallcrateItem = Rando::Context::GetInstance()->GetFinalGIEntry(smallcrateActor->smallcrateIdentity.randomizerCheck, true, GI_NONE); + getItemCategory = smallcrateItem.getItemCategory; + + if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && + ((smallcrateItem.modIndex == MOD_RANDOMIZER && smallcrateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || + (smallcrateItem.modIndex == MOD_NONE && + (smallcrateItem.getItemId == GI_BOMBCHUS_5 || smallcrateItem.getItemId == GI_BOMBCHUS_10 || smallcrateItem.getItemId == GI_BOMBCHUS_20)))) { + getItemCategory = ITEM_CATEGORY_JUNK; + // If it's a bottle and they already have one, consider the item lesser + } else if ((smallcrateItem.modIndex == MOD_RANDOMIZER && smallcrateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && + smallcrateItem.getItemId <= RG_BOTTLE_WITH_POE) || + (smallcrateItem.modIndex == MOD_NONE && (smallcrateItem.getItemId == GI_BOTTLE || smallcrateItem.getItemId == GI_MILK_BOTTLE))) { + if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { + getItemCategory = ITEM_CATEGORY_LESSER; + } + } - CLOSE_DISPS(play->state.gfxCtx); + // Change texture + // TODO: add heart texture when supported gSmallHeartCrateDL + if (!isVanilla && !hasCustomSmallCrateDLs && (csmc == CSMC_BOTH || csmc == CSMC_TEXTURE)) { + switch (getItemCategory) { + case ITEM_CATEGORY_MAJOR: + Gfx_DrawDListOpa(play, (Gfx*)gSmallMajorCrateDL); + break; + case ITEM_CATEGORY_SKULLTULA_TOKEN: + Gfx_DrawDListOpa(play, (Gfx*)gSmallTokenCrateDL); + break; + case ITEM_CATEGORY_SMALL_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gSmallSmallKeyCrateDL); + break; + case ITEM_CATEGORY_BOSS_KEY: + Gfx_DrawDListOpa(play, (Gfx*)gSmallBossKeyCrateDL); + break; + case ITEM_CATEGORY_LESSER: + Gfx_DrawDListOpa(play, (Gfx*)gSmallMinorCrateDL); + break; + case ITEM_CATEGORY_JUNK: + default: + Gfx_DrawDListOpa(play, (Gfx*)gSmallJunkCrateDL); + break; + } + } else { + Gfx_DrawDListOpa(play, (Gfx*)gSmallRandoCrateDL); + } } bool GetOverworldCratesIncluded(Rando::Location* loc) { @@ -153,64 +244,6 @@ void ObjKibako_RandomizerInit(void* actorRef) { smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); } -//void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { -// va_list args; -// va_copy(args, originalArgs); -// -// // Draw custom model for crates to indicate it holding a randomized item. -// if (id == VB_CRATE_SETUP_DRAW) { -// ObjKibako2* crateActor = va_arg(args, ObjKibako2*); -// if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { -// crateActor->dyna.actor.draw = (ActorFunc)ObjKibako2_RandomizerDraw; -// *should = false; -// } else { -// *should = true; -// } -// } -// -// // Do not spawn vanilla item from crates, instead spawn the randomized item. -// if (id == VB_CRATE_DROP_ITEM) { -// ObjKibako2* crateActor = va_arg(args, ObjKibako2*); -// if (ObjKibako2_RandomizerHoldsItem(crateActor, gPlayState)) { -// ObjKibako2_RandomizerSpawnCollectible(crateActor, gPlayState); -// *should = false; -// } else { -// *should = true; -// } -// } -// -// va_end(args); -//} - -//void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { -// va_list args; -// va_copy(args, originalArgs); -// -// // Draw custom model for crates to indicate it holding a randomized item. -// if (id == VB_SMALL_CRATE_SETUP_DRAW) { -// ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); -// if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { -// smallcrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; -// *should = false; -// } else { -// *should = true; -// } -// } -// -// // Do not spawn vanilla item from crates, instead spawn the randomized item. -// if (id == VB_SMALL_CRATE_DROP_ITEM) { -// ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); -// if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { -// ObjKibako_RandomizerSpawnCollectible(smallcrateActor, gPlayState); -// *should = false; -// } else { -// *should = true; -// } -// } -// -// va_end(args); -//} - void RegisterShuffleCrates() { bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_CRATES); diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 7b377ab8524..e7154d88c3f 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1863,39 +1863,39 @@ void Rando::StaticData::InitLocationTable() { // // Small Crates // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check - locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); - locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); - locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); + locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", "Fire Temple MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", "Fire Temple MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", "Fire Temple MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); - locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1267, 200), "MQ Lava Torch Small Crate 5", "Fire Temple MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1952), "MQ Dragon Room Torches Small Crate 1", "Water Temple MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1911), "MQ Dragon Room Torches Small Crate 2", "Water Temple MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1991), "MQ Dragon Room Torches Small Crate 3", "Water Temple MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", "Water Temple MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", "Water Temple MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", "Water Temple MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); - locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1166, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); - locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 382), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1405, -975), "MQ Lava Torch Small Crate 2", "Fire Temple MQ Lava Torch Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(685, 183), "MQ Lava Torch Small Crate 3", "Fire Temple MQ Lava Torch Small Crate 3", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1210, 163), "MQ Lava Torch Small Crate 4", "Fire Temple MQ Lava Torch Small Crate 4", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4)); + locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1267, 200), "MQ Lava Torch Small Crate 5", "Fire Temple MQ Lava Torch Small Crate 5", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1952), "MQ Dragon Room Torches Small Crate 1", "Water Temple MQ Dragon Room Torches Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1911), "MQ Dragon Room Torches Small Crate 2", "Water Temple MQ Dragon Room Torches Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-2210, -1991), "MQ Dragon Room Torches Small Crate 3", "Water Temple MQ Dragon Room Torches Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1470, -622), "MQ Storage Room A Small Crate 1", "Water Temple MQ Storage Room A Small Crate 1", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1341, -621), "MQ Storage Room A Small Crate 2", "Water Temple MQ Storage Room A Small Crate 2", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1393, -621), "MQ Storage Room A Small Crate 3", "Water Temple MQ Storage Room A Small Crate 3", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3)); + locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1166, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); + locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 382), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); - locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); - locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_NONE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); + locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); + locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); // Fairies locationTable[RC_SFM_FAIRY_GROTTO_FAIRY_1] = Location::Fairy(RC_SFM_FAIRY_GROTTO_FAIRY_1, RCQUEST_BOTH, RCAREA_SACRED_FOREST_MEADOW, SCENE_FAIRYS_FOUNTAIN, 0x1800, "Grotto Fairy 1", "SFM Grotto Fairy 1", RHT_SFM_FAIRY_GROTTO_FAIRY, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1)); From 56f6ba9e4c97e9f6cb73f33429657c1ff3a0177d Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:48:02 -0500 Subject: [PATCH 40/52] proper cap --- .../Enhancements/randomizer/ShuffleCrates.cpp | 50 +++++++++---------- .../Enhancements/randomizer/randomizer.cpp | 16 +++--- .../actors/ovl_Obj_Kibako/z_obj_kibako.h | 2 +- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index fb02afc5814..1c25eaf3851 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -85,7 +85,7 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { GetItemCategory getItemCategory; - auto smallcrateActor = ((ObjKibako*)thisx); + auto smallCrateActor = ((ObjKibako*)thisx); // u8 hasCreatedRandoChestTextures = 0; u8 hasCustomSmallCrateDLs = 0; int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); @@ -98,18 +98,18 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { int isVanilla = csmc == CSMC_DISABLED || (requiresStoneAgony && !CHECK_QUEST_ITEM(QUEST_STONE_OF_AGONY)); - GetItemEntry smallcrateItem = Rando::Context::GetInstance()->GetFinalGIEntry(smallcrateActor->smallcrateIdentity.randomizerCheck, true, GI_NONE); - getItemCategory = smallcrateItem.getItemCategory; + GetItemEntry smallCrateItem = Rando::Context::GetInstance()->GetFinalGIEntry(smallCrateActor->smallCrateIdentity.randomizerCheck, true, GI_NONE); + getItemCategory = smallCrateItem.getItemCategory; if (INV_CONTENT(ITEM_BOMBCHU) == ITEM_BOMBCHU && - ((smallcrateItem.modIndex == MOD_RANDOMIZER && smallcrateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || - (smallcrateItem.modIndex == MOD_NONE && - (smallcrateItem.getItemId == GI_BOMBCHUS_5 || smallcrateItem.getItemId == GI_BOMBCHUS_10 || smallcrateItem.getItemId == GI_BOMBCHUS_20)))) { + ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId == RG_PROGRESSIVE_BOMBCHUS) || + (smallCrateItem.modIndex == MOD_NONE && + (smallCrateItem.getItemId == GI_BOMBCHUS_5 || smallCrateItem.getItemId == GI_BOMBCHUS_10 || smallCrateItem.getItemId == GI_BOMBCHUS_20)))) { getItemCategory = ITEM_CATEGORY_JUNK; // If it's a bottle and they already have one, consider the item lesser - } else if ((smallcrateItem.modIndex == MOD_RANDOMIZER && smallcrateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && - smallcrateItem.getItemId <= RG_BOTTLE_WITH_POE) || - (smallcrateItem.modIndex == MOD_NONE && (smallcrateItem.getItemId == GI_BOTTLE || smallcrateItem.getItemId == GI_MILK_BOTTLE))) { + } else if ((smallCrateItem.modIndex == MOD_RANDOMIZER && smallCrateItem.getItemId >= RG_BOTTLE_WITH_RED_POTION && + smallCrateItem.getItemId <= RG_BOTTLE_WITH_POE) || + (smallCrateItem.modIndex == MOD_NONE && (smallCrateItem.getItemId == GI_BOTTLE || smallCrateItem.getItemId == GI_MILK_BOTTLE))) { if (gSaveContext.inventory.items[SLOT_BOTTLE_1] != ITEM_NONE) { getItemCategory = ITEM_CATEGORY_LESSER; } @@ -177,16 +177,16 @@ uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) } } -uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallcrateActor, PlayState* play) { - RandomizerCheck rc = smallcrateActor->smallcrateIdentity.randomizerCheck; +uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallCrateActor, PlayState* play) { + RandomizerCheck rc = smallCrateActor->smallCrateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); // Don't pull randomized item if crate isn't randomized or is already checked if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || (crateSetting == RO_SHUFFLE_CRATES_DUNGEONS && !isDungeon) || - Flags_GetRandomizerInf(smallcrateActor->smallcrateIdentity.randomizerInf) || - smallcrateActor->smallcrateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { + Flags_GetRandomizerInf(smallCrateActor->smallCrateIdentity.randomizerInf) || + smallCrateActor->smallCrateIdentity.randomizerCheck == RC_UNKNOWN_CHECK) { return false; } else { return true; @@ -203,11 +203,11 @@ void ObjKibako2_RandomizerSpawnCollectible(ObjKibako2* crateActor, PlayState* pl item00->actor.world.rot.y = Rand_CenteredFloat(65536.0f); } -void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallcrateActor, PlayState* play) { - EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &smallcrateActor->actor.world.pos, ITEM00_SOH_DUMMY); - item00->randoInf = smallcrateActor->smallcrateIdentity.randomizerInf; +void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallCrateActor, PlayState* play) { + EnItem00* item00 = (EnItem00*)Item_DropCollectible2(play, &smallCrateActor->actor.world.pos, ITEM00_SOH_DUMMY); + item00->randoInf = smallCrateActor->smallCrateIdentity.randomizerInf; item00->itemEntry = - Rando::Context::GetInstance()->GetFinalGIEntry(smallcrateActor->smallcrateIdentity.randomizerCheck, true, GI_NONE); + Rando::Context::GetInstance()->GetFinalGIEntry(smallCrateActor->smallCrateIdentity.randomizerCheck, true, GI_NONE); item00->actor.draw = (ActorFunc)EnItem00_DrawRandomizedItem; item00->actor.velocity.y = 8.0f; item00->actor.speedXZ = 2.0f; @@ -239,9 +239,9 @@ void ObjKibako_RandomizerInit(void* actorRef) { if (actor->id != ACTOR_OBJ_KIBAKO) return; - ObjKibako* smallcrateActor = static_cast(actorRef); + ObjKibako* smallCrateActor = static_cast(actorRef); - smallcrateActor->smallcrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); + smallCrateActor->smallCrateIdentity = OTRGlobals::Instance->gRandomizer->IdentifySmallCrate(gPlayState->sceneNum, (s16)actor->home.pos.x, (s16)actor->home.pos.z); } void RegisterShuffleCrates() { @@ -272,9 +272,9 @@ void RegisterShuffleCrates() { COND_ID_HOOK(OnActorInit, ACTOR_OBJ_KIBAKO, shouldRegister, ObjKibako_RandomizerInit); COND_VB_SHOULD(VB_SMALL_CRATE_SETUP_DRAW, shouldRegister, { - ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); - if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { - smallcrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; + ObjKibako* smallCrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) { + smallCrateActor->actor.draw = (ActorFunc)ObjKibako_RandomizerDraw; *should = false; } else { *should = true; @@ -282,9 +282,9 @@ void RegisterShuffleCrates() { }); COND_VB_SHOULD(VB_SMALL_CRATE_DROP_ITEM, shouldRegister, { - ObjKibako* smallcrateActor = va_arg(args, ObjKibako*); - if (ObjKibako_RandomizerHoldsItem(smallcrateActor, gPlayState)) { - ObjKibako_RandomizerSpawnCollectible(smallcrateActor, gPlayState); + ObjKibako* smallCrateActor = va_arg(args, ObjKibako*); + if (ObjKibako_RandomizerHoldsItem(smallCrateActor, gPlayState)) { + ObjKibako_RandomizerSpawnCollectible(smallCrateActor, gPlayState); *should = false; } else { *should = true; diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 0a762662281..24e68610fca 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2125,25 +2125,25 @@ CrateIdentity Randomizer::IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ) { } SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ) { - struct SmallCrateIdentity smallcrateIdentity; - uint32_t smallcrateSceneNum = sceneNum; + struct SmallCrateIdentity smallCrateIdentity; + uint32_t smallCrateSceneNum = sceneNum; - smallcrateIdentity.randomizerInf = RAND_INF_MAX; - smallcrateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + smallCrateIdentity.randomizerInf = RAND_INF_MAX; + smallCrateIdentity.randomizerCheck = RC_UNKNOWN_CHECK; s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); - Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, smallcrateSceneNum, actorParams); + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_KIBAKO, smallCrateSceneNum, actorParams); if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { LUSLOG_WARN("IdentifyCrate did not receive a valid RC value (%d).", location->GetRandomizerCheck()); assert(false); } else { - smallcrateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; - smallcrateIdentity.randomizerCheck = location->GetRandomizerCheck(); + smallCrateIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + smallCrateIdentity.randomizerCheck = location->GetRandomizerCheck(); } - return smallcrateIdentity; + return smallCrateIdentity; } u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h index 5162f6a10b9..32a35563f24 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h +++ b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.h @@ -12,7 +12,7 @@ typedef struct ObjKibako { /* 0x0000 */ Actor actor; /* 0x014C */ ObjKibakoActionFunc actionFunc; /* 0x0150 */ ColliderCylinder collider; - /* */ SmallCrateIdentity smallcrateIdentity; + /* */ SmallCrateIdentity smallCrateIdentity; } ObjKibako; // size = 0x019C #endif From 748646927fd63061e7b9f7701abae7b4e70cf3e5 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 14:50:38 -0500 Subject: [PATCH 41/52] better comments on not-shuffled crates --- soh/soh/Enhancements/randomizer/ShuffleCrates.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index 1c25eaf3851..ee33404f1e3 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -154,6 +154,7 @@ bool GetOverworldCratesIncluded(Rando::Location* loc) { RandomizerCheck rc = loc->GetRandomizerCheck(); + // Remove child GV/GF crates from check tracker when not shuffled if (logicSetting != RO_LOGIC_NO_LOGIC && (rc == RC_GV_CRATE_BRIDGE_1 || rc == RC_GV_CRATE_BRIDGE_2 || rc == RC_GV_CRATE_BRIDGE_3 || rc == RC_GV_CRATE_BRIDGE_4 || rc == RC_GF_ARCHERY_LEFT_END_CHILD_CRATE)) { return false; @@ -218,6 +219,7 @@ void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); + // don't shuffle two OOB crates in GF and don't shuffle child GV/GF crates when not in no logic if (actor->id != ACTOR_OBJ_KIBAKO2 || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) || (gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429) || From 6e43a912a029a3dc6bfe691fdcf2149e46bef752 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:02:19 -0500 Subject: [PATCH 42/52] update for context changes --- soh/soh/Enhancements/randomizer/ShuffleCrates.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index ee33404f1e3..ddb6d68f12c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -15,7 +15,7 @@ extern "C" { extern PlayState* gPlayState; } -#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).GetContextOptionIndex() +#define RAND_GET_OPTION(option) Rando::Context::GetInstance()->GetOption(option).Get() extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); @@ -145,8 +145,8 @@ extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { } bool GetOverworldCratesIncluded(Rando::Location* loc) { - uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); - uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).Get(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get(); if (loc->GetRCType() != RCTYPE_CRATE || crateSetting == RO_SHUFFLE_CRATES_OFF) { return false; @@ -165,7 +165,7 @@ bool GetOverworldCratesIncluded(Rando::Location* loc) { uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) { RandomizerCheck rc = crateActor->crateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); - uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get(); // Don't pull randomized item if crate isn't randomized or is already checked if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || @@ -181,7 +181,7 @@ uint8_t ObjKibako2_RandomizerHoldsItem(ObjKibako2* crateActor, PlayState* play) uint8_t ObjKibako_RandomizerHoldsItem(ObjKibako* smallCrateActor, PlayState* play) { RandomizerCheck rc = smallCrateActor->smallCrateIdentity.randomizerCheck; uint8_t isDungeon = Rando::StaticData::GetLocation(rc)->IsDungeon(); - uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).GetContextOptionIndex(); + uint8_t crateSetting = Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Get(); // Don't pull randomized item if crate isn't randomized or is already checked if (!IS_RANDO || (crateSetting == RO_SHUFFLE_CRATES_OVERWORLD && isDungeon) || @@ -217,7 +217,7 @@ void ObjKibako_RandomizerSpawnCollectible(ObjKibako* smallCrateActor, PlayState* void ObjKibako2_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); - uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).GetContextOptionIndex(); + uint8_t logicSetting = Rando::Context::GetInstance()->GetOption(RSK_LOGIC_RULES).Get(); // don't shuffle two OOB crates in GF and don't shuffle child GV/GF crates when not in no logic if (actor->id != ACTOR_OBJ_KIBAKO2 || From f8f807c3da86cd1844304ae571f6c41e3ac632d5 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:15:23 -0500 Subject: [PATCH 43/52] update for rest of context changes --- soh/soh/Enhancements/randomizer/context.cpp | 5 +++-- soh/soh/Enhancements/randomizer/dungeon.cpp | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 0644fca2e00..85d9ebd5fdd 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -45,6 +45,7 @@ Context::Context() { &mOptions[RSK_SHUFFLE_BEEHIVES], &mOptions[RSK_SHUFFLE_COWS], &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], &mOptions[RSK_SHUFFLE_FREESTANDING], &mOptions[RSK_SHUFFLE_MERCHANTS], &mOptions[RSK_SHUFFLE_FROG_SONG_RUPEES], @@ -167,8 +168,8 @@ void Context::GenerateLocationPool() { AddLocations(StaticData::GetOverworldPotLocations()); } - if (mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_OVERWORLD) || - mSettings->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { + if (mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_OVERWORLD) || + mOptions[RSK_SHUFFLE_CRATES].Is(RO_SHUFFLE_CRATES_ALL)) { AddLocations(StaticData::GetOverworldCrateLocations()); AddLocations(StaticData::GetOverworldSmallCrateLocations()); } diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 47b0a9da703..f14ff2dd863 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -155,8 +155,8 @@ std::vector DungeonInfo::GetDungeonLocations() const { auto potLocations = masterQuest ? mqPots : vanillaPots; AddElementsToPool(locations, potLocations); } - if (Context::GetInstance()->GetSettings()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) || - Context::GetInstance()->GetSettings()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { + if (Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_DUNGEONS) || + Context::GetInstance()->GetOption(RSK_SHUFFLE_CRATES).Is(RO_SHUFFLE_CRATES_ALL)) { auto crateLocations = masterQuest ? mqCrates : vanillaCrates; AddElementsToPool(locations, crateLocations); } From d53eb9681fede0eb66d5f132d9e74d3975e1c64e Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 15:45:40 -0500 Subject: [PATCH 44/52] cleanup --- .../hint_list/hint_list_exclude_dungeon.cpp | 2 +- .../Enhancements/randomizer/ShuffleCrates.cpp | 2 - .../dungeons/dodongos_cavern.cpp | 42 ++++++------ .../location_access/dungeons/fire_temple.cpp | 38 +++++------ .../location_access/dungeons/water_temple.cpp | 68 +++++++++---------- .../Enhancements/randomizer/randomizerTypes.h | 2 +- .../actors/ovl_Obj_Kibako/z_obj_kibako.c | 1 - .../actors/ovl_Obj_Kibako2/z_obj_kibako2.c | 1 + 8 files changed, 77 insertions(+), 79 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index c6a910f681c..42129d8f24e 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -1308,7 +1308,7 @@ hintTextTable[RHT_FIRE_TEMPLE_NEAR_BOSS_CHEST] = HintText(CustomMessage("They sa hintTextTable[RHT_CRATE_SPIRIT_TEMPLE] = HintText(CustomMessage("They say that a #crate in Spirit Temple# contains #[[1]]#.", /*german*/ "", - /*french*/ "Selon moi, une #caisse dans le colosse# contient #[[1]]#.", {QM_RED, QM_GREEN})); + /*french*/ "Selon moi, une #caisse dans le Temple de l'Esprit# contient #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | SHADOW TEMPLE | diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp index ddb6d68f12c..1741772d720 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.cpp @@ -22,7 +22,6 @@ extern void EnItem00_DrawRandomizedItem(EnItem00* enItem00, PlayState* play); extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { GetItemCategory getItemCategory; auto crateActor = ((ObjKibako2*)thisx); - //u8 hasCreatedRandoChestTextures = 0; u8 hasCustomCrateDLs = 0; int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); @@ -86,7 +85,6 @@ extern "C" void ObjKibako2_RandomizerDraw(Actor* thisx, PlayState* play) { extern "C" void ObjKibako_RandomizerDraw(Actor* thisx, PlayState* play) { GetItemCategory getItemCategory; auto smallCrateActor = ((ObjKibako*)thisx); - // u8 hasCreatedRandoChestTextures = 0; u8 hasCustomSmallCrateDLs = 0; int csmc = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeAndTextureMatchContents"), CSMC_DISABLED); int requiresStoneAgony = CVarGetInteger(CVAR_ENHANCEMENT("ChestSizeDependsStoneOfAgony"), 0); diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index 0e39434ba21..6bd8d906fe1 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -298,10 +298,10 @@ void RegionTable_Init_DodongosCavern() { //EventAccess(&logic->CanClimbDCStairs, []{return logic->HasExplosives || logic->CanUse(RG_DINS_FIRE) || (ctx->GetTrickOption(RT_DC_STAIRCASE) && logic->CanUse(RG_FAIRY_BOW));}), }, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()), }, { @@ -326,7 +326,7 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_STAIRS_UPPER] = Region("Dodongos Cavern MQ Stairs Upper", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), + LOCATION(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, logic->CanStunDeku()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_2, logic->CanBreakCrates()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_UPPER_CRATE_3, logic->CanBreakCrates()), @@ -415,10 +415,10 @@ void RegionTable_Init_DodongosCavern() { areaTable[RR_DODONGOS_CAVERN_MQ_TWO_FIRES_ROOM] = Region("Dodongos Cavern MQ Before Upper Lizalfos", "Dodongos Cavern", {RA_DODONGOS_CAVERN}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_CRATE_2, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS, []{return true;}), @@ -468,18 +468,18 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);}) && //could be a seperate room if it gets busy logic->CanGetEnemyDrop(RE_GOLD_SKULLTULA, ED_BOOMERANG, true))), //Implies you can avoid/kill the enemies with what you use on the skull, if this assumption is broken, add //&& (Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanKillEnemy(RE_FIRE_KEESE) && logic->CanKillEnemy(RE_MAD_SCRUB);}) || (logic->CanAvoidEnemy(RE_FIRE_KEESE) && logic->CanAvoidEnemy(RE_MAD_SCRUB))) - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, logic->CanBreakPots()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_POE_ROOM_CRATE_8, logic->CanBreakCrates()), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, []{return Here(RR_DODONGOS_CAVERN_MQ_POES_ROOM, []{return logic->CanDetonateBombFlowers() || logic->HasItem(RG_GORONS_BRACELET);});}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index be8dc973ab1..bf0e6c15505 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -536,7 +536,7 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_LOWER_MAZE_CRATE_CAGE] = Region("Fire Temple MQ Lower Maze Crate Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, logic->CanBreakCrates()), @@ -561,12 +561,12 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_UPPER_MAZE_BOX_CAGE] = Region("Fire Temple MQ Upper Maze Box Cage", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, true), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, logic->CanBreakSmallCrates()), //Assumes maze access LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, logic->HasExplosives()), }, { @@ -628,18 +628,18 @@ void RegionTable_Init_FireTemple() { areaTable[RR_FIRE_TEMPLE_MQ_HIGH_TORCH_ROOM] = Region("Fire Temple MQ High Torch Room", "Fire Temple", {RA_FIRE_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, logic->CanBreakSmallCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, logic->CanBreakPots()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_5, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_UPPER_MAZE, []{return logic->SmallKeys(RR_FIRE_TEMPLE, 3);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp index d5fc6789760..08e9a7091cc 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/water_temple.cpp @@ -466,20 +466,20 @@ void RegionTable_Init_WaterTemple() { //Region exists to add crate/pot/box locations areaTable[RR_WATER_TEMPLE_MQ_STORAGE_ROOM] = Region("Water Temple MQ Storage Room", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_CRATE_7, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return logic->MQWaterLevel(WL_LOW_OR_MID) || (logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 8);}), @@ -487,19 +487,19 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_BEHIND_BLUE_SWITCH_2F] = Region("Water Temple MQ Behind Blue Switch 2F", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_3, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_4, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_5, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_CRATE_6, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, logic->CanBreakSmallCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_MAIN, []{return true;}), @@ -661,11 +661,11 @@ void RegionTable_Init_WaterTemple() { }, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()), - LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_1, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_1, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_DRAGON_ROOM_TORCHES_SMALL_CRATE_3, logic->CanBreakSmallCrates()), }, { //Exits @@ -689,8 +689,8 @@ void RegionTable_Init_WaterTemple() { areaTable[RR_WATER_TEMPLE_MQ_BOSS_KEY_ROOM_SWITCH] = Region("Water Temple MQ Boss Key Room Switch", "Water Temple", {RA_WATER_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations - LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), - LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()), + LOCATION(RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, logic->CanBreakPots()), + LOCATION(RC_WATER_TEMPLE_MQ_BK_ROOM_UPPER_CRATE, logic->CanBreakCrates()), }, { //Exits Entrance(RR_WATER_TEMPLE_MQ_DRAGON_ROOM_DOOR, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index a14a54cf77e..7abf08d6377 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -289,7 +289,7 @@ typedef enum { RCTYPE_BOSS_HEART_OR_OTHER_REWARD, // Boss heart container or lesser dungeon rewards (lens, ice arrow) RCTYPE_POT, // Pots RCTYPE_CRATE, // Crates - RCTYPE_SMALL_CRATE, // Small crates + RCTYPE_SMALL_CRATE, // Small crates RCTYPE_DUNGEON_REWARD, // Dungeon rewards (blue warps) RCTYPE_OCARINA, // Ocarina locations RCTYPE_BEEHIVE, // Beehives diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c index a063c24dc9b..3fbb7bf8ee6 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako/z_obj_kibako.c @@ -112,7 +112,6 @@ void ObjKibako_Destroy(Actor* thisx, PlayState* play2) { PlayState* play = play2; ObjKibako* this = (ObjKibako*)thisx; - Collider_DestroyCylinder(play, &this->collider); } diff --git a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c index a83ed5680bb..fe95d2824f0 100644 --- a/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c +++ b/soh/src/overlays/actors/ovl_Obj_Kibako2/z_obj_kibako2.c @@ -183,5 +183,6 @@ void ObjKibako2_Update(Actor* thisx, PlayState* play) { void ObjKibako2_Draw(Actor* thisx, PlayState* play) { if (!GameInteractor_Should(VB_CRATE_SETUP_DRAW, false, thisx)) { } + Gfx_DrawDListOpa(play, gLargeCrateDL); } From ecbb41d645878fbe5ece3160e14f55e49058e7dd Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 16:15:03 -0500 Subject: [PATCH 45/52] fix shadow hint RHT --- .../randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index 42129d8f24e..09eb9fa5c56 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -1573,7 +1573,7 @@ hintTextTable[RHT_SHADOW_TEMPLE_MAP_CHEST] = HintText(CustomMessage("They say th /*german*/ "!!!", /*french*/ "Selon moi, #appeler le soleil près d’un coffre invisible gardé par les morts# révèle #[[1]]#.", {QM_RED, QM_GREEN})); - hintTextTable[RHT_CRATE_FOREST_TEMPLE] = HintText(CustomMessage("They say that a #crate in Shadow Temple# contains #[[1]]#.", + hintTextTable[RHT_CRATE_SHADOW_TEMPLE] = HintText(CustomMessage("They say that a #crate in Shadow Temple# contains #[[1]]#.", /*german*/ "", /*french*/ "Selon moi, une #caisse dans le Temple de l'Ombre# contient #[[1]]#.", {QM_RED, QM_GREEN})); From 9fc62ef06233261add8d3ffc9e023d002a1212cf Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 18:12:15 -0500 Subject: [PATCH 46/52] more cleanup --- soh/soh/Enhancements/randomizer/settings.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 5d677938bd4..c773ce1697f 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -902,6 +902,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_BEEHIVES], &mOptions[RSK_SHUFFLE_COWS], &mOptions[RSK_SHUFFLE_POTS], + &mOptions[RSK_SHUFFLE_CRATES], &mOptions[RSK_SHUFFLE_KOKIRI_SWORD], &mOptions[RSK_SHUFFLE_OCARINA], &mOptions[RSK_SHUFFLE_OCARINA_BUTTONS], From 839f3dd3e38f316897363305ad5b742b5b85f0f6 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 18:28:22 -0500 Subject: [PATCH 47/52] count to three --- .../randomizer/location_access/dungeons/fire_temple.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp index bf0e6c15505..7f2c7bc6ba6 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/fire_temple.cpp @@ -538,8 +538,8 @@ void RegionTable_Init_FireTemple() { //Locations LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, true), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_1, logic->CanBreakCrates()), - LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CRATE_3, logic->CanBreakCrates()), }, { //Exits Entrance(RR_FIRE_TEMPLE_MQ_LOWER_MAZE, []{return true;}), From a4cf1a1ac95036342ceacfb8f0eb25a8f4bd5883 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 18:39:23 -0500 Subject: [PATCH 48/52] child gf logic --- .../randomizer/location_access/gerudo_fortress.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp index 1c28e974c40..123ef2a4df2 100644 --- a/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/gerudo_fortress.cpp @@ -47,8 +47,8 @@ void RegionTable_Init_GerudoFortress() { LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_2, logic->CanBreakCrates()), LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_3, logic->CanBreakCrates()), LOCATION(RC_GF_OUTSIDE_CENTER_CRATE_4, logic->CanBreakCrates()), - LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), - LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, (logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), + LOCATION(RC_GF_OUTSIDE_LEFT_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD) || logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RANGE_CRATE_1, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RANGE_CRATE_2, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), LOCATION(RC_GF_ARCHERY_RANGE_CRATE_3, (logic->IsChild || logic->HasItem(RG_GERUDO_MEMBERSHIP_CARD)) && logic->CanBreakCrates()), From fbb1e80baa9a65e62e5b1a13d45d2a8f32215eb4 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Fri, 31 Jan 2025 18:44:59 -0500 Subject: [PATCH 49/52] gv cow crate --- .../randomizer/location_access/overworld/gerudo_valley.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp index d957dcb4cbb..dfb73465283 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/gerudo_valley.cpp @@ -34,6 +34,7 @@ void RegionTable_Init_GerudoValley() { LOCATION(RC_GV_GOSSIP_STONE_FAIRY, logic->CallGossipFairy()), LOCATION(RC_GV_GOSSIP_STONE_FAIRY_BIG, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GV_GOSSIP_STONE, true), + LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GV_LOWER_STREAM, []{return true;}), @@ -55,7 +56,6 @@ void RegionTable_Init_GerudoValley() { //Locations LOCATION(RC_GV_CRATE_FREESTANDING_POH, logic->CanBreakCrates()), LOCATION(RC_GV_FREESTANDING_POH_CRATE, logic->CanBreakCrates()), - LOCATION(RC_GV_NEAR_COW_CRATE, logic->IsChild && logic->CanBreakCrates()), }, { //Exits Entrance(RR_GV_UPPER_STREAM, []{return ctx->GetTrickOption(RT_DAMAGE_BOOST_SIMPLE) && logic->HasExplosives();}), From b8b1495ff550f56a57cd641625059f7c77ff3785 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sat, 1 Feb 2025 14:06:21 -0500 Subject: [PATCH 50/52] loc list spacing --- .../Enhancements/randomizer/location_list.cpp | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 814b667eac1..84c06bc3c4c 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -1862,18 +1862,18 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE] = Location::Crate(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE, RCQUEST_MQ, RCAREA_GERUDO_TRAINING_GROUND, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-59, -1598), "MQ Maze Crate", "Gerudo Training Ground MQ Maze Crate", RHT_CRATE_GERUDO_TRAINING_GROUND, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUND_MQ_MAZE_CRATE)); // Small Crates - // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check + // Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Spoiler Name Hint Text Key Vanilla Spoiler Collection Check locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-141, -1945), "Platform Room Small Crate 1", "Jabu Jabus Belly Platform Room Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_1)); locationTable[RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-189, -1925), "Platform Room Small Crate 2", "Jabu Jabus Belly Platform Room Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_PLATFORM_ROOM_SMALL_CRATE_2)); locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2030, -1172), "After Hammer Small Crate 1", "Fire Temple After Hammer Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_1)); locationTable[RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(-2072, -1135), "After Hammer Small Crate 2", "Fire Temple After Hammer Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_AFTER_HAMMER_SMALL_CRATE_2)); - locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); - locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-971, -940), "Before Child Climb Small Crate 1", "Spirit Temple Before Child Climb Small Crate 1", RHT_CRATE_SPIRIT_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1)); + locationTable[RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2] = Location::SmallCrate(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, RCQUEST_VANILLA, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1151, -939), "Before Child Climb Small Crate 2", "Spirit Temple Before Child Climb Small Crate 2", RHT_CRATE_SPIRIT_TEMPLE, RG_DEKU_NUTS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2)); locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-512, -4592), "MQ Triple Hallway Small Crate 1", "Jabu Jabus Belly MQ Triple Hallway Small Crate 1", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_1)); locationTable[RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2] = Location::SmallCrate(RC_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_JABU_JABUS_BELLY, SCENE_JABU_JABU, TWO_ACTOR_PARAMS(-666, -4671), "MQ Triple Hallway Small Crate 2", "Jabu Jabus Belly MQ Triple Hallway Small Crate 2", RHT_CRATE_JABU_JABU, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_JABU_JABUS_BELLY_MQ_TRIPLE_HALLWAY_SMALL_CRATE_2)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); - locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(1599, -1322), "MQ Frozen Eye Switch Small Crate 1", "Forest Temple MQ Frozen Eye Switch Small Crate 1", RHT_CRATE_FOREST_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_1)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2364, -873), "MQ Frozen Eye Switch Small Crate 2", "Forest Temple MQ Frozen Eye Switch Small Crate 2", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_2)); + locationTable[RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3] = Location::SmallCrate(RC_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_FOREST_TEMPLE, SCENE_FOREST_TEMPLE, TWO_ACTOR_PARAMS(2312, -874), "MQ Frozen Eye Switch Small Crate 3", "Forest Temple MQ Frozen Eye Switch Small Crate 3", RHT_CRATE_FOREST_TEMPLE, RG_ARROWS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TEMPLE_MQ_FROZEN_EYE_SWITCH_SMALL_CRATE_3)); locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1290), "MQ Lizalfos Maze Upper Small Crate 1", "Fire Temple MQ Lizalfos Maze Upper Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_1)); locationTable[RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(1699, 1332), "MQ Lizalfos Maze Upper Small Crate 2", "Fire Temple MQ Lizalfos Maze Upper Small Crate 2", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_SMALL_CRATE_2)); locationTable[RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1] = Location::SmallCrate(RC_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_FIRE_TEMPLE, SCENE_FIRE_TEMPLE, TWO_ACTOR_PARAMS(460, 370), "MQ Lava Torch Small Crate 1", "Fire Temple MQ Lava Torch Small Crate 1", RHT_CRATE_FIRE_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TEMPLE_MQ_LAVA_TORCH_SMALL_CRATE_1)); @@ -1890,10 +1890,10 @@ void Rando::StaticData::InitLocationTable() { // locationTable[RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(1284, -621), "MQ Storage Room A Small Crate 4", "Water Temple MQ Storage Room A Small Crate 4", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_STORAGE_ROOM_A_SMALL_CRATE_4)); locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-1166, 97), "MQ GS Storage Room Lower Small Crate", "Water Temple MQ GS Storage Room Lower Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_LOWER_SMALL_CRATE)); locationTable[RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE] = Location::SmallCrate(RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE, RCQUEST_MQ, RCAREA_WATER_TEMPLE, SCENE_WATER_TEMPLE, TWO_ACTOR_PARAMS(-992, 382), "MQ GS Storage Room Upper Small Crate", "Water Temple MQ GS Storage Room Upper Small Crate", RHT_CRATE_WATER_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_UPPER_SMALL_CRATE)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); - locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(365, 52), "MQ Truth Spinner Small Crate 1", "Shadow Temple MQ Truth Spinner Small Crate 1", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_1)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -62), "MQ Truth Spinner Small Crate 2", "Shadow Temple MQ Truth Spinner Small Crate 2", RHT_CRATE_SHADOW_TEMPLE, RG_BOMBS_5, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_2)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(363, -7), "MQ Truth Spinner Small Crate 3", "Shadow Temple MQ Truth Spinner Small Crate 3", RHT_CRATE_SHADOW_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_3)); + locationTable[RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4] = Location::SmallCrate(RC_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4, RCQUEST_MQ, RCAREA_SHADOW_TEMPLE, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(366, 114), "MQ Truth Spinner Small Crate 4", "Shadow Temple MQ Truth Spinner Small Crate 4", RHT_CRATE_SHADOW_TEMPLE, RG_ARROWS_10, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TEMPLE_MQ_TRUTH_SPINNER_SMALL_CRATE_4)); locationTable[RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-271, -983), "MQ Statue Small Crate", "Spirit Temple MQ Statue Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_STATUE_SMALL_CRATE)); locationTable[RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE] = Location::SmallCrate(RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RCQUEST_MQ, RCAREA_SPIRIT_TEMPLE, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1382, 190), "MQ Beamos Small Crate", "Spirit Temple MQ Beamos Small Crate", RHT_CRATE_SPIRIT_TEMPLE, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)); From 9cec3ef2af5ecfb5d5953600a7dd087d2e732cdc Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Sun, 2 Feb 2025 11:23:53 -0500 Subject: [PATCH 51/52] remove redundant small crates --- soh/soh/Enhancements/randomizer/location_list.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_list.cpp b/soh/soh/Enhancements/randomizer/location_list.cpp index 84c06bc3c4c..085de9ccb68 100644 --- a/soh/soh/Enhancements/randomizer/location_list.cpp +++ b/soh/soh/Enhancements/randomizer/location_list.cpp @@ -49,9 +49,6 @@ std::vector Rando::StaticData::GetOverworldCrateLocations() { if (location.GetRCType() == RCTYPE_CRATE && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { overworldCrateLocations.push_back(location.GetRandomizerCheck()); } - if (location.GetRCType() == RCTYPE_SMALL_CRATE && location.IsOverworld() && location.GetRandomizerCheck() != RC_UNKNOWN_CHECK) { - overworldCrateLocations.push_back(location.GetRandomizerCheck()); - } } return overworldCrateLocations; } From f4357d94ddebcc222224593001a99be1d78ab010 Mon Sep 17 00:00:00 2001 From: Eric Hoey <121978037+A-Green-Spoon@users.noreply.github.com> Date: Tue, 4 Feb 2025 09:41:18 -0500 Subject: [PATCH 52/52] remove left over vb funcs --- soh/soh/Enhancements/randomizer/ShuffleCrates.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleCrates.h b/soh/soh/Enhancements/randomizer/ShuffleCrates.h index 051f88cbe54..e3e0f1a50da 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleCrates.h +++ b/soh/soh/Enhancements/randomizer/ShuffleCrates.h @@ -14,7 +14,5 @@ void ObjKibako_RandomizerInit(void* actorRef); #endif bool GetOverworldCratesIncluded(Rando::Location* loc); -void ShuffleCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); -void ShuffleSmallCrates_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs); #endif //ShuffleCrates_H \ No newline at end of file