From 2ba85cbf3a31d8ab00d052dddf3d7322eb2ee489 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:51:41 -0500 Subject: [PATCH 01/41] Add necessary enums and structs for silver rupee shuffle --- .../Enhancements/randomizer/randomizerTypes.h | 230 +++++++++++++++++- .../Enhancements/randomizer/randomizer_inf.h | 159 +++++++++++- 2 files changed, 380 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 550f2b1af0c..0799f18dc04 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -294,6 +294,7 @@ typedef enum { RCTYPE_FISH, // Fishes RCTYPE_FREESTANDING, // Freestanding rupees and hearts RCTYPE_FAIRY, // Fairies + RCTYPE_SILVER_RUPEE, // Silver Rupees } RandomizerCheckType; typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest; @@ -2848,6 +2849,157 @@ typedef enum { RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + // Vanilla Silver Rupee Locations + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, + RC_SHADOW_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RC_SPIRIT_GATE_SILVER_RUPEE_1, + RC_SPIRIT_GATE_SILVER_RUPEE_2, + RC_SPIRIT_GATE_SILVER_RUPEE_3, + RC_SPIRIT_GATE_SILVER_RUPEE_4, + RC_SPIRIT_GATE_SILVER_RUPEE_5, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, + RC_SPIRIT_BOULDER_SILVER_RUPEE_1, + RC_SPIRIT_BOULDER_SILVER_RUPEE_2, + RC_SPIRIT_BOULDER_SILVER_RUPEE_3, + RC_SPIRIT_BOULDER_SILVER_RUPEE_4, + RC_SPIRIT_BOULDER_SILVER_RUPEE_5, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, + RC_FOREST_TRIAL_SILVER_RUPEE_1, + RC_FOREST_TRIAL_SILVER_RUPEE_2, + RC_FOREST_TRIAL_SILVER_RUPEE_3, + RC_FOREST_TRIAL_SILVER_RUPEE_4, + RC_FOREST_TRIAL_SILVER_RUPEE_5, + RC_FIRE_TRIAL_SILVER_RUPEE_1, + RC_FIRE_TRIAL_SILVER_RUPEE_2, + RC_FIRE_TRIAL_SILVER_RUPEE_3, + RC_FIRE_TRIAL_SILVER_RUPEE_4, + RC_FIRE_TRIAL_SILVER_RUPEE_5, + RC_LIGHT_TRIAL_SILVER_RUPEE_1, + RC_LIGHT_TRIAL_SILVER_RUPEE_2, + RC_LIGHT_TRIAL_SILVER_RUPEE_3, + RC_LIGHT_TRIAL_SILVER_RUPEE_4, + RC_LIGHT_TRIAL_SILVER_RUPEE_5, + RC_SPIRIT_TRIAL_SILVER_RUPEE_1, + RC_SPIRIT_TRIAL_SILVER_RUPEE_2, + RC_SPIRIT_TRIAL_SILVER_RUPEE_3, + RC_SPIRIT_TRIAL_SILVER_RUPEE_4, + RC_SPIRIT_TRIAL_SILVER_RUPEE_5, + // MQ Silver Rupee Locations + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RC_MAX } RandomizerCheck; @@ -3330,6 +3482,37 @@ typedef enum { RG_FISHING_POLE, RG_DEKU_STICK_BAG, RG_DEKU_NUT_BAG, + RG_SILVER_RUPEE_FIRST, + RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE = RG_SILVER_RUPEE_FIRST, // for convenience + RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_BEAMOS_SILVER_RUPEE, + RG_SPIRIT_BOULDER_SILVER_RUPEE, + RG_SHADOW_SCYTHE_SILVER_RUPEE, + RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + RG_FOREST_TRIAL_SILVER_RUPEE, + RG_FIRE_TRIAL_SILVER_RUPEE, + RG_SPIRIT_TRIAL_SILVER_RUPEE, + RG_LIGHT_TRIAL_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, + RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + RG_WATER_TRIAL_MQ_SILVER_RUPEE, + RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + RG_SILVER_RUPEE_LAST = RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + RG_BOTTOMLESS_SILVER_RUPEE_POUCH, RG_HINT, RG_TYCOON_WALLET, RG_BRONZE_SCALE, @@ -4282,6 +4465,26 @@ typedef enum { RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA, RHT_BEEHIVE_BEHIND_KING_ZORA, + // Silver Rupee Locations + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, + RHT_SPIRIT_GATE_SILVER_RUPEE, + RHT_SPIRIT_BEAMOS_SILVER_RUPEE, + RHT_SPIRIT_BOULDER_SILVER_RUPEE, + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + RHT_FOREST_TRIAL_SILVER_RUPEE, + RHT_FIRE_TRIAL_SILVER_RUPEE, + RHT_SPIRIT_TRIAL_SILVER_RUPEE, + RHT_LIGHT_TRIAL_SILVER_RUPEE, + RHT_DODONGOS_CAVERN_SILVER_RUPEE, + RHT_WATER_TRIAL_SILVER_RUPEE, + RHT_SHADOW_TRIAL_SILVER_RUPEE, // Items RHT_KOKIRI_SWORD, RHT_MASTER_SWORD, @@ -4530,6 +4733,15 @@ typedef enum { RHT_BRONZE_SCALE, RHT_FISHING_POLE, RHT_SKELETON_KEY, + // Silver Rupee Items + RHT_DC_SILVER_RUPEE, + RHT_ICE_CAVERN_SILVER_RUPEE, + RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, + RHT_SPIRIT_TEMPLE_SILVER_RUPEE, + RHT_SHADOW_TEMPLE_SILVER_RUPEE, + RHT_GANONS_CASTLE_SILVER_RUPEE, + RHT_MAGICAL_SILVER_RUPEE, RHT_EPONA, RHT_OVERWORLD_KEY, RHT_HINT_MYSTERIOUS, @@ -4933,7 +5145,6 @@ typedef enum { RHT_MAX } RandomizerHintTextKey; - typedef struct { RandomizerGet rgID; RandomizerGet fakeRgID; @@ -5042,16 +5253,16 @@ typedef enum { RSK_STARTING_KOKIRI_SWORD, RSK_STARTING_MASTER_SWORD, RSK_STARTING_ZELDAS_LULLABY, - RSK_STARTING_EPONAS_SONG, - RSK_STARTING_SARIAS_SONG, + RSK_STARTING_EPONAS_SONG, + RSK_STARTING_SARIAS_SONG, RSK_STARTING_SUNS_SONG, RSK_STARTING_SONG_OF_TIME, RSK_STARTING_SONG_OF_STORMS, - RSK_STARTING_MINUET_OF_FOREST, + RSK_STARTING_MINUET_OF_FOREST, RSK_STARTING_BOLERO_OF_FIRE, RSK_STARTING_SERENADE_OF_WATER, - RSK_STARTING_REQUIEM_OF_SPIRIT, - RSK_STARTING_NOCTURNE_OF_SHADOW, + RSK_STARTING_REQUIEM_OF_SPIRIT, + RSK_STARTING_NOCTURNE_OF_SHADOW, RSK_STARTING_PRELUDE_OF_LIGHT, RSK_SHUFFLE_KOKIRI_SWORD, RSK_SHUFFLE_MASTER_SWORD, @@ -5221,6 +5432,8 @@ typedef enum { RSK_SHUFFLE_FREESTANDING, RSK_SHUFFLE_FAIRIES, RSK_LOCK_OVERWORLD_DOORS, + RSK_SHUFFLE_SILVER_RUPEES, + RSK_MAGICAL_SILVER_RUPEE, RSK_MAX } RandomizerSettingKey; @@ -5663,6 +5876,11 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; +typedef struct SilverRupeeIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} SilverRupeeIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index e43acf57c6f..66ee96c705e 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -144,7 +144,6 @@ typedef enum { RAND_INF_GREG_FOUND, - RAND_INF_TOT_MASTER_SWORD, RAND_INF_CHILD_FISHING, @@ -745,7 +744,6 @@ typedef enum { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - RAND_INF_CAUGHT_LOACH, RAND_INF_CAN_SWIM, @@ -1325,7 +1323,162 @@ typedef enum { RAND_INF_FISHING_HOLE_UNLOCKED, RAND_INF_FISHING_HOLE_KEY_OBTAINED, - // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16) + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5, + + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, + + RAND_INF_MAGICAL_SILVER_RUPEE, + + // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be + // ceil(RAND_INF_MAX / 16) RAND_INF_MAX, } RandomizerInf; From 8739048a4021c8dcd94b07f638bf7136b8f4094e Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:56:22 -0500 Subject: [PATCH 02/41] Add SilverRupeeIdentity to silver rupee actor --- soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h index 77a19c87351..68e8749a3e0 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h @@ -56,6 +56,7 @@ typedef struct EnGSwitch { /* 0x0178 */ s8 objIndex; /* 0x017C */ ColliderCylinder collider; /* 0x01C8 */ EnGSwitchEffect effects[100]; + /* */ SilverRupeeIdentity srIdentity; } EnGSwitch; // size = 0x12F8 #endif From e80682e9af1149541d6019f0f8f16abdc57f4b74 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:56:49 -0500 Subject: [PATCH 03/41] Initial commit for ShuffleSilverRupees files. --- .../randomizer/ShuffleSilverRupees.cpp | 23 +++++++++++++++++++ .../randomizer/ShuffleSilverRupees.h | 13 +++++++++++ 2 files changed, 36 insertions(+) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp create mode 100644 soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp new file mode 100644 index 00000000000..13eeccc6dec --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -0,0 +1,23 @@ +#include "ShuffleSilverRupees.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" +extern PlayState* gPlayState; +} + +void EnGSwitch_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + int16_t sceneNum = gPlayState->sceneNum; + f32 param1 = actor->world.pos.x; + f32 param2 = actor->world.pos.z; + + //Two particular silver rupees in Master Quest Shadow Temple have + // the same X and Z coordinates. We have to make an exception here + // and look them up by X and Y coordinates instead. + if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110.0f && param2 == 3372.0f) { + param2 = actor->world.pos.y; + } + EnGSwitch* srActor = static_cast(actorRef); + srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); +} \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h new file mode 100644 index 00000000000..a2401a720df --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -0,0 +1,13 @@ +#ifndef SHUFFLESILVERRUPEES_H +#define SHUFFLESILVERRUPEES_H + +#ifdef __cplusplus +extern "C" { +#endif +void EnGSwitch_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + + +#endif //SHUFLESILVERRUPEES_H \ No newline at end of file From 1497d0eccb1ca995e75b03ea513cf5aaed38a876 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 21:23:19 -0500 Subject: [PATCH 04/41] Add Locations and Silver Counter class --- .../randomizer/ShuffleSilverRupees.cpp | 204 +++++++++++++++++- .../randomizer/ShuffleSilverRupees.h | 15 ++ 2 files changed, 218 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 13eeccc6dec..2180600c9ac 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -1,4 +1,5 @@ #include "ShuffleSilverRupees.h" +#include "static_data.h" extern "C" { #include "variables.h" @@ -19,5 +20,206 @@ void EnGSwitch_RandomizerInit(void* actorRef) { param2 = actor->world.pos.y; } EnGSwitch* srActor = static_cast(actorRef); - srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + //srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); +} + +void Rando::StaticData::RegisterSilverRupeeLocations() { + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", "Ice Cavern Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", "Ice Cavern Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", "Ice Cavern Spinning Blades Silver Rupee 3", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", "Ice Cavern Spinning Blades Silver Rupee 4", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", "Ice Cavern Spinning Blades Silver Rupee 5", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); + + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", "Ice Cavern Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", "Ice Cavern Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", "Ice Cavern Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", "Ice Cavern Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", "Ice Cavern Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); + + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Bottom of the Well Basement Silver Rupee 1", "Bottom of the Well Basement Silver Rupee 1", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Bottom of the Well Basement Silver Rupee 2", "Bottom of the Well Basement Silver Rupee 2", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Bottom of the Well Basement Silver Rupee 3", "Bottom of the Well Basement Silver Rupee 3", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Bottom of the Well Basement Silver Rupee 4", "Bottom of the Well Basement Silver Rupee 4", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Bottom of the Well Basement Silver Rupee 5", "Bottom of the Well Basement Silver Rupee 5", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", "GTG Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", "GTG Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", "GTG Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", "GTG Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", "GTG Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", "GTG Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", "GTG Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", "GTG Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", "GTG Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", "GTG Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", "GTG Whirlpool Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", "GTG Whirlpool Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", "GTG Whirlpool Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", "GTG Whirlpool Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", "GTG Whirlpool Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", "Spirit Temple Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", "Spirit Temple Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", "Spirit Temple Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", "Spirit Temple Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", "Spirit Temple Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", "Spirit Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", "Spirit Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "Beamos Room Silver Rupee 3", "Spirit Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "Beamos Room Silver Rupee 4", "Spirit Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "Beamos Room Silver Rupee 5", "Spirit Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "Boulder Room Silver Rupee 1", "Spirit Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "Boulder Room Silver Rupee 2", "Spirit Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "Boulder Room Silver Rupee 3", "Spirit Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "Boulder Room Silver Rupee 4", "Spirit Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "Boulder Room Silver Rupee 5", "Spirit Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", "Shadow Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", "Shadow Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", "Shadow Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", "Shadow Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", "Shadow Outside Spike Rain Room Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", "Shadow Outside Spike Rain Room Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", "Shadow Outside Spike Rain Room Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", "Shadow Outside Spike Rain Room Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", "Shadow Outside Spike Rain Room Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", "Shadow Invisible Spikes Room Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", "Shadow Invisible Spikes Room Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", "Shadow Invisible Spikes Room Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", "Shadow Invisible Spikes Room Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", "Shadow Invisible Spikes Room Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "Forest Trial Silver Rupee 1", "Inside Ganon's Castle Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "Forest Trial Silver Rupee 2", "Inside Ganon's Castle Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "Forest Trial Silver Rupee 3", "Inside Ganon's Castle Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "Forest Trial Silver Rupee 4", "Inside Ganon's Castle Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "Forest Trial Silver Rupee 5", "Inside Ganon's Castle Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "Fire Trial Silver Rupee 1", "Inside Ganon's Castle Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "Fire Trial Silver Rupee 2", "Inside Ganon's Castle Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "Fire Trial Silver Rupee 3", "Inside Ganon's Castle Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "Fire Trial Silver Rupee 4", "Inside Ganon's Castle Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "Fire Trial Silver Rupee 5", "Inside Ganon's Castle Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "Spirit Trial Silver Rupee 1", "Inside Ganon's Castle Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "Spirit Trial Silver Rupee 2", "Inside Ganon's Castle Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "Spirit Trial Silver Rupee 3", "Inside Ganon's Castle Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "Spirit Trial Silver Rupee 4", "Inside Ganon's Castle Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "Spirit Trial Silver Rupee 5", "Inside Ganon's Castle Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "Light Trial Silver Rupee 1", "Inside Ganon's Castle Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "Light Trial Silver Rupee 2", "Inside Ganon's Castle Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "Light Trial Silver Rupee 3", "Inside Ganon's Castle Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "Light Trial Silver Rupee 4", "Inside Ganon's Castle Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "Light Trial Silver Rupee 5", "Inside Ganon's Castle Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", "Dodongo's Cavern Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", "Dodongo's Cavern Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", "Dodongo's Cavern Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", "Dodongo's Cavern Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", "Dodongo's Cavern Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", "Shadow Temple MQ Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", "Shadow Temple MQ Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", "Shadow Temple MQ Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Temple MQ Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", "Shadow Temple MQ Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", "Shadow Temple MQ Invisible Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", "Shadow Temple MQ Invisible Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", "Shadow Temple MQ Invisible Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", "Shadow Temple MQ Invisible Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", "Shadow Temple MQ Invisible Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", "Shadow Temple MQ Invisible Scythe Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", "Shadow Temple MQ Invisible Scythe Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", "Shadow Temple MQ Invisible Scythe Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", "Shadow Temple MQ Invisible Scythe Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", "Shadow Temple MQ Invisible Scythe Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); + + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", "Shadow Temple MQ Outside Spike Rain Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", "Shadow Temple MQ Outside Spike Rain Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + // The following two locations have the same X and Z coordinates, so use X and Y for the params instead. + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", "Shadow Temple MQ Outside Spike Rain Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", "Shadow Temple MQ Outside Spike Rain Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + // Back to X and Z coordinates for the params. + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", "Shadow Temple MQ Outside Spike Rain Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", "Shadow Temple MQ Invisible Spikes Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", "Shadow Temple MQ Invisible Spikes Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", "Shadow Temple MQ Invisible Spikes Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", "Shadow Temple MQ Invisible Spikes Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", "Shadow Temple MQ Invisible Spikes Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", "Shadow Temple MQ Invisible Spikes Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", "Shadow Temple MQ Invisible Spikes Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", "Shadow Temple MQ Invisible Spikes Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", "Shadow Temple MQ Invisible Spikes Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", "Shadow Temple MQ Invisible Spikes Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); + + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", "Spirit Temple MQ Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", "Spirit Temple MQ Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", "Spirit Temple MQ Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", "Spirit Temple MQ Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", "Spirit Temple MQ Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", "Gerduo Training Grounds MQ Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", "Gerduo Training Grounds MQ Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", "Gerduo Training Grounds MQ Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", "Gerduo Training Grounds MQ Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", "Gerduo Training Grounds MQ Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", "Gerduo Training Grounds MQ Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", "Ganon's Castle Fire Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", "Ganon's Castle Fire Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", "Ganon's Castle Fire Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", "Ganon's Castle Fire Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", "Ganon's Castle Fire Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", "Ganon's Castle Water Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", "Ganon's Castle Water Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", "Ganon's Castle Water Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", "Ganon's Castle Water Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", "Ganon's Castle Water Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", "Ganon's Castle Shadow Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", "Ganon's Castle Shadow Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", "Ganon's Castle Shadow Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", "Ganon's Castle Shadow Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", "Ganon's Castle Shadow Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterSilverRupeeLocations); + +Rando::SilverRupeeCounter::SilverRupeeCounter() : mCollected(0), mTotal(0), mRandoGet(RG_NONE) { +} + +Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet) : mCollected(0), mTotal(total), mRandoGet(randoGet) { +} + +uint8_t Rando::SilverRupeeCounter::GetCollected() const { + return mCollected; +} + +uint8_t Rando::SilverRupeeCounter::GetTotal() const { + return mTotal; +} + +void Rando::SilverRupeeCounter::IncrementCollected(uint8_t amount) { + mCollected += amount; } \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index a2401a720df..88bc804feec 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -9,5 +9,20 @@ void EnGSwitch_RandomizerInit(void* actorRef); }; #endif +namespace Rando { + class SilverRupeeCounter { + public: + SilverRupeeCounter(); + SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); + + uint8_t GetCollected() const; + uint8_t GetTotal() const; + void IncrementCollected(uint8_t amount = 1) + private: + uint8_t mCollected = 0; + uint8_t mTotal; + RandomizerGet mRandoGet; + } +} #endif //SHUFLESILVERRUPEES_H \ No newline at end of file From 728c317d2a6fc8142de3357c5173a768d4095275 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 11 Feb 2025 17:26:43 -0500 Subject: [PATCH 05/41] Adds more of the actor update code to Silver Rupees --- .../randomizer/ShuffleSilverRupees.cpp | 61 ++++++++++++++++--- .../Enhancements/randomizer/randomizerTypes.h | 1 + 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 2180600c9ac..49ac53432f9 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -7,20 +7,63 @@ extern "C" { extern PlayState* gPlayState; } -void EnGSwitch_RandomizerInit(void* actorRef) { - Actor* actor = static_cast(actorRef); - int16_t sceneNum = gPlayState->sceneNum; - f32 param1 = actor->world.pos.x; - f32 param2 = actor->world.pos.z; +extern "C" void EnGSwitch_RandomizerSilverRupeeIdle(EnGSwitch* self, PlayState *play) { + Player* player = GET_PLAYER(play); + + self->actor.shape.rot.y += 0x800; + if (self->actor.xyzDistToPlayerSq < 900.0f) { + Flags_SetRandomizerInf(self->srIdentity.randomizerInf); + self->killTimer = 0; + self->actionFunc = EnGSwitch_Kill; + } +} + +extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { + EnGSwitch* srActor = static_cast(thisx); + Matrix_Push(); + Matrix_Scale(17.5f, 17.5f, 17.5f, MTXMODE_APPLY); + if (srActor->type == ENGSWITCH_SILVER_RUPEE) { + if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { + EnItem00_CustomItemsParticles(thisx, play, GET_ITEM_MYSTERY); + GetItemEntry_Draw(play, GET_ITEM_MYSTERY); + } else { + EnItem00_CustomItemsParticles(thisx, play, srActor->srIdentity.itemEntry); + GetItemEntry_Draw(play, srActor->srIdentity.itemEntry); + } + Matrix_Pop(); + } +} - //Two particular silver rupees in Master Quest Shadow Temple have +SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { + SilverRupeeIdentity srIdentity; + uint16_t sceneNum = gPlayState->sceneNum; + int16_t param1 = (int16_t)pos.x; + int16_t param2 = (int16_t)pos.z; + // Two particular silver rupees in Master Quest Shadow Temple have // the same X and Z coordinates. We have to make an exception here // and look them up by X and Y coordinates instead. - if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110.0f && param2 == 3372.0f) { - param2 = actor->world.pos.y; + if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110 && param2 == 3372) { + param2 =(int16_t)pos.y; } + Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_G_SWITCH, sceneNum, TWO_ACTOR_PARAMS(param1, param2)); + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("SilverRupeeIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + srIdentity.randomizerCheck = location->GetRandomizerCheck(); + srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.randomizerCheck, true, GI_NONE); + srIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); + } + return srIdentity; +} + +void EnGSwitch_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + EnGSwitch* srActor = static_cast(actorRef); - //srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + if (srActor->type == ENGSWITCH_SILVER_RUPEE) { + srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + } } void Rando::StaticData::RegisterSilverRupeeLocations() { diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 0799f18dc04..19fc152f345 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5879,6 +5879,7 @@ typedef struct FishIdentity { typedef struct SilverRupeeIdentity { RandomizerInf randomizerInf; RandomizerCheck randomizerCheck; + GetItemEntry itemEntry; } SilverRupeeIdentity; typedef enum { From d0e6faff1dcacc55d37c1ee3a5b62d26a284b0eb Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 11 Feb 2025 23:02:59 -0500 Subject: [PATCH 06/41] Wire up silver rupee hook_handlers Currently done unconditionally, will add the options later --- .../vanilla-behavior/GIVanillaBehavior.h | 24 ++++++ .../randomizer/ShuffleSilverRupees.cpp | 78 +++++++++++++++---- .../randomizer/ShuffleSilverRupees.h | 45 +++++++---- soh/soh/Enhancements/randomizer/context.cpp | 36 +++++++++ soh/soh/Enhancements/randomizer/context.h | 11 +++ .../Enhancements/randomizer/hook_handlers.cpp | 3 + .../Enhancements/randomizer/randomizerTypes.h | 6 -- soh/soh/Enhancements/randomizer/static_data.h | 1 + .../actors/ovl_En_G_Switch/z_en_g_switch.c | 73 +++++++++-------- .../actors/ovl_En_G_Switch/z_en_g_switch.h | 1 + 10 files changed, 210 insertions(+), 68 deletions(-) diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 96453dff86b..6c6ab4e0894 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -1865,4 +1865,28 @@ typedef enum { // #### `args` // - `*EnWonderTalk2` VB_WONDER_TALK, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_COLLECT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_COUNT_CHECK, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_SETUP_DRAW, } GIVanillaBehavior; diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 49ac53432f9..135719c5600 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -1,5 +1,7 @@ #include "ShuffleSilverRupees.h" #include "static_data.h" +#include +#include "draw.h" extern "C" { #include "variables.h" @@ -7,19 +9,8 @@ extern "C" { extern PlayState* gPlayState; } -extern "C" void EnGSwitch_RandomizerSilverRupeeIdle(EnGSwitch* self, PlayState *play) { - Player* player = GET_PLAYER(play); - - self->actor.shape.rot.y += 0x800; - if (self->actor.xyzDistToPlayerSq < 900.0f) { - Flags_SetRandomizerInf(self->srIdentity.randomizerInf); - self->killTimer = 0; - self->actionFunc = EnGSwitch_Kill; - } -} - extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { - EnGSwitch* srActor = static_cast(thisx); + EnGSwitch* srActor = reinterpret_cast(thisx); Matrix_Push(); Matrix_Scale(17.5f, 17.5f, 17.5f, MTXMODE_APPLY); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { @@ -50,8 +41,8 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { LUSLOG_WARN("SilverRupeeIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); assert(false); } else { - srIdentity.randomizerCheck = location->GetRandomizerCheck(); - srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.randomizerCheck, true, GI_NONE); + srIdentity.index.randomizerCheck = location->GetRandomizerCheck(); + srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.index.randomizerCheck, true, GI_NONE); srIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); } return srIdentity; @@ -59,13 +50,64 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { void EnGSwitch_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); + if (actor->id != ACTOR_EN_G_SWITCH) return; EnGSwitch* srActor = static_cast(actorRef); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { - srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + srActor->srIdentity = IdentifySilverRupee(actor->world.pos); + } else { + srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; + } +} + +void ShuffleSilverRupees_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { + va_list args; + va_copy(args, originalArgs); + Actor* actor = va_arg(args, Actor*); + va_end(args); + + EnGSwitch* srActor = reinterpret_cast(actor); + + if (id == VB_SILVER_RUPEE_COLLECT) { + Flags_SetRandomizerInf(srActor->srIdentity.randomizerInf); + Actor_Kill(actor); + *should = false; + } else if (id == VB_SILVER_RUPEE_COUNT_CHECK) { + // check if all silver rupees for that room have been collected + // we run this every frame in case one of the rupees for a room + // is randomized into the same room. Without this we'd need to + // reload the scene after collecting it to unlock the door. + if (OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(srActor->srIdentity.index.randomizerGet).AllCollected()) { + if ((gPlayState->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (srActor->actor.room == 2)) { + Flags_SetTempClear(gPlayState, srActor->actor.room); + } else { + Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); + Flags_SetSwitch(gPlayState, srActor->switchFlag); + } + Actor_Kill(actor); + } + *should = false; + } else if (id == VB_SILVER_RUPEE_SETUP_DRAW) { + srActor->actor.draw = (ActorFunc)EnGSwitch_RandomizerDraw; + *should = false; } } +uint32_t onSRVanillaBehaviorHook = 0; +uint32_t onSRActorInitHook = 0; + +void ShuffleSilverRupees_RegisterHooks() { + onSRActorInitHook = GameInteractor::Instance->RegisterGameHook(EnGSwitch_RandomizerInit); + onSRVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleSilverRupees_OnVanillaBehaviorHandler); +} + +void ShuffleSilverRupees_UnregisterHooks() { + GameInteractor::Instance->UnregisterGameHook(onSRActorInitHook); + GameInteractor::Instance->UnregisterGameHook(onSRVanillaBehaviorHook); + onSRVanillaBehaviorHook = 0; + onSRActorInitHook = 0; +} + void Rando::StaticData::RegisterSilverRupeeLocations() { locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", "Ice Cavern Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", "Ice Cavern Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); @@ -265,4 +307,8 @@ uint8_t Rando::SilverRupeeCounter::GetTotal() const { void Rando::SilverRupeeCounter::IncrementCollected(uint8_t amount) { mCollected += amount; -} \ No newline at end of file +} + +bool Rando::SilverRupeeCounter::AllCollected() { + return GetCollected() == GetTotal(); +} diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index 88bc804feec..64b06148ae7 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -9,20 +9,39 @@ void EnGSwitch_RandomizerInit(void* actorRef); }; #endif +#include "soh/Enhancements/item-tables/ItemTableTypes.h" +#include "randomizer_inf.h" +#include "randomizerTypes.h" + +typedef struct SilverRupeeIdentity { + RandomizerInf randomizerInf; + union { + RandomizerCheck randomizerCheck; + RandomizerGet randomizerGet; + } index; + GetItemEntry itemEntry; +} SilverRupeeIdentity; + +void ShuffleSilverRupees_RegisterHooks(); +void ShuffleSilverRupees_UnregisterHooks(); + +#ifdef __cplusplus namespace Rando { - class SilverRupeeCounter { - public: - SilverRupeeCounter(); - SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); +class SilverRupeeCounter { +public: + SilverRupeeCounter(); + SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); - uint8_t GetCollected() const; - uint8_t GetTotal() const; - void IncrementCollected(uint8_t amount = 1) - private: - uint8_t mCollected = 0; - uint8_t mTotal; - RandomizerGet mRandoGet; - } -} + uint8_t GetCollected() const; + uint8_t GetTotal() const; + void IncrementCollected(uint8_t amount = 1); + bool AllCollected(); +private: + uint8_t mCollected = 0; + uint8_t mTotal; + RandomizerGet mRandoGet; +}; +} // namespace Rando +#endif #endif //SHUFLESILVERRUPEES_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 9ae705295ff..c2a4b24e479 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -29,6 +29,37 @@ Context::Context() { mLogic = std::make_shared(); mTrials = std::make_shared(); mFishsanity = std::make_shared(); + mSilverRupeeCounters = { + // Vanilla + SilverRupeeCounter(5, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE), + SilverRupeeCounter(5, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FOREST_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_LIGHT_TRIAL_SILVER_RUPEE), + // MQ + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(6, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE), + SilverRupeeCounter(3, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE), + SilverRupeeCounter(5, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_WATER_TRIAL_MQ_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE), + }; VanillaLogicDefaults = { // RANDOTODO check what this does &mOptions[RSK_LINKS_POCKET], @@ -518,6 +549,11 @@ void Context::SetHash(std::string hash) { mHash = std::move(hash); } +SilverRupeeCounter& Context::GetSilverRupeeCounter(RandomizerGet rg) { + assert(rg >= RG_SILVER_RUPEE_FIRST && rg <= RG_SILVER_RUPEE_LAST); + return mSilverRupeeCounters[rg - RG_SILVER_RUPEE_FIRST]; +} + const std::string& Context::GetSeedString() const { return mSeedString; } diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index b90f251c760..bf3d6f9f543 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -8,6 +8,7 @@ #include "hint.h" #include "fishsanity.h" #include "trial.h" +#include "ShuffleSilverRupees.h" #include #include @@ -161,12 +162,22 @@ class Context { */ void SetHash(std::string hash); + /** + * @brief Gets a reference to the silver rupee counter corresponding to the + * Given RandomizerGet value. + * + * @param rg + * @return SilverRupeeCounter& + */ + SilverRupeeCounter& GetSilverRupeeCounter(RandomizerGet rg); + private: static std::weak_ptr mContext; std::array hintTable = {}; std::array itemLocationTable = {}; std::array mOptions; std::array mTrickOptions; + std::array mSilverRupeeCounters; RandoOptionLACSCondition mLACSCondition = RO_LACS_VANILLA; std::shared_ptr mEntranceShuffler; std::shared_ptr mDungeons; diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index da22818944b..008b118b5d4 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -2443,6 +2443,7 @@ void RandomizerRegisterHooks() { shuffleFreestandingOnVanillaBehaviorHook = 0; ShuffleFairies_UnregisterHooks(); + ShuffleSilverRupees_UnregisterHooks(); if (!IS_RANDO) return; @@ -2494,5 +2495,7 @@ void RandomizerRegisterHooks() { if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { ShuffleFairies_RegisterHooks(); } + + ShuffleSilverRupees_RegisterHooks(); }); } diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 19fc152f345..ebcad5bef4f 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5876,12 +5876,6 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; -typedef struct SilverRupeeIdentity { - RandomizerInf randomizerInf; - RandomizerCheck randomizerCheck; - GetItemEntry itemEntry; -} SilverRupeeIdentity; - typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 852fe38415e..8d1bebb1975 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -52,6 +52,7 @@ class StaticData { static void RegisterFairyLocations(); static void RegisterPotLocations(); static void RegisterFreestandingLocations(); + static void RegisterSilverRupeeLocations(); static void InitHashMaps(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c index 15a5ba19e6c..aae556b5ce4 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c @@ -13,6 +13,7 @@ #include "objects/object_tsubo/object_tsubo.h" #include "objects/object_gi_rupy/object_gi_rupy.h" #include "soh/frame_interpolation.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED) @@ -117,7 +118,9 @@ void EnGSwitch_Init(Actor* thisx, PlayState* play) { this->numEffects = 20; Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.draw = EnGSwitch_DrawRupee; + if (GameInteractor_Should(VB_SILVER_RUPEE_SETUP_DRAW, true, this)) { + this->actor.draw = EnGSwitch_DrawRupee; + } this->actor.shape.yOffset = 700.0f; if (Flags_GetSwitch(play, this->switchFlag)) { osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ You are Shock! ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); @@ -209,30 +212,32 @@ void EnGSwitch_WaitForObject(EnGSwitch* this, PlayState* play) { } void EnGSwitch_SilverRupeeTracker(EnGSwitch* this, PlayState* play) { - static s8 majorScale[] = { 0, 2, 4, 5, 7, 9, 11, 13, 15, 17 }; - - if (this->noteIndex < sCollectedCount) { - if (sCollectedCount < (CVarGetInteger(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 0) ? 10 : 5)) { - // "sound?" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 音? ☆☆☆☆☆ %d\n" VT_RST, this->noteIndex); - Audio_PlaySoundTransposed(&gSfxDefaultPos, NA_SE_EV_FIVE_COUNT_LUPY, majorScale[this->noteIndex]); - this->noteIndex = sCollectedCount; + if (GameInteractor_Should(VB_SILVER_RUPEE_COUNT_CHECK, true, this)) { + static s8 majorScale[] = { 0, 2, 4, 5, 7, 9, 11, 13, 15, 17 }; + + if (this->noteIndex < sCollectedCount) { + if (sCollectedCount < (CVarGetInteger(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 0) ? 10 : 5)) { + // "sound?" + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 音? ☆☆☆☆☆ %d\n" VT_RST, this->noteIndex); + Audio_PlaySoundTransposed(&gSfxDefaultPos, NA_SE_EV_FIVE_COUNT_LUPY, majorScale[this->noteIndex]); + this->noteIndex = sCollectedCount; + } } - } - if (sCollectedCount >= this->silverCount) { - // "It is now the end of the century." - // This another reference to Hokuto no Ken. - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 時はまさに世紀末〜 ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); - // "Last!" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ らすとぉ! ☆☆☆☆☆ \n" VT_RST); - if ((play->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (this->actor.room == 2)) { - Flags_SetTempClear(play, this->actor.room); - } else { - Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); - Flags_SetSwitch(play, this->switchFlag); + if (sCollectedCount >= this->silverCount) { + // "It is now the end of the century." + // This another reference to Hokuto no Ken. + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 時はまさに世紀末〜 ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); + // "Last!" + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ らすとぉ! ☆☆☆☆☆ \n" VT_RST); + if ((play->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (this->actor.room == 2)) { + Flags_SetTempClear(play, this->actor.room); + } else { + Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); + Flags_SetSwitch(play, this->switchFlag); + } + Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); + Actor_Kill(&this->actor); } - Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); - Actor_Kill(&this->actor); } } @@ -241,17 +246,19 @@ void EnGSwitch_SilverRupeeIdle(EnGSwitch* this, PlayState* play) { this->actor.shape.rot.y += 0x800; if (this->actor.xyzDistToPlayerSq < 900.0f) { - Rupees_ChangeBy(5); - sCollectedCount++; - Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); - this->actor.world.pos = player->actor.world.pos; - this->actor.world.pos.y += 40.0f; - if (LINK_IS_ADULT) { - this->actor.world.pos.y += 20.0f; + if (GameInteractor_Should(VB_SILVER_RUPEE_COLLECT, true, this)) { + Rupees_ChangeBy(5); + sCollectedCount++; + Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); + this->actor.world.pos = player->actor.world.pos; + this->actor.world.pos.y += 40.0f; + if (LINK_IS_ADULT) { + this->actor.world.pos.y += 20.0f; + } + this->actor.gravity = 0.0f; + this->killTimer = 15; + this->actionFunc = EnGSwitch_SilverRupeeCollected; } - this->actor.gravity = 0.0f; - this->killTimer = 15; - this->actionFunc = EnGSwitch_SilverRupeeCollected; } } diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h index 68e8749a3e0..abef8591250 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h @@ -3,6 +3,7 @@ #include #include "global.h" +#include struct EnGSwitch; From c8b4e2e6dcd558a86689087e06a8443a03a1fb9e Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 12 Feb 2025 21:08:00 -0500 Subject: [PATCH 07/41] Adds placeholder locations to area table. New regions and more specific logic will be coming soon. --- .../dungeons/bottom_of_the_well.cpp | 5 ++ .../dungeons/dodongos_cavern.cpp | 6 +++ .../dungeons/ganons_castle.cpp | 53 ++++++++++++++++++- .../dungeons/gerudo_training_ground.cpp | 45 +++++++++++++++- .../location_access/dungeons/ice_cavern.cpp | 11 ++++ .../dungeons/shadow_temple.cpp | 52 ++++++++++++++++++ .../dungeons/spirit_temple.cpp | 26 +++++++++ 7 files changed, 194 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp index 171542ea352..f6c6878a449 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp @@ -144,6 +144,11 @@ void RegionTable_Init_BottomOfTheWell() { LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}), 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 e961a5c0856..baf8d9c48ac 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,12 @@ 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()), + // RANDOTODO some of these are lower but some of these are actually in upper. + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, true), }, { //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 diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp index 2a730170112..5491abe6548 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp @@ -64,6 +64,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanDamage()), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))), + // RANDOTODO consider adding a new region here, since there will now be + // seven checks locked behind Fire Arrows or Din's Fire. + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Region("Ganon's Castle Fire Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -74,6 +81,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)), + // RANDOTODO consider a new region here, since collecting silver rupees out in + // the overworld will be required to reach the pots above. + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Region("Ganon's Castle Water Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -118,6 +132,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), + // RANDOTODO new region here, some chests and pots will be locked behind collecting + // silver rupees from elsewhere now. Also one of these will require hookshot/a trick. + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -136,6 +157,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, logic->CanBreakPots() && logic->SmallKeys(RR_GANONS_CASTLE, 2)), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO new region to handle silver rupee collection logic for the pots past + // this puzzle. Also one of these will require hookshot. + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_5, true), }, {}); #pragma endregion @@ -226,7 +254,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}), }); - areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO logic + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), //2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not @@ -256,7 +291,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();});}), }); - areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO logic, most likely will need bottle/arrows to collect all, maybe hammer? + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}), //This assumes there's no way for child to have blue fire and not adult. @@ -320,6 +362,13 @@ void RegionTable_Init_GanonsCastle() { areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE] = Region("Ganon's Castle MQ Shadow Trial Far Side", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()), + // RANDOTODO logic for individual silver rupees, which probably also need to be moved + // to some of the other regions here rather than being all in one place. + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS);}), 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 f0b9de5c3e5..62b81873e00 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 @@ -24,9 +24,18 @@ void RegionTable_Init_GerudoTrainingGround() { LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), + // RANDOTODO move these to their own region, as one for the boulder maze + // currently does not exist. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), + // RANDOTODO with silver rupees we can't necessarily get all the way to the heavy + // block room with this logic anymore, will likely need a middle region. Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}), Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}), Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}), @@ -58,6 +67,18 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + // RANDOTODO invidual silver rupee logic, and also moving the check above to another + // region to handle silver rupee puzzle access logic. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}), @@ -165,7 +186,15 @@ void RegionTable_Init_GerudoTrainingGround() { Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), }); - areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO I think this is the silver rupee boulder room? Some of the entrance logic + // below might need to be changed to account for silver rupees. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}), Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WIHTOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}), @@ -250,7 +279,15 @@ void RegionTable_Init_GerudoTrainingGround() { //this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area //This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT //the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees - areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO double check on these silver rupees, some may need to go to other regions + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, true), + }, { //Exits //This is merely to extend this region's logic if you have hovers Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_HOVER_BOOTS);}), @@ -283,6 +320,10 @@ void RegionTable_Init_GerudoTrainingGround() { //Locations //it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()), + // RANDOTODO double check this logic, might at least require Iron Boots. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp index ff9b171c821..cb5a92250d1 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp @@ -52,6 +52,17 @@ void RegionTable_Init_IceCavern() { LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), + // RANDOTODO might need a new region here for everything past the bars. + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, true), }, {}); #pragma endregion 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..301b9f1b859 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -43,6 +43,12 @@ void RegionTable_Init_ShadowTemple() { //Locations LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)), + // RANDOTODO above logic needs to change/move to the silver rupee items below. + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false), LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { @@ -55,10 +61,22 @@ void RegionTable_Init_ShadowTemple() { //Locations LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanJumpslashExceptHammer()), + // RANDOTODO possibly new region here for silver rupee collection logic + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, true), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO possible new regions to handle getting past silver rupee puzzle. + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_FREESTANDING_KEY, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->CanUse(RG_BOMBCHU_5)))), LOCATION(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->CanUse(RG_HOVER_BOOTS))), @@ -162,6 +180,12 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));});}), @@ -206,6 +230,17 @@ void RegionTable_Init_ShadowTemple() { ((ctx->GetTrickOption(RT_LENS_SHADOW_MQ) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) || logic->IsChild || logic->CanUse(RG_NAYRUS_LOVE))) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}), @@ -214,6 +249,12 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Region("Shadow Temple MQ Lower Huge Pit", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, logic->CanUse(RG_LONGSHOT)), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->CanJumpslash() || logic->HasExplosives();});}), @@ -261,6 +302,17 @@ void RegionTable_Init_ShadowTemple() { }, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}), 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 3d8e26cd6b7..745f5d4e710 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -34,6 +34,13 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, (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_CHILD_EARLY_TORCHES_CHEST, (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)))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, (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))))), + // RANDOTODO silver rupee logic. Shouldn't need much here. Maybe could make each room a + // a region to simplify some of this other logic. + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_5, true), LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, (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_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))))), @@ -65,6 +72,13 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))), LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())), + //RANDOTODO silver rupee logic. This one might actually be fine as is, other than maybe + // the chest after boulder room? + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -80,6 +94,12 @@ void RegionTable_Init_SpiritTemple() { (logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST)) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS) ))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))), + // RANDOTODO silver rupee logic, may need some new regions here, not sure. + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, true), LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY)), LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))), LOCATION(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_HOOKSHOT)) || @@ -159,6 +179,12 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()), + // RANDOTODO silver rupee logic, a couple of these might need to be in 1f west region. + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), From 478cd75b4bb50a514d9a44fd3578034bc56ff3b6 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:48:57 -0500 Subject: [PATCH 08/41] Makes silver rupee items work --- .../Enhancements/item-tables/ItemTableTypes.h | 1 + .../randomizer/3drando/item_pool.cpp | 50 ++++++++++++++++ .../randomizer/ShuffleSilverRupees.cpp | 3 + .../randomizer/ShuffleSilverRupees.h | 2 + soh/soh/Enhancements/randomizer/draw.cpp | 21 +++++++ soh/soh/Enhancements/randomizer/draw.h | 1 + soh/soh/Enhancements/randomizer/item.h | 3 +- soh/soh/Enhancements/randomizer/item_list.cpp | 59 +++++++++++++++++++ .../Enhancements/randomizer/randomizer.cpp | 20 +++++++ .../Enhancements/randomizer/randomizerTypes.h | 2 +- soh/soh/OTRGlobals.cpp | 2 + 11 files changed, 162 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index d9d7427177b..b50de624c3b 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -27,6 +27,7 @@ typedef enum GetItemCategory { /* 0x03 */ ITEM_CATEGORY_SMALL_KEY, /* 0x04 */ ITEM_CATEGORY_SKULLTULA_TOKEN, /* 0x05 */ ITEM_CATEGORY_MAJOR, + /* 0x06 */ ITEM_CATEGORY_SILVER_RUPEE, } GetItemCategory; #define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \ diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index ac79e860aac..e811b422110 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -997,6 +997,56 @@ void GenerateItemPool() { } } + // RANDOTODO lock these additions behind settings + AddItemToMainPool(RG_BOTTOMLESS_SILVER_RUPEE_POUCH); + std::vector silversToAdd; + if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { + silversToAdd.push_back(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE); + silversToAdd.push_back(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { + silversToAdd.push_back(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SPIRIT_GATE_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BEAMOS_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BOULDER_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SHADOW_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + silversToAdd.push_back(RG_FOREST_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_FIRE_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_LIGHT_TRIAL_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_FIRE_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_WATER_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE); + } + for (auto rgid : silversToAdd) { + AddItemToMainPool(rgid, ctx->GetSilverRupeeCounter(rgid).GetTotal()); + } + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 135719c5600..508044989c4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -55,6 +55,9 @@ void EnGSwitch_RandomizerInit(void* actorRef) { EnGSwitch* srActor = static_cast(actorRef); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { srActor->srIdentity = IdentifySilverRupee(actor->world.pos); + if (Flags_GetRandomizerInf(srActor->srIdentity.randomizerInf)) { + Actor_Kill(actor); + } } else { srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; } diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index 64b06148ae7..180807b1ff0 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -26,6 +26,8 @@ void ShuffleSilverRupees_RegisterHooks(); void ShuffleSilverRupees_UnregisterHooks(); #ifdef __cplusplus +#include +CustomMessage GetSilverRupeeItemMessage(uint16_t rgid); namespace Rando { class SilverRupeeCounter { public: diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index 0a89e4daeb0..6aa349438d9 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -32,6 +32,7 @@ #include "soh_assets.h" #include "dungeon.h" #include "soh/Enhancements/cosmetics/cosmeticsTypes.h" +#include extern "C" { extern PlayState* gPlayState; @@ -1244,3 +1245,23 @@ extern "C" void Randomizer_DrawOverworldKey(PlayState* play, GetItemEntry* getIt CLOSE_DISPS(play->state.gfxCtx); } + +extern "C" void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry) { + OPEN_DISPS(play->state.gfxCtx); + Color_RGB8 silverRupeeColor = + CVarGetColor24(CVAR_COSMETIC("Consumable.SilverRupee.Value"), Color_RGB8({ 255, 255, 255 })); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, silverRupeeColor.r, silverRupeeColor.g, silverRupeeColor.b, 255); + gDPSetEnvColor(POLY_OPA_DISP++, silverRupeeColor.r / 5, silverRupeeColor.g / 5, silverRupeeColor.b / 5, 255); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiRupeeInnerDL); + Gfx_SetupDL_25Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, silverRupeeColor.r * 0.75f, silverRupeeColor.g * 0.75f, silverRupeeColor.b * 0.75f, + 255); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiRupeeOuterDL); + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/soh/soh/Enhancements/randomizer/draw.h b/soh/soh/Enhancements/randomizer/draw.h index 3fc5c86b4f6..5646ba80c2d 100644 --- a/soh/soh/Enhancements/randomizer/draw.h +++ b/soh/soh/Enhancements/randomizer/draw.h @@ -26,6 +26,7 @@ void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry getItemEntry); void Randomizer_DrawBombchuBagInLogic(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawOverworldKey(PlayState* play, GetItemEntry* getItemEntry); +void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry); #define GET_ITEM_MYSTERY \ { ITEM_NONE_FE, 0, 0, 0, 0, MOD_RANDOMIZER, MOD_RANDOMIZER, ITEM_NONE_FE, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, ITEM_NONE_FE, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem } diff --git a/soh/soh/Enhancements/randomizer/item.h b/soh/soh/Enhancements/randomizer/item.h index f0df0f1bf0f..79a3c9a1489 100644 --- a/soh/soh/Enhancements/randomizer/item.h +++ b/soh/soh/Enhancements/randomizer/item.h @@ -23,7 +23,8 @@ enum ItemType { ITEMTYPE_REFILL, ITEMTYPE_SONG, ITEMTYPE_SHOP, - ITEMTYPE_DUNGEONREWARD + ITEMTYPE_DUNGEONREWARD, + ITEMTYPE_SILVERRUPEE }; namespace Rando { diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 0b94aab39d0..ea666724a17 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -359,6 +359,65 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_DEKU_NUT_BAG] = Item(RG_DEKU_NUT_BAG, Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NONE, RG_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE] = Item(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, Text{ "Ice Cavern Spinning Blades Silver Rupee", "Ice Cavern Spinning Blades Silver Rupee", "Ice Cavern Spinning Blades Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_ICE_CAVERN_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_ICE_CAVERN_SLIDING_SILVER_RUPEE] = Item(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, Text{ "Ice Cavern Block Sliding Silver Rupee", "Ice Cavern Block Sliding Silver Rupee", "Ice Cavern Block Sliding Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_ICE_CAVERN_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SLIDING_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE] = Item(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, Text{ "BotW Silver Rupee", "BotW Silver Rupee", "BotW Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, Text{ "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, Text{ "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, Text{ "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_GATE_SILVER_RUPEE] = Item(RG_SPIRIT_GATE_SILVER_RUPEE, Text{ "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_GATE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_BEAMOS_SILVER_RUPEE] = Item(RG_SPIRIT_BEAMOS_SILVER_RUPEE, Text{ "Spirit Temple Sun Block Room Silver Rupee", "Spirit Temple Sun Block Room Silver Rupee", "Spirit Temple Sun Block Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_BEAMOS_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_BOULDER_SILVER_RUPEE] = Item(RG_SPIRIT_BOULDER_SILVER_RUPEE, Text{ "Spirit Temple Boulder Room Silver Rupee", "Spirit Temple Boulder Room Silver Rupee", "Spirit Temple Boulder Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple Scythe Room Silver Rupee", "Shadow Temple Scythe Room Silver Rupee", "Shadow Temple Scythe Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = Item(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, Text{ "Shadow Temple Near Falling Spikes Silver Rupee", "Shadow Temple Near Falling Spikes Silver Rupee", "Shadow Temple Near Falling Spikes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE] = Item(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, Text{ "Shadow Temple Invisible Spikes Room Silver Rupee", "Shadow Temple Invisible Spikes Room Silver Rupee", "Shadow Temple Invisible Spikes Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FOREST_TRIAL_SILVER_RUPEE] = Item(RG_FOREST_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Forest Trial Silver Rupee", "Ganon's Castle Forest Trial Silver Rupee", "Ganon's Castle Forest Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FOREST_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FIRE_TRIAL_SILVER_RUPEE] = Item(RG_FIRE_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Fire Trial Silver Rupee", "Ganon's Castle Fire Trial Silver Rupee", "Ganon's Castle Fire Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FIRE_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_TRIAL_SILVER_RUPEE] = Item(RG_SPIRIT_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Spirit Trial Silver Rupee", "Ganon's Castle Spirit Trial Silver Rupee", "Ganon's Castle Spirit Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_LIGHT_TRIAL_SILVER_RUPEE] = Item(RG_LIGHT_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Light Trial Silver Rupee", "Ganon's Castle Light Trial Silver Rupee", "Ganon's Castle Light Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_LIGHT_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE] = Item(RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, Text{ "Dodongo's Cavern Silver Rupee", "Dodongo's Cavern Silver Rupee", "Dodongo's Cavern Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple MQ Spinning Scythes Silver Rupee", "Shadow Temple MQ Spinning Scythes Silver Rupee", "Shadow Temple MQ Spinning Scythes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple MQ Invisible Scythes Silver Rupee", "Shadow Temple MQ Invisible Scythes Silver Rupee", "Shadow Temple MQ Invisible Scythes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = Item(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, Text{ "Shadow Temple MQ Near Falling Spikes Silver Rupee", "Shadow Temple MQ Near Falling Spikes Silver Rupee", "Shadow Temple MQ Near Falling Spikes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE] = Item(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, Text{ "Shadow Temple MQ Invisible Spike Room Silver Rupee", "Shadow Temple MQ Invisible Spike Room Silver Rupee", "Shadow Temple MQ Invisible Spike Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE] = Item(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, Text{ "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, Text{ "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, Text{ "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, Text{ "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE] = Item(RG_FIRE_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_WATER_TRIAL_MQ_SILVER_RUPEE] = Item(RG_WATER_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Water Trial MQ Silver Rupee", "Ganon's Castle Water Trial MQ Silver Rupee", "Ganon's Castle Water Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_WATER_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_TRIAL_MQ_SILVER_RUPEE] = Item(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Shadow Trial MQ Silver Rupee", "Ganon's Castle Shadow Trial MQ Silver Rupee", "Ganon's Castle Shadow Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_BOTTOMLESS_SILVER_RUPEE_POUCH] = Item(RG_BOTTOMLESS_SILVER_RUPEE_POUCH, Text{ "Bottomless Silver Rupee Pouch", "Bottomless Silver Rupee Pouch", "Bottomless Silver Rupee Pouch" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_BOTTOMLESS_SILVER_RUPEE_POUCH, RG_BOTTOMLESS_SILVER_RUPEE_POUCH, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_BOTTOMLESS_SILVER_RUPEE_POUCH].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_TRIFORCE] = Item(RG_TRIFORCE, Text{ "Triforce", "Triforce", "Triforce" }, ITEMTYPE_EVENT, RG_TRIFORCE, false, LOGIC_NONE, RHT_NONE); itemTable[RG_HINT] = Item(RG_HINT, Text{ "Hint", "Indice", "Hinweis" }, ITEMTYPE_EVENT, RG_HINT, false, LOGIC_NONE, RHT_NONE); // Individual stages of progressive items (only here for GetItemEntry purposes, not for use in seed gen) diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index d1ca49162ef..c7e765705de 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2706,6 +2706,17 @@ void CreateGetItemMessages(const std::array* messageEntries) CustomMessage(messageEntry.english, messageEntry.german, messageEntry.french, TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM)); } + // Special Case for Silver Rupees + customMessageManager->CreateMessage( + Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST, + CustomMessage("You got a %c[[rupee_name]]%w! [[count_text]]", TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) + ); + + customMessageManager->CreateMessage( + Randomizer::getItemMessageTableID, RG_BOTTOMLESS_SILVER_RUPEE_POUCH, + CustomMessage("You found the %cBottomless Silver Rupee Pouch! All Silver Rupee Puzzles are Unlocked", + TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) + ); } void CreateRupeeMessages() { @@ -4050,6 +4061,15 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { } else if (item >= RG_GUARD_HOUSE_KEY && item <= RG_FISHING_HOLE_KEY) { Flags_SetRandomizerInf((RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1)); return Return_Item_Entry(giEntry, RG_NONE); + } else if (item >= RG_SILVER_RUPEE_FIRST && item <= RG_SILVER_RUPEE_LAST) { + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(item)).IncrementCollected(); + return Return_Item_Entry(giEntry, RG_NONE); + } else if (item == RG_BOTTOMLESS_SILVER_RUPEE_POUCH) { + for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { + int max = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).GetTotal(); + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).IncrementCollected(max); + } + return Return_Item_Entry(giEntry, RG_NONE); } switch (item) { diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index ebcad5bef4f..6dbd45c01a0 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -4741,7 +4741,7 @@ typedef enum { RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RHT_GANONS_CASTLE_SILVER_RUPEE, - RHT_MAGICAL_SILVER_RUPEE, + RHT_BOTTOMLESS_SILVER_RUPEE_POUCH, RHT_EPONA, RHT_OVERWORLD_KEY, RHT_HINT_MYSTERIOUS, diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 6b5afb0c3c0..79e9db76961 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2075,6 +2075,8 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { messageEntry = Randomizer::GetIceTrapMessage(); } else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) { messageEntry = Randomizer::GetTriforcePieceMessage(); + } else if (player->getItemEntry.getItemId >= RG_SILVER_RUPEE_FIRST && player->getItemEntry.getItemId <= RG_SILVER_RUPEE_LAST) { + messageEntry = GetSilverRupeeItemMessage(player->getItemEntry.getItemId); } else { messageEntry = Randomizer_GetCustomGetItemMessage(player); } From 228482d09e988c7b0736049c43300f93a5540703 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:51:25 -0500 Subject: [PATCH 09/41] Persist silver rupee items collected to save file --- soh/soh/SaveManager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index f91696191dd..7841d1eabfe 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -469,6 +469,12 @@ void SaveManager::LoadRandomizerVersion3() { SaveManager::Instance->LoadData("", trialId); randoContext->GetTrial(trialId)->SetAsRequired(); }); + + SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { + size_t value; + SaveManager::Instance->LoadData("", value); + randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).IncrementCollected(value); + }); } void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool fullSave) { @@ -603,6 +609,10 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f SaveManager::Instance->SaveData("", i); } }); + + SaveManager::Instance->SaveArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { + SaveManager::Instance->SaveData("", randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).GetCollected()); + }); } // Init() here is an extension of InitSram, and thus not truly an initializer for SaveManager itself. don't put any class initialization stuff here From efffcccb10a72e27542caab6de1c1bdd0646aa34 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:51:46 -0500 Subject: [PATCH 10/41] Makes silver rupee trackers count and unlock puzzles. --- .../randomizer/ShuffleSilverRupees.cpp | 55 ++++++++++++++++++- soh/soh/Enhancements/randomizer/static_data.h | 23 ++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 508044989c4..667e686b65c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -6,9 +6,29 @@ extern "C" { #include "variables.h" #include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" +#include extern PlayState* gPlayState; } +CustomMessage GetSilverRupeeItemMessage(uint16_t rgid) { + CustomMessage messageEntry; + if (rgid >= RG_SILVER_RUPEE_FIRST && rgid <= RG_SILVER_RUPEE_LAST) { + messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST); + auto ctx = OTRGlobals::Instance->gRandoContext; + bool complete = ctx->GetSilverRupeeCounter(static_cast(rgid)).AllCollected(); + if (complete) { + messageEntry.Replace("[[count_text]]", "That's all of them"); + } else { + int srCount = ctx->GetSilverRupeeCounter(static_cast(rgid)).GetCollected() + 1; + messageEntry.Replace("[[count_text]]", CustomMessage("You have collected %g[[count]]%w of them so far")); + messageEntry.Replace("[[count]]", std::to_string(srCount)); + } + messageEntry.Replace("[[rupee_name]]", CustomMessage(Rando::StaticData::RetrieveItem(static_cast(rgid)).GetName())); + messageEntry.AutoFormat(); + } + return messageEntry; +} + extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { EnGSwitch* srActor = reinterpret_cast(thisx); Matrix_Push(); @@ -48,6 +68,38 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { return srIdentity; } +std::unordered_map Rando::StaticData::silverTrackerMap = { + { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 328 }, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE }, + { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 329 }, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE }, + { { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, 351 }, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 348 }, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 332 }, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 347 }, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 325 }, RG_SPIRIT_GATE_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 330 }, RG_SPIRIT_BEAMOS_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 322 }, RG_SPIRIT_BOULDER_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 321 }, RG_SHADOW_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 329 }, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 328 }, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 334 }, RG_FOREST_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 329 }, RG_FIRE_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 331 }, RG_SPIRIT_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 338 }, RG_LIGHT_TRIAL_SILVER_RUPEE }, + // MQ + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 348 }, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 396 }, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 219 }, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE }, + { { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, 357 }, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 321 }, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 643 }, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 337 }, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 648 }, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, 375 }, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 322 }, RG_WATER_TRIAL_MQ_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 331 }, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 321 }, RG_FIRE_TRIAL_MQ_SILVER_RUPEE }, +}; + void EnGSwitch_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); if (actor->id != ACTOR_EN_G_SWITCH) return; @@ -59,7 +111,8 @@ void EnGSwitch_RandomizerInit(void* actorRef) { Actor_Kill(actor); } } else { - srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; + Rando::Identifier identifier = {static_cast(gPlayState->sceneNum), ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ : RCQUEST_VANILLA, actor->params}; + srActor->srIdentity.index.randomizerGet = Rando::StaticData::silverTrackerMap.at(identifier); } } diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 8d1bebb1975..78203b96b77 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -8,6 +8,12 @@ #include "location.h" namespace Rando { + + struct Identifier { + SceneID scene; + RandomizerCheckQuest quest; + int16_t params; +}; /** * @brief Singleton for storing and accessing static Randomizer-related data * @@ -74,8 +80,25 @@ class StaticData { static std::unordered_map stoneParamsToHint; static std::unordered_map grottoChestParamsToHint; static std::array hintTextTable; + static std::unordered_map silverTrackerMap; StaticData(); ~StaticData(); }; +} + +namespace std { + template<> + struct hash { + inline size_t operator()(const Rando::Identifier& id) const { + return hash{}(id.scene) ^ hash{}(id.quest) ^ hash{}(id.params); + } + }; + + template<> + struct equal_to { + inline bool operator()(const Rando::Identifier& a, const Rando::Identifier& b) const { + return a.scene == b.scene && a.params == b.params && a.quest == b.quest; + } + }; } \ No newline at end of file From 485b3c25dd9eebe4986f45eadb3160156196fb22 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:51:41 -0500 Subject: [PATCH 11/41] Add necessary enums and structs for silver rupee shuffle --- .../Enhancements/randomizer/randomizerTypes.h | 230 +++++++++++++++++- .../Enhancements/randomizer/randomizer_inf.h | 159 +++++++++++- 2 files changed, 380 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 155b31db127..958bc7179c0 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -294,6 +294,7 @@ typedef enum { RCTYPE_FISH, // Fishes RCTYPE_FREESTANDING, // Freestanding rupees and hearts RCTYPE_FAIRY, // Fairies + RCTYPE_SILVER_RUPEE, // Silver Rupees } RandomizerCheckType; typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest; @@ -2848,6 +2849,157 @@ typedef enum { RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, + // Vanilla Silver Rupee Locations + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, + RC_SHADOW_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RC_SPIRIT_GATE_SILVER_RUPEE_1, + RC_SPIRIT_GATE_SILVER_RUPEE_2, + RC_SPIRIT_GATE_SILVER_RUPEE_3, + RC_SPIRIT_GATE_SILVER_RUPEE_4, + RC_SPIRIT_GATE_SILVER_RUPEE_5, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, + RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, + RC_SPIRIT_BOULDER_SILVER_RUPEE_1, + RC_SPIRIT_BOULDER_SILVER_RUPEE_2, + RC_SPIRIT_BOULDER_SILVER_RUPEE_3, + RC_SPIRIT_BOULDER_SILVER_RUPEE_4, + RC_SPIRIT_BOULDER_SILVER_RUPEE_5, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, + RC_FOREST_TRIAL_SILVER_RUPEE_1, + RC_FOREST_TRIAL_SILVER_RUPEE_2, + RC_FOREST_TRIAL_SILVER_RUPEE_3, + RC_FOREST_TRIAL_SILVER_RUPEE_4, + RC_FOREST_TRIAL_SILVER_RUPEE_5, + RC_FIRE_TRIAL_SILVER_RUPEE_1, + RC_FIRE_TRIAL_SILVER_RUPEE_2, + RC_FIRE_TRIAL_SILVER_RUPEE_3, + RC_FIRE_TRIAL_SILVER_RUPEE_4, + RC_FIRE_TRIAL_SILVER_RUPEE_5, + RC_LIGHT_TRIAL_SILVER_RUPEE_1, + RC_LIGHT_TRIAL_SILVER_RUPEE_2, + RC_LIGHT_TRIAL_SILVER_RUPEE_3, + RC_LIGHT_TRIAL_SILVER_RUPEE_4, + RC_LIGHT_TRIAL_SILVER_RUPEE_5, + RC_SPIRIT_TRIAL_SILVER_RUPEE_1, + RC_SPIRIT_TRIAL_SILVER_RUPEE_2, + RC_SPIRIT_TRIAL_SILVER_RUPEE_3, + RC_SPIRIT_TRIAL_SILVER_RUPEE_4, + RC_SPIRIT_TRIAL_SILVER_RUPEE_5, + // MQ Silver Rupee Locations + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, + RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, + RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, + RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, + RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, + RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, + RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, + RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RC_MAX } RandomizerCheck; @@ -3330,6 +3482,37 @@ typedef enum { RG_FISHING_POLE, RG_DEKU_STICK_BAG, RG_DEKU_NUT_BAG, + RG_SILVER_RUPEE_FIRST, + RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE = RG_SILVER_RUPEE_FIRST, // for convenience + RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_BEAMOS_SILVER_RUPEE, + RG_SPIRIT_BOULDER_SILVER_RUPEE, + RG_SHADOW_SCYTHE_SILVER_RUPEE, + RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + RG_FOREST_TRIAL_SILVER_RUPEE, + RG_FIRE_TRIAL_SILVER_RUPEE, + RG_SPIRIT_TRIAL_SILVER_RUPEE, + RG_LIGHT_TRIAL_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, + RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, + RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + RG_WATER_TRIAL_MQ_SILVER_RUPEE, + RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + RG_SILVER_RUPEE_LAST = RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + RG_BOTTOMLESS_SILVER_RUPEE_POUCH, RG_HINT, RG_TYCOON_WALLET, RG_BRONZE_SCALE, @@ -4282,6 +4465,26 @@ typedef enum { RHT_BEEHIVE_SCRUB_TRIO_GROTTO, RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA, RHT_BEEHIVE_BEHIND_KING_ZORA, + // Silver Rupee Locations + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, + RHT_SPIRIT_GATE_SILVER_RUPEE, + RHT_SPIRIT_BEAMOS_SILVER_RUPEE, + RHT_SPIRIT_BOULDER_SILVER_RUPEE, + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + RHT_FOREST_TRIAL_SILVER_RUPEE, + RHT_FIRE_TRIAL_SILVER_RUPEE, + RHT_SPIRIT_TRIAL_SILVER_RUPEE, + RHT_LIGHT_TRIAL_SILVER_RUPEE, + RHT_DODONGOS_CAVERN_SILVER_RUPEE, + RHT_WATER_TRIAL_SILVER_RUPEE, + RHT_SHADOW_TRIAL_SILVER_RUPEE, // Items RHT_KOKIRI_SWORD, RHT_MASTER_SWORD, @@ -4530,6 +4733,15 @@ typedef enum { RHT_BRONZE_SCALE, RHT_FISHING_POLE, RHT_SKELETON_KEY, + // Silver Rupee Items + RHT_DC_SILVER_RUPEE, + RHT_ICE_CAVERN_SILVER_RUPEE, + RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, + RHT_SPIRIT_TEMPLE_SILVER_RUPEE, + RHT_SHADOW_TEMPLE_SILVER_RUPEE, + RHT_GANONS_CASTLE_SILVER_RUPEE, + RHT_MAGICAL_SILVER_RUPEE, RHT_EPONA, RHT_OVERWORLD_KEY, RHT_HINT_MYSTERIOUS, @@ -4933,7 +5145,6 @@ typedef enum { RHT_MAX } RandomizerHintTextKey; - typedef struct { RandomizerGet rgID; RandomizerGet fakeRgID; @@ -5042,16 +5253,16 @@ typedef enum { RSK_STARTING_KOKIRI_SWORD, RSK_STARTING_MASTER_SWORD, RSK_STARTING_ZELDAS_LULLABY, - RSK_STARTING_EPONAS_SONG, - RSK_STARTING_SARIAS_SONG, + RSK_STARTING_EPONAS_SONG, + RSK_STARTING_SARIAS_SONG, RSK_STARTING_SUNS_SONG, RSK_STARTING_SONG_OF_TIME, RSK_STARTING_SONG_OF_STORMS, - RSK_STARTING_MINUET_OF_FOREST, + RSK_STARTING_MINUET_OF_FOREST, RSK_STARTING_BOLERO_OF_FIRE, RSK_STARTING_SERENADE_OF_WATER, - RSK_STARTING_REQUIEM_OF_SPIRIT, - RSK_STARTING_NOCTURNE_OF_SHADOW, + RSK_STARTING_REQUIEM_OF_SPIRIT, + RSK_STARTING_NOCTURNE_OF_SHADOW, RSK_STARTING_PRELUDE_OF_LIGHT, RSK_SHUFFLE_KOKIRI_SWORD, RSK_SHUFFLE_MASTER_SWORD, @@ -5221,6 +5432,8 @@ typedef enum { RSK_SHUFFLE_FREESTANDING, RSK_SHUFFLE_FAIRIES, RSK_LOCK_OVERWORLD_DOORS, + RSK_SHUFFLE_SILVER_RUPEES, + RSK_MAGICAL_SILVER_RUPEE, RSK_MAX } RandomizerSettingKey; @@ -5663,6 +5876,11 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; +typedef struct SilverRupeeIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} SilverRupeeIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 8c4d05a4f65..1ce45f1387c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -144,7 +144,6 @@ typedef enum { RAND_INF_GREG_FOUND, - RAND_INF_TOT_MASTER_SWORD, RAND_INF_CHILD_FISHING, @@ -745,7 +744,6 @@ typedef enum { RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, RAND_INF_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - RAND_INF_CAUGHT_LOACH, RAND_INF_CAN_SWIM, @@ -1349,7 +1347,162 @@ typedef enum { RAND_INF_ADULT_TRADES_HAS_EYEDROPS, RAND_INF_ADULT_TRADES_HAS_CLAIM_CHECK, - // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16) + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, + RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, + RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, + RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4, + RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4, + RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4, + RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4, + RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4, + RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4, + RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4, + RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5, + + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, + RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, + RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, + RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, + RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, + RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, + RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, + + RAND_INF_MAGICAL_SILVER_RUPEE, + + // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be + // ceil(RAND_INF_MAX / 16) RAND_INF_MAX, } RandomizerInf; From 7daa7bd72ed0bc237c3dcbb840110baf74b2a512 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:56:22 -0500 Subject: [PATCH 12/41] Add SilverRupeeIdentity to silver rupee actor --- soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h index 77a19c87351..68e8749a3e0 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h @@ -56,6 +56,7 @@ typedef struct EnGSwitch { /* 0x0178 */ s8 objIndex; /* 0x017C */ ColliderCylinder collider; /* 0x01C8 */ EnGSwitchEffect effects[100]; + /* */ SilverRupeeIdentity srIdentity; } EnGSwitch; // size = 0x12F8 #endif From 249104fe94275d8db9d5c051adf947b28f897c22 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 18:56:49 -0500 Subject: [PATCH 13/41] Initial commit for ShuffleSilverRupees files. --- .../randomizer/ShuffleSilverRupees.cpp | 23 +++++++++++++++++++ .../randomizer/ShuffleSilverRupees.h | 13 +++++++++++ 2 files changed, 36 insertions(+) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp create mode 100644 soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp new file mode 100644 index 00000000000..13eeccc6dec --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -0,0 +1,23 @@ +#include "ShuffleSilverRupees.h" + +extern "C" { +#include "variables.h" +#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" +extern PlayState* gPlayState; +} + +void EnGSwitch_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + int16_t sceneNum = gPlayState->sceneNum; + f32 param1 = actor->world.pos.x; + f32 param2 = actor->world.pos.z; + + //Two particular silver rupees in Master Quest Shadow Temple have + // the same X and Z coordinates. We have to make an exception here + // and look them up by X and Y coordinates instead. + if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110.0f && param2 == 3372.0f) { + param2 = actor->world.pos.y; + } + EnGSwitch* srActor = static_cast(actorRef); + srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); +} \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h new file mode 100644 index 00000000000..a2401a720df --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -0,0 +1,13 @@ +#ifndef SHUFFLESILVERRUPEES_H +#define SHUFFLESILVERRUPEES_H + +#ifdef __cplusplus +extern "C" { +#endif +void EnGSwitch_RandomizerInit(void* actorRef); +#ifdef __cplusplus +}; +#endif + + +#endif //SHUFLESILVERRUPEES_H \ No newline at end of file From d10a89c500aa227db53aa1bb91233d7ae9e60bd1 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Mon, 10 Feb 2025 21:23:19 -0500 Subject: [PATCH 14/41] Add Locations and Silver Counter class --- .../randomizer/ShuffleSilverRupees.cpp | 204 +++++++++++++++++- .../randomizer/ShuffleSilverRupees.h | 15 ++ 2 files changed, 218 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 13eeccc6dec..2180600c9ac 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -1,4 +1,5 @@ #include "ShuffleSilverRupees.h" +#include "static_data.h" extern "C" { #include "variables.h" @@ -19,5 +20,206 @@ void EnGSwitch_RandomizerInit(void* actorRef) { param2 = actor->world.pos.y; } EnGSwitch* srActor = static_cast(actorRef); - srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + //srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); +} + +void Rando::StaticData::RegisterSilverRupeeLocations() { + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", "Ice Cavern Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", "Ice Cavern Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", "Ice Cavern Spinning Blades Silver Rupee 3", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", "Ice Cavern Spinning Blades Silver Rupee 4", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", "Ice Cavern Spinning Blades Silver Rupee 5", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); + + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", "Ice Cavern Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", "Ice Cavern Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", "Ice Cavern Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", "Ice Cavern Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", "Ice Cavern Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); + + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Bottom of the Well Basement Silver Rupee 1", "Bottom of the Well Basement Silver Rupee 1", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Bottom of the Well Basement Silver Rupee 2", "Bottom of the Well Basement Silver Rupee 2", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Bottom of the Well Basement Silver Rupee 3", "Bottom of the Well Basement Silver Rupee 3", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Bottom of the Well Basement Silver Rupee 4", "Bottom of the Well Basement Silver Rupee 4", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Bottom of the Well Basement Silver Rupee 5", "Bottom of the Well Basement Silver Rupee 5", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", "GTG Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", "GTG Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", "GTG Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", "GTG Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", "GTG Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", "GTG Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", "GTG Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", "GTG Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", "GTG Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", "GTG Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", "GTG Whirlpool Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", "GTG Whirlpool Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", "GTG Whirlpool Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", "GTG Whirlpool Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", "GTG Whirlpool Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", "Spirit Temple Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", "Spirit Temple Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", "Spirit Temple Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", "Spirit Temple Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", "Spirit Temple Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", "Spirit Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", "Spirit Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "Beamos Room Silver Rupee 3", "Spirit Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "Beamos Room Silver Rupee 4", "Spirit Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "Beamos Room Silver Rupee 5", "Spirit Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "Boulder Room Silver Rupee 1", "Spirit Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "Boulder Room Silver Rupee 2", "Spirit Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "Boulder Room Silver Rupee 3", "Spirit Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "Boulder Room Silver Rupee 4", "Spirit Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "Boulder Room Silver Rupee 5", "Spirit Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", "Shadow Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", "Shadow Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", "Shadow Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", "Shadow Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", "Shadow Outside Spike Rain Room Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", "Shadow Outside Spike Rain Room Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", "Shadow Outside Spike Rain Room Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", "Shadow Outside Spike Rain Room Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", "Shadow Outside Spike Rain Room Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", "Shadow Invisible Spikes Room Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", "Shadow Invisible Spikes Room Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", "Shadow Invisible Spikes Room Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", "Shadow Invisible Spikes Room Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", "Shadow Invisible Spikes Room Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "Forest Trial Silver Rupee 1", "Inside Ganon's Castle Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "Forest Trial Silver Rupee 2", "Inside Ganon's Castle Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "Forest Trial Silver Rupee 3", "Inside Ganon's Castle Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "Forest Trial Silver Rupee 4", "Inside Ganon's Castle Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "Forest Trial Silver Rupee 5", "Inside Ganon's Castle Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "Fire Trial Silver Rupee 1", "Inside Ganon's Castle Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "Fire Trial Silver Rupee 2", "Inside Ganon's Castle Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "Fire Trial Silver Rupee 3", "Inside Ganon's Castle Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "Fire Trial Silver Rupee 4", "Inside Ganon's Castle Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "Fire Trial Silver Rupee 5", "Inside Ganon's Castle Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "Spirit Trial Silver Rupee 1", "Inside Ganon's Castle Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "Spirit Trial Silver Rupee 2", "Inside Ganon's Castle Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "Spirit Trial Silver Rupee 3", "Inside Ganon's Castle Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "Spirit Trial Silver Rupee 4", "Inside Ganon's Castle Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "Spirit Trial Silver Rupee 5", "Inside Ganon's Castle Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "Light Trial Silver Rupee 1", "Inside Ganon's Castle Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "Light Trial Silver Rupee 2", "Inside Ganon's Castle Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "Light Trial Silver Rupee 3", "Inside Ganon's Castle Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "Light Trial Silver Rupee 4", "Inside Ganon's Castle Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "Light Trial Silver Rupee 5", "Inside Ganon's Castle Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", "Dodongo's Cavern Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", "Dodongo's Cavern Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", "Dodongo's Cavern Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", "Dodongo's Cavern Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", "Dodongo's Cavern Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", "Shadow Temple MQ Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", "Shadow Temple MQ Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", "Shadow Temple MQ Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Temple MQ Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", "Shadow Temple MQ Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", "Shadow Temple MQ Invisible Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", "Shadow Temple MQ Invisible Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", "Shadow Temple MQ Invisible Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", "Shadow Temple MQ Invisible Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", "Shadow Temple MQ Invisible Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", "Shadow Temple MQ Invisible Scythe Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", "Shadow Temple MQ Invisible Scythe Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", "Shadow Temple MQ Invisible Scythe Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", "Shadow Temple MQ Invisible Scythe Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", "Shadow Temple MQ Invisible Scythe Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); + + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", "Shadow Temple MQ Outside Spike Rain Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", "Shadow Temple MQ Outside Spike Rain Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + // The following two locations have the same X and Z coordinates, so use X and Y for the params instead. + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", "Shadow Temple MQ Outside Spike Rain Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", "Shadow Temple MQ Outside Spike Rain Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + // Back to X and Z coordinates for the params. + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", "Shadow Temple MQ Outside Spike Rain Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", "Shadow Temple MQ Invisible Spikes Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", "Shadow Temple MQ Invisible Spikes Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", "Shadow Temple MQ Invisible Spikes Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", "Shadow Temple MQ Invisible Spikes Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", "Shadow Temple MQ Invisible Spikes Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", "Shadow Temple MQ Invisible Spikes Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", "Shadow Temple MQ Invisible Spikes Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", "Shadow Temple MQ Invisible Spikes Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", "Shadow Temple MQ Invisible Spikes Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", "Shadow Temple MQ Invisible Spikes Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); + + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", "Spirit Temple MQ Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", "Spirit Temple MQ Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", "Spirit Temple MQ Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", "Spirit Temple MQ Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", "Spirit Temple MQ Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", "Gerduo Training Grounds MQ Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", "Gerduo Training Grounds MQ Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", "Gerduo Training Grounds MQ Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", "Gerduo Training Grounds MQ Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", "Gerduo Training Grounds MQ Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", "Gerduo Training Grounds MQ Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", "Ganon's Castle Fire Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", "Ganon's Castle Fire Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", "Ganon's Castle Fire Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", "Ganon's Castle Fire Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", "Ganon's Castle Fire Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", "Ganon's Castle Water Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", "Ganon's Castle Water Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", "Ganon's Castle Water Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", "Ganon's Castle Water Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", "Ganon's Castle Water Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", "Ganon's Castle Shadow Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", "Ganon's Castle Shadow Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", "Ganon's Castle Shadow Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", "Ganon's Castle Shadow Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", "Ganon's Castle Shadow Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); +} + +static RegisterShipInitFunc initFunc(Rando::StaticData::RegisterSilverRupeeLocations); + +Rando::SilverRupeeCounter::SilverRupeeCounter() : mCollected(0), mTotal(0), mRandoGet(RG_NONE) { +} + +Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet) : mCollected(0), mTotal(total), mRandoGet(randoGet) { +} + +uint8_t Rando::SilverRupeeCounter::GetCollected() const { + return mCollected; +} + +uint8_t Rando::SilverRupeeCounter::GetTotal() const { + return mTotal; +} + +void Rando::SilverRupeeCounter::IncrementCollected(uint8_t amount) { + mCollected += amount; } \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index a2401a720df..88bc804feec 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -9,5 +9,20 @@ void EnGSwitch_RandomizerInit(void* actorRef); }; #endif +namespace Rando { + class SilverRupeeCounter { + public: + SilverRupeeCounter(); + SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); + + uint8_t GetCollected() const; + uint8_t GetTotal() const; + void IncrementCollected(uint8_t amount = 1) + private: + uint8_t mCollected = 0; + uint8_t mTotal; + RandomizerGet mRandoGet; + } +} #endif //SHUFLESILVERRUPEES_H \ No newline at end of file From bdbc263e8bac13927c2c8f32051be6501f68a062 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 11 Feb 2025 17:26:43 -0500 Subject: [PATCH 15/41] Adds more of the actor update code to Silver Rupees --- .../randomizer/ShuffleSilverRupees.cpp | 61 ++++++++++++++++--- .../Enhancements/randomizer/randomizerTypes.h | 1 + 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 2180600c9ac..49ac53432f9 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -7,20 +7,63 @@ extern "C" { extern PlayState* gPlayState; } -void EnGSwitch_RandomizerInit(void* actorRef) { - Actor* actor = static_cast(actorRef); - int16_t sceneNum = gPlayState->sceneNum; - f32 param1 = actor->world.pos.x; - f32 param2 = actor->world.pos.z; +extern "C" void EnGSwitch_RandomizerSilverRupeeIdle(EnGSwitch* self, PlayState *play) { + Player* player = GET_PLAYER(play); + + self->actor.shape.rot.y += 0x800; + if (self->actor.xyzDistToPlayerSq < 900.0f) { + Flags_SetRandomizerInf(self->srIdentity.randomizerInf); + self->killTimer = 0; + self->actionFunc = EnGSwitch_Kill; + } +} + +extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { + EnGSwitch* srActor = static_cast(thisx); + Matrix_Push(); + Matrix_Scale(17.5f, 17.5f, 17.5f, MTXMODE_APPLY); + if (srActor->type == ENGSWITCH_SILVER_RUPEE) { + if (CVarGetInteger(CVAR_RANDOMIZER_ENHANCEMENT("MysteriousShuffle"), 0)) { + EnItem00_CustomItemsParticles(thisx, play, GET_ITEM_MYSTERY); + GetItemEntry_Draw(play, GET_ITEM_MYSTERY); + } else { + EnItem00_CustomItemsParticles(thisx, play, srActor->srIdentity.itemEntry); + GetItemEntry_Draw(play, srActor->srIdentity.itemEntry); + } + Matrix_Pop(); + } +} - //Two particular silver rupees in Master Quest Shadow Temple have +SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { + SilverRupeeIdentity srIdentity; + uint16_t sceneNum = gPlayState->sceneNum; + int16_t param1 = (int16_t)pos.x; + int16_t param2 = (int16_t)pos.z; + // Two particular silver rupees in Master Quest Shadow Temple have // the same X and Z coordinates. We have to make an exception here // and look them up by X and Y coordinates instead. - if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110.0f && param2 == 3372.0f) { - param2 = actor->world.pos.y; + if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110 && param2 == 3372) { + param2 =(int16_t)pos.y; } + Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_G_SWITCH, sceneNum, TWO_ACTOR_PARAMS(param1, param2)); + if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { + LUSLOG_WARN("SilverRupeeIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); + assert(false); + } else { + srIdentity.randomizerCheck = location->GetRandomizerCheck(); + srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.randomizerCheck, true, GI_NONE); + srIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); + } + return srIdentity; +} + +void EnGSwitch_RandomizerInit(void* actorRef) { + Actor* actor = static_cast(actorRef); + EnGSwitch* srActor = static_cast(actorRef); - //srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + if (srActor->type == ENGSWITCH_SILVER_RUPEE) { + srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + } } void Rando::StaticData::RegisterSilverRupeeLocations() { diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 958bc7179c0..30e622c0894 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5879,6 +5879,7 @@ typedef struct FishIdentity { typedef struct SilverRupeeIdentity { RandomizerInf randomizerInf; RandomizerCheck randomizerCheck; + GetItemEntry itemEntry; } SilverRupeeIdentity; typedef enum { From 63f0c03f531925516ffe1051766718ed49c7760b Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 11 Feb 2025 23:02:59 -0500 Subject: [PATCH 16/41] Wire up silver rupee hook_handlers Currently done unconditionally, will add the options later --- .../vanilla-behavior/GIVanillaBehavior.h | 24 ++++++ .../randomizer/ShuffleSilverRupees.cpp | 78 +++++++++++++++---- .../randomizer/ShuffleSilverRupees.h | 45 +++++++---- soh/soh/Enhancements/randomizer/context.cpp | 36 +++++++++ soh/soh/Enhancements/randomizer/context.h | 11 +++ .../Enhancements/randomizer/hook_handlers.cpp | 3 + .../Enhancements/randomizer/randomizerTypes.h | 6 -- soh/soh/Enhancements/randomizer/static_data.h | 1 + .../actors/ovl_En_G_Switch/z_en_g_switch.c | 73 +++++++++-------- .../actors/ovl_En_G_Switch/z_en_g_switch.h | 1 + 10 files changed, 210 insertions(+), 68 deletions(-) diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index a95dabb00b0..cf81f060d71 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -1868,4 +1868,28 @@ typedef enum { // #### `args` // - `*EnWonderTalk2` VB_WONDER_TALK, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_COLLECT, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_COUNT_CHECK, + + // #### `result` + // ```c + // true + // ``` + // #### `args` + // - `*EnGSwitch` + VB_SILVER_RUPEE_SETUP_DRAW, } GIVanillaBehavior; diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 49ac53432f9..135719c5600 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -1,5 +1,7 @@ #include "ShuffleSilverRupees.h" #include "static_data.h" +#include +#include "draw.h" extern "C" { #include "variables.h" @@ -7,19 +9,8 @@ extern "C" { extern PlayState* gPlayState; } -extern "C" void EnGSwitch_RandomizerSilverRupeeIdle(EnGSwitch* self, PlayState *play) { - Player* player = GET_PLAYER(play); - - self->actor.shape.rot.y += 0x800; - if (self->actor.xyzDistToPlayerSq < 900.0f) { - Flags_SetRandomizerInf(self->srIdentity.randomizerInf); - self->killTimer = 0; - self->actionFunc = EnGSwitch_Kill; - } -} - extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { - EnGSwitch* srActor = static_cast(thisx); + EnGSwitch* srActor = reinterpret_cast(thisx); Matrix_Push(); Matrix_Scale(17.5f, 17.5f, 17.5f, MTXMODE_APPLY); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { @@ -50,8 +41,8 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { LUSLOG_WARN("SilverRupeeIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); assert(false); } else { - srIdentity.randomizerCheck = location->GetRandomizerCheck(); - srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.randomizerCheck, true, GI_NONE); + srIdentity.index.randomizerCheck = location->GetRandomizerCheck(); + srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.index.randomizerCheck, true, GI_NONE); srIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); } return srIdentity; @@ -59,13 +50,64 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { void EnGSwitch_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); + if (actor->id != ACTOR_EN_G_SWITCH) return; EnGSwitch* srActor = static_cast(actorRef); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { - srActor->srIdentity = IdentifySilverRupee(sceneNum, param1, param2); + srActor->srIdentity = IdentifySilverRupee(actor->world.pos); + } else { + srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; + } +} + +void ShuffleSilverRupees_OnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { + va_list args; + va_copy(args, originalArgs); + Actor* actor = va_arg(args, Actor*); + va_end(args); + + EnGSwitch* srActor = reinterpret_cast(actor); + + if (id == VB_SILVER_RUPEE_COLLECT) { + Flags_SetRandomizerInf(srActor->srIdentity.randomizerInf); + Actor_Kill(actor); + *should = false; + } else if (id == VB_SILVER_RUPEE_COUNT_CHECK) { + // check if all silver rupees for that room have been collected + // we run this every frame in case one of the rupees for a room + // is randomized into the same room. Without this we'd need to + // reload the scene after collecting it to unlock the door. + if (OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(srActor->srIdentity.index.randomizerGet).AllCollected()) { + if ((gPlayState->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (srActor->actor.room == 2)) { + Flags_SetTempClear(gPlayState, srActor->actor.room); + } else { + Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); + Flags_SetSwitch(gPlayState, srActor->switchFlag); + } + Actor_Kill(actor); + } + *should = false; + } else if (id == VB_SILVER_RUPEE_SETUP_DRAW) { + srActor->actor.draw = (ActorFunc)EnGSwitch_RandomizerDraw; + *should = false; } } +uint32_t onSRVanillaBehaviorHook = 0; +uint32_t onSRActorInitHook = 0; + +void ShuffleSilverRupees_RegisterHooks() { + onSRActorInitHook = GameInteractor::Instance->RegisterGameHook(EnGSwitch_RandomizerInit); + onSRVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook(ShuffleSilverRupees_OnVanillaBehaviorHandler); +} + +void ShuffleSilverRupees_UnregisterHooks() { + GameInteractor::Instance->UnregisterGameHook(onSRActorInitHook); + GameInteractor::Instance->UnregisterGameHook(onSRVanillaBehaviorHook); + onSRVanillaBehaviorHook = 0; + onSRActorInitHook = 0; +} + void Rando::StaticData::RegisterSilverRupeeLocations() { locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", "Ice Cavern Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", "Ice Cavern Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); @@ -265,4 +307,8 @@ uint8_t Rando::SilverRupeeCounter::GetTotal() const { void Rando::SilverRupeeCounter::IncrementCollected(uint8_t amount) { mCollected += amount; -} \ No newline at end of file +} + +bool Rando::SilverRupeeCounter::AllCollected() { + return GetCollected() == GetTotal(); +} diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index 88bc804feec..64b06148ae7 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -9,20 +9,39 @@ void EnGSwitch_RandomizerInit(void* actorRef); }; #endif +#include "soh/Enhancements/item-tables/ItemTableTypes.h" +#include "randomizer_inf.h" +#include "randomizerTypes.h" + +typedef struct SilverRupeeIdentity { + RandomizerInf randomizerInf; + union { + RandomizerCheck randomizerCheck; + RandomizerGet randomizerGet; + } index; + GetItemEntry itemEntry; +} SilverRupeeIdentity; + +void ShuffleSilverRupees_RegisterHooks(); +void ShuffleSilverRupees_UnregisterHooks(); + +#ifdef __cplusplus namespace Rando { - class SilverRupeeCounter { - public: - SilverRupeeCounter(); - SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); +class SilverRupeeCounter { +public: + SilverRupeeCounter(); + SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); - uint8_t GetCollected() const; - uint8_t GetTotal() const; - void IncrementCollected(uint8_t amount = 1) - private: - uint8_t mCollected = 0; - uint8_t mTotal; - RandomizerGet mRandoGet; - } -} + uint8_t GetCollected() const; + uint8_t GetTotal() const; + void IncrementCollected(uint8_t amount = 1); + bool AllCollected(); +private: + uint8_t mCollected = 0; + uint8_t mTotal; + RandomizerGet mRandoGet; +}; +} // namespace Rando +#endif #endif //SHUFLESILVERRUPEES_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 9fcf71d55f9..33ce1e431ad 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -29,6 +29,37 @@ Context::Context() { mLogic = std::make_shared(); mTrials = std::make_shared(); mFishsanity = std::make_shared(); + mSilverRupeeCounters = { + // Vanilla + SilverRupeeCounter(5, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE), + SilverRupeeCounter(5, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FOREST_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_LIGHT_TRIAL_SILVER_RUPEE), + // MQ + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE), + SilverRupeeCounter(6, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE), + SilverRupeeCounter(3, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE), + SilverRupeeCounter(5, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_WATER_TRIAL_MQ_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE), + }; VanillaLogicDefaults = { // RANDOTODO check what this does &mOptions[RSK_LINKS_POCKET], @@ -521,6 +552,11 @@ void Context::SetHash(std::string hash) { mHash = std::move(hash); } +SilverRupeeCounter& Context::GetSilverRupeeCounter(RandomizerGet rg) { + assert(rg >= RG_SILVER_RUPEE_FIRST && rg <= RG_SILVER_RUPEE_LAST); + return mSilverRupeeCounters[rg - RG_SILVER_RUPEE_FIRST]; +} + const std::string& Context::GetSeedString() const { return mSeedString; } diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index bd6bc17358b..a18dfafbee2 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -8,6 +8,7 @@ #include "hint.h" #include "fishsanity.h" #include "trial.h" +#include "ShuffleSilverRupees.h" #include #include @@ -162,12 +163,22 @@ class Context { */ void SetHash(std::string hash); + /** + * @brief Gets a reference to the silver rupee counter corresponding to the + * Given RandomizerGet value. + * + * @param rg + * @return SilverRupeeCounter& + */ + SilverRupeeCounter& GetSilverRupeeCounter(RandomizerGet rg); + private: static std::weak_ptr mContext; std::array hintTable = {}; std::array itemLocationTable = {}; std::array mOptions; std::array mTrickOptions; + std::array mSilverRupeeCounters; RandoOptionLACSCondition mLACSCondition = RO_LACS_VANILLA; std::shared_ptr mEntranceShuffler; std::shared_ptr mDungeons; diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index f48b7da5a99..9f4fd8434b6 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -2417,6 +2417,7 @@ void RandomizerRegisterHooks() { shuffleFreestandingOnVanillaBehaviorHook = 0; ShuffleFairies_UnregisterHooks(); + ShuffleSilverRupees_UnregisterHooks(); if (!IS_RANDO) return; @@ -2469,5 +2470,7 @@ void RandomizerRegisterHooks() { if (RAND_GET_OPTION(RSK_SHUFFLE_FAIRIES)) { ShuffleFairies_RegisterHooks(); } + + ShuffleSilverRupees_RegisterHooks(); }); } diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 30e622c0894..6e5c11418fb 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5876,12 +5876,6 @@ typedef struct FishIdentity { RandomizerCheck randomizerCheck; } FishIdentity; -typedef struct SilverRupeeIdentity { - RandomizerInf randomizerInf; - RandomizerCheck randomizerCheck; - GetItemEntry itemEntry; -} SilverRupeeIdentity; - typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index a456089a35b..ec258dd75b8 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -51,6 +51,7 @@ class StaticData { static void RegisterFairyLocations(); static void RegisterPotLocations(); static void RegisterFreestandingLocations(); + static void RegisterSilverRupeeLocations(); static void InitHashMaps(); static std::array, 17> randomizerFishingPondFish; static std::unordered_map randomizerGrottoFishMap; diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c index 15a5ba19e6c..aae556b5ce4 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c @@ -13,6 +13,7 @@ #include "objects/object_tsubo/object_tsubo.h" #include "objects/object_gi_rupy/object_gi_rupy.h" #include "soh/frame_interpolation.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED) @@ -117,7 +118,9 @@ void EnGSwitch_Init(Actor* thisx, PlayState* play) { this->numEffects = 20; Collider_InitCylinder(play, &this->collider); Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); - this->actor.draw = EnGSwitch_DrawRupee; + if (GameInteractor_Should(VB_SILVER_RUPEE_SETUP_DRAW, true, this)) { + this->actor.draw = EnGSwitch_DrawRupee; + } this->actor.shape.yOffset = 700.0f; if (Flags_GetSwitch(play, this->switchFlag)) { osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ You are Shock! ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); @@ -209,30 +212,32 @@ void EnGSwitch_WaitForObject(EnGSwitch* this, PlayState* play) { } void EnGSwitch_SilverRupeeTracker(EnGSwitch* this, PlayState* play) { - static s8 majorScale[] = { 0, 2, 4, 5, 7, 9, 11, 13, 15, 17 }; - - if (this->noteIndex < sCollectedCount) { - if (sCollectedCount < (CVarGetInteger(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 0) ? 10 : 5)) { - // "sound?" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 音? ☆☆☆☆☆ %d\n" VT_RST, this->noteIndex); - Audio_PlaySoundTransposed(&gSfxDefaultPos, NA_SE_EV_FIVE_COUNT_LUPY, majorScale[this->noteIndex]); - this->noteIndex = sCollectedCount; + if (GameInteractor_Should(VB_SILVER_RUPEE_COUNT_CHECK, true, this)) { + static s8 majorScale[] = { 0, 2, 4, 5, 7, 9, 11, 13, 15, 17 }; + + if (this->noteIndex < sCollectedCount) { + if (sCollectedCount < (CVarGetInteger(CVAR_ENHANCEMENT("SilverRupeeJingleExtend"), 0) ? 10 : 5)) { + // "sound?" + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 音? ☆☆☆☆☆ %d\n" VT_RST, this->noteIndex); + Audio_PlaySoundTransposed(&gSfxDefaultPos, NA_SE_EV_FIVE_COUNT_LUPY, majorScale[this->noteIndex]); + this->noteIndex = sCollectedCount; + } } - } - if (sCollectedCount >= this->silverCount) { - // "It is now the end of the century." - // This another reference to Hokuto no Ken. - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 時はまさに世紀末〜 ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); - // "Last!" - osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ らすとぉ! ☆☆☆☆☆ \n" VT_RST); - if ((play->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (this->actor.room == 2)) { - Flags_SetTempClear(play, this->actor.room); - } else { - Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); - Flags_SetSwitch(play, this->switchFlag); + if (sCollectedCount >= this->silverCount) { + // "It is now the end of the century." + // This another reference to Hokuto no Ken. + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ 時はまさに世紀末〜 ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); + // "Last!" + osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ らすとぉ! ☆☆☆☆☆ \n" VT_RST); + if ((play->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (this->actor.room == 2)) { + Flags_SetTempClear(play, this->actor.room); + } else { + Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); + Flags_SetSwitch(play, this->switchFlag); + } + Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); + Actor_Kill(&this->actor); } - Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); - Actor_Kill(&this->actor); } } @@ -241,17 +246,19 @@ void EnGSwitch_SilverRupeeIdle(EnGSwitch* this, PlayState* play) { this->actor.shape.rot.y += 0x800; if (this->actor.xyzDistToPlayerSq < 900.0f) { - Rupees_ChangeBy(5); - sCollectedCount++; - Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); - this->actor.world.pos = player->actor.world.pos; - this->actor.world.pos.y += 40.0f; - if (LINK_IS_ADULT) { - this->actor.world.pos.y += 20.0f; + if (GameInteractor_Should(VB_SILVER_RUPEE_COLLECT, true, this)) { + Rupees_ChangeBy(5); + sCollectedCount++; + Sfx_PlaySfxCentered(NA_SE_SY_GET_RUPY); + this->actor.world.pos = player->actor.world.pos; + this->actor.world.pos.y += 40.0f; + if (LINK_IS_ADULT) { + this->actor.world.pos.y += 20.0f; + } + this->actor.gravity = 0.0f; + this->killTimer = 15; + this->actionFunc = EnGSwitch_SilverRupeeCollected; } - this->actor.gravity = 0.0f; - this->killTimer = 15; - this->actionFunc = EnGSwitch_SilverRupeeCollected; } } diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h index 68e8749a3e0..abef8591250 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.h @@ -3,6 +3,7 @@ #include #include "global.h" +#include struct EnGSwitch; From 89b88fd6a10089288d5ede67bd87c176339383a6 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 12 Feb 2025 21:08:00 -0500 Subject: [PATCH 17/41] Adds placeholder locations to area table. New regions and more specific logic will be coming soon. --- .../dungeons/bottom_of_the_well.cpp | 5 ++ .../dungeons/dodongos_cavern.cpp | 6 +++ .../dungeons/ganons_castle.cpp | 53 ++++++++++++++++++- .../dungeons/gerudo_training_ground.cpp | 45 +++++++++++++++- .../location_access/dungeons/ice_cavern.cpp | 11 ++++ .../dungeons/shadow_temple.cpp | 52 ++++++++++++++++++ .../dungeons/spirit_temple.cpp | 26 +++++++++ 7 files changed, 194 insertions(+), 4 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp index 171542ea352..f6c6878a449 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp @@ -144,6 +144,11 @@ void RegionTable_Init_BottomOfTheWell() { LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, logic->CanBreakPots()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, logic->CanBreakPots()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, true), + LOCATION(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}), 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 bb5e1754f0f..c4d7f24957b 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,12 @@ 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()), + // RANDOTODO some of these are lower but some of these are actually in upper. + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, true), }, { //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 diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp index 2a730170112..5491abe6548 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp @@ -64,6 +64,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanDamage()), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_DINS_FIRE))), + // RANDOTODO consider adding a new region here, since there will now be + // seven checks locked behind Fire Arrows or Din's Fire. + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_FOREST_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Region("Ganon's Castle Fire Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -74,6 +81,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)), + // RANDOTODO consider a new region here, since collecting silver rupees out in + // the overworld will be required to reach the pots above. + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_FIRE_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Region("Ganon's Castle Water Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -118,6 +132,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), + // RANDOTODO new region here, some chests and pots will be locked behind collecting + // silver rupees from elsewhere now. Also one of these will require hookshot/a trick. + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", "Ganon's Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, { @@ -136,6 +157,13 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, logic->CanBreakPots() && logic->SmallKeys(RR_GANONS_CASTLE, 2)), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO new region to handle silver rupee collection logic for the pots past + // this puzzle. Also one of these will require hookshot. + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_1, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_2, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_3, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_4, true), + LOCATION(RC_LIGHT_TRIAL_SILVER_RUPEE_5, true), }, {}); #pragma endregion @@ -226,7 +254,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}), }); - areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO logic + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), //2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not @@ -256,7 +291,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();});}), }); - areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO logic, most likely will need bottle/arrows to collect all, maybe hammer? + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}), //This assumes there's no way for child to have blue fire and not adult. @@ -320,6 +362,13 @@ void RegionTable_Init_GanonsCastle() { areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE] = Region("Ganon's Castle MQ Shadow Trial Far Side", "Ganons Castle", {RA_GANONS_CASTLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()), + // RANDOTODO logic for individual silver rupees, which probably also need to be moved + // to some of the other regions here rather than being all in one place. + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS);}), 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 f0b9de5c3e5..62b81873e00 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 @@ -24,9 +24,18 @@ void RegionTable_Init_GerudoTrainingGround() { LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), + // RANDOTODO move these to their own region, as one for the boulder maze + // currently does not exist. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), + // RANDOTODO with silver rupees we can't necessarily get all the way to the heavy + // block room with this logic anymore, will likely need a middle region. Entrance(RR_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_ROOM, []{return logic->CanKillEnemy(RE_STALFOS, ED_CLOSE, true, 2, true) && (logic->CanUse(RG_HOOKSHOT) || ctx->GetTrickOption(RT_GTG_WITHOUT_HOOKSHOT));}), Entrance(RR_GERUDO_TRAINING_GROUND_LAVA_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_LOBBY, []{return logic->CanKillEnemy(RE_BEAMOS) && logic->CanKillEnemy(RE_DINOLFOS, ED_CLOSE, true, 2, true);});}), Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE, []{return true;}), @@ -58,6 +67,18 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + // RANDOTODO invidual silver rupee logic, and also moving the check above to another + // region to handle silver rupee puzzle access logic. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}), @@ -165,7 +186,15 @@ void RegionTable_Init_GerudoTrainingGround() { Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), }); - areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO I think this is the silver rupee boulder room? Some of the entrance logic + // below might need to be changed to account for silver rupees. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, true), + }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}), Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WIHTOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}), @@ -250,7 +279,15 @@ void RegionTable_Init_GerudoTrainingGround() { //this region exists to place silver rupee items on later, normally it's all on fire and cannot be stood on without access from another area //This covers the platform that needs hover boots or the spawned targets to reach from any starting point other than RR_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT //the unshuffled rupee collection is handled by the event GTGPlatformSilverRupees - areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, {}, { + areaTable[RR_GERUDO_TRAINING_GROUND_MQ_FURTHEST_PLATFORM] = Region("Gerudo Training Ground MQ Furthest Platform", "Gerudo Training Ground", {RA_GERUDO_TRAINING_GROUND}, NO_DAY_NIGHT_CYCLE, {}, { + // RANDOTODO double check on these silver rupees, some may need to go to other regions + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, true), + }, { //Exits //This is merely to extend this region's logic if you have hovers Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return logic->CanUse(RG_HOVER_BOOTS);}), @@ -283,6 +320,10 @@ void RegionTable_Init_GerudoTrainingGround() { //Locations //it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->TakeDamage()), + // RANDOTODO double check this logic, might at least require Iron Boots. + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, true), + LOCATION(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp index ff9b171c821..cb5a92250d1 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp @@ -52,6 +52,17 @@ void RegionTable_Init_IceCavern() { LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), + // RANDOTODO might need a new region here for everything past the bars. + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, true), + LOCATION(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, true), + LOCATION(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, true), }, {}); #pragma endregion 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 bdcf8a4fa0a..a4bf72a8b71 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -43,6 +43,12 @@ void RegionTable_Init_ShadowTemple() { //Locations LOCATION(RC_SHADOW_TEMPLE_COMPASS_CHEST, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)), + // RANDOTODO above logic needs to change/move to the silver rupee items below. + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false), LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), }, { @@ -55,10 +61,22 @@ void RegionTable_Init_ShadowTemple() { //Locations LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, logic->CanJumpslashExceptHammer()), + // RANDOTODO possibly new region here for silver rupee collection logic + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, true), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)), LOCATION(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, (ctx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->CanUse(RG_HOVER_BOOTS)) || logic->HasItem(RG_GORONS_BRACELET)), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO possible new regions to handle getting past silver rupee puzzle. + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, true), LOCATION(RC_SHADOW_TEMPLE_FREESTANDING_KEY, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && (logic->CanUse(RG_BOMB_BAG) || logic->HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->CanUse(RG_BOMBCHU_5)))), LOCATION(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, logic->CanJumpslashExceptHammer()), LOCATION(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, logic->CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->CanUse(RG_HOVER_BOOTS))), @@ -162,6 +180,12 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));});}), @@ -206,6 +230,17 @@ void RegionTable_Init_ShadowTemple() { ((ctx->GetTrickOption(RT_LENS_SHADOW_MQ) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) || logic->IsChild || logic->CanUse(RG_NAYRUS_LOVE))) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}), @@ -214,6 +249,12 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Region("Shadow Temple MQ Lower Huge Pit", "Shadow Temple", {RA_SHADOW_TEMPLE}, NO_DAY_NIGHT_CYCLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, logic->CanUse(RG_LONGSHOT)), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->CanJumpslash() || logic->HasExplosives();});}), @@ -261,6 +302,17 @@ void RegionTable_Init_ShadowTemple() { }, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))), + // RANDOTODO silver rupee logic + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, true), + LOCATION(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}), 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 e3d00ccf362..06db16e7c0f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -34,6 +34,13 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, (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_CHILD_EARLY_TORCHES_CHEST, (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)))) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_DINS_FIRE))), LOCATION(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, (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))))), + // RANDOTODO silver rupee logic. Shouldn't need much here. Maybe could make each room a + // a region to simplify some of this other logic. + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_GATE_SILVER_RUPEE_5, true), LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_1, (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_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))))), @@ -65,6 +72,13 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))), LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())), + //RANDOTODO silver rupee logic. This one might actually be fine as is, other than maybe + // the chest after boulder room? + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -80,6 +94,12 @@ void RegionTable_Init_SpiritTemple() { (logic->CanUse(RG_DINS_FIRE) || ((logic->CanUse(RG_FIRE_ARROWS) || ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST)) && logic->CanUse(RG_FAIRY_BOW) && logic->CanUse(RG_STICKS) ))) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasExplosives() && logic->CanUse(RG_STICKS)) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && (logic->CanUse(RG_FIRE_ARROWS) || (ctx->GetTrickOption(RT_SPIRIT_SUN_CHEST) && logic->CanUse(RG_FAIRY_BOW))) && logic->CanUse(RG_SILVER_GAUNTLETS))), + // RANDOTODO silver rupee logic, may need some new regions here, not sure. + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, true), LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY)), LOCATION(RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) && logic->CanUse(RG_SILVER_GAUNTLETS) && logic->CanUse(RG_ZELDAS_LULLABY) && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS) || ctx->GetTrickOption(RT_SPIRIT_LOBBY_JUMP))), LOCATION(RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, (logic->HasExplosives() && logic->CanUse(RG_BOOMERANG) && logic->CanUse(RG_HOOKSHOT)) || @@ -159,6 +179,12 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()), + // RANDOTODO silver rupee logic, a couple of these might need to be in 1f west region. + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, true), + LOCATION(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), From 068e9ceadee0e820cb9f75746cf75f6b2b0b16d5 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:48:57 -0500 Subject: [PATCH 18/41] Makes silver rupee items work --- .../Enhancements/item-tables/ItemTableTypes.h | 1 + .../randomizer/3drando/item_pool.cpp | 50 ++++++++++++++++ .../randomizer/ShuffleSilverRupees.cpp | 3 + .../randomizer/ShuffleSilverRupees.h | 2 + soh/soh/Enhancements/randomizer/draw.cpp | 21 +++++++ soh/soh/Enhancements/randomizer/draw.h | 1 + soh/soh/Enhancements/randomizer/item.h | 3 +- soh/soh/Enhancements/randomizer/item_list.cpp | 59 +++++++++++++++++++ .../Enhancements/randomizer/randomizer.cpp | 20 +++++++ .../Enhancements/randomizer/randomizerTypes.h | 2 +- soh/soh/OTRGlobals.cpp | 2 + 11 files changed, 162 insertions(+), 2 deletions(-) diff --git a/soh/soh/Enhancements/item-tables/ItemTableTypes.h b/soh/soh/Enhancements/item-tables/ItemTableTypes.h index d9d7427177b..b50de624c3b 100644 --- a/soh/soh/Enhancements/item-tables/ItemTableTypes.h +++ b/soh/soh/Enhancements/item-tables/ItemTableTypes.h @@ -27,6 +27,7 @@ typedef enum GetItemCategory { /* 0x03 */ ITEM_CATEGORY_SMALL_KEY, /* 0x04 */ ITEM_CATEGORY_SKULLTULA_TOKEN, /* 0x05 */ ITEM_CATEGORY_MAJOR, + /* 0x06 */ ITEM_CATEGORY_SILVER_RUPEE, } GetItemCategory; #define GET_ITEM(itemId, objectId, drawId, textId, field, chestAnim, itemCategory, modIndex, getItemId) \ diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index ac79e860aac..e811b422110 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -997,6 +997,56 @@ void GenerateItemPool() { } } + // RANDOTODO lock these additions behind settings + AddItemToMainPool(RG_BOTTOMLESS_SILVER_RUPEE_POUCH); + std::vector silversToAdd; + if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { + silversToAdd.push_back(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE); + silversToAdd.push_back(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { + silversToAdd.push_back(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SPIRIT_GATE_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BEAMOS_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BOULDER_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SHADOW_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + silversToAdd.push_back(RG_FOREST_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_FIRE_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_LIGHT_TRIAL_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_FIRE_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_WATER_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE); + } + for (auto rgid : silversToAdd) { + AddItemToMainPool(rgid, ctx->GetSilverRupeeCounter(rgid).GetTotal()); + } + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 135719c5600..508044989c4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -55,6 +55,9 @@ void EnGSwitch_RandomizerInit(void* actorRef) { EnGSwitch* srActor = static_cast(actorRef); if (srActor->type == ENGSWITCH_SILVER_RUPEE) { srActor->srIdentity = IdentifySilverRupee(actor->world.pos); + if (Flags_GetRandomizerInf(srActor->srIdentity.randomizerInf)) { + Actor_Kill(actor); + } } else { srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; } diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index 64b06148ae7..180807b1ff0 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -26,6 +26,8 @@ void ShuffleSilverRupees_RegisterHooks(); void ShuffleSilverRupees_UnregisterHooks(); #ifdef __cplusplus +#include +CustomMessage GetSilverRupeeItemMessage(uint16_t rgid); namespace Rando { class SilverRupeeCounter { public: diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index 0a89e4daeb0..6aa349438d9 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -32,6 +32,7 @@ #include "soh_assets.h" #include "dungeon.h" #include "soh/Enhancements/cosmetics/cosmeticsTypes.h" +#include extern "C" { extern PlayState* gPlayState; @@ -1244,3 +1245,23 @@ extern "C" void Randomizer_DrawOverworldKey(PlayState* play, GetItemEntry* getIt CLOSE_DISPS(play->state.gfxCtx); } + +extern "C" void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry) { + OPEN_DISPS(play->state.gfxCtx); + Color_RGB8 silverRupeeColor = + CVarGetColor24(CVAR_COSMETIC("Consumable.SilverRupee.Value"), Color_RGB8({ 255, 255, 255 })); + Gfx_SetupDL_25Opa(play->state.gfxCtx); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, silverRupeeColor.r, silverRupeeColor.g, silverRupeeColor.b, 255); + gDPSetEnvColor(POLY_OPA_DISP++, silverRupeeColor.r / 5, silverRupeeColor.g / 5, silverRupeeColor.b / 5, 255); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiRupeeInnerDL); + Gfx_SetupDL_25Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, silverRupeeColor.r * 0.75f, silverRupeeColor.g * 0.75f, silverRupeeColor.b * 0.75f, + 255); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiRupeeOuterDL); + CLOSE_DISPS(play->state.gfxCtx); +} diff --git a/soh/soh/Enhancements/randomizer/draw.h b/soh/soh/Enhancements/randomizer/draw.h index 3fc5c86b4f6..5646ba80c2d 100644 --- a/soh/soh/Enhancements/randomizer/draw.h +++ b/soh/soh/Enhancements/randomizer/draw.h @@ -26,6 +26,7 @@ void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry getItemEntry); void Randomizer_DrawBombchuBagInLogic(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawBombchuBag(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawOverworldKey(PlayState* play, GetItemEntry* getItemEntry); +void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry); #define GET_ITEM_MYSTERY \ { ITEM_NONE_FE, 0, 0, 0, 0, MOD_RANDOMIZER, MOD_RANDOMIZER, ITEM_NONE_FE, 0, false, ITEM_FROM_NPC, ITEM_CATEGORY_JUNK, ITEM_NONE_FE, MOD_RANDOMIZER, (CustomDrawFunc)Randomizer_DrawMysteryItem } diff --git a/soh/soh/Enhancements/randomizer/item.h b/soh/soh/Enhancements/randomizer/item.h index f0df0f1bf0f..79a3c9a1489 100644 --- a/soh/soh/Enhancements/randomizer/item.h +++ b/soh/soh/Enhancements/randomizer/item.h @@ -23,7 +23,8 @@ enum ItemType { ITEMTYPE_REFILL, ITEMTYPE_SONG, ITEMTYPE_SHOP, - ITEMTYPE_DUNGEONREWARD + ITEMTYPE_DUNGEONREWARD, + ITEMTYPE_SILVERRUPEE }; namespace Rando { diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 0b94aab39d0..ea666724a17 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -359,6 +359,65 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_DEKU_NUT_BAG] = Item(RG_DEKU_NUT_BAG, Text{ "Deku Nut Bag", "Sac de Noix Mojo", "Deku-Nuß-Tasche" }, ITEMTYPE_ITEM, GI_NUT_UPGRADE_30, true, LOGIC_PROGRESSIVE_NUT_BAG, RHT_NONE, RG_DEKU_NUT_BAG, OBJECT_GI_NUTS, GID_NUTS, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE] = Item(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, Text{ "Ice Cavern Spinning Blades Silver Rupee", "Ice Cavern Spinning Blades Silver Rupee", "Ice Cavern Spinning Blades Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_ICE_CAVERN_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_ICE_CAVERN_SLIDING_SILVER_RUPEE] = Item(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, Text{ "Ice Cavern Block Sliding Silver Rupee", "Ice Cavern Block Sliding Silver Rupee", "Ice Cavern Block Sliding Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_ICE_CAVERN_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SLIDING_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE] = Item(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, Text{ "BotW Silver Rupee", "BotW Silver Rupee", "BotW Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, Text{ "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, Text{ "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, Text{ "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_GATE_SILVER_RUPEE] = Item(RG_SPIRIT_GATE_SILVER_RUPEE, Text{ "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_GATE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_BEAMOS_SILVER_RUPEE] = Item(RG_SPIRIT_BEAMOS_SILVER_RUPEE, Text{ "Spirit Temple Sun Block Room Silver Rupee", "Spirit Temple Sun Block Room Silver Rupee", "Spirit Temple Sun Block Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_BEAMOS_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_BOULDER_SILVER_RUPEE] = Item(RG_SPIRIT_BOULDER_SILVER_RUPEE, Text{ "Spirit Temple Boulder Room Silver Rupee", "Spirit Temple Boulder Room Silver Rupee", "Spirit Temple Boulder Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple Scythe Room Silver Rupee", "Shadow Temple Scythe Room Silver Rupee", "Shadow Temple Scythe Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = Item(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, Text{ "Shadow Temple Near Falling Spikes Silver Rupee", "Shadow Temple Near Falling Spikes Silver Rupee", "Shadow Temple Near Falling Spikes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE] = Item(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, Text{ "Shadow Temple Invisible Spikes Room Silver Rupee", "Shadow Temple Invisible Spikes Room Silver Rupee", "Shadow Temple Invisible Spikes Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FOREST_TRIAL_SILVER_RUPEE] = Item(RG_FOREST_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Forest Trial Silver Rupee", "Ganon's Castle Forest Trial Silver Rupee", "Ganon's Castle Forest Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FOREST_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FIRE_TRIAL_SILVER_RUPEE] = Item(RG_FIRE_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Fire Trial Silver Rupee", "Ganon's Castle Fire Trial Silver Rupee", "Ganon's Castle Fire Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FIRE_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_TRIAL_SILVER_RUPEE] = Item(RG_SPIRIT_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Spirit Trial Silver Rupee", "Ganon's Castle Spirit Trial Silver Rupee", "Ganon's Castle Spirit Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_LIGHT_TRIAL_SILVER_RUPEE] = Item(RG_LIGHT_TRIAL_SILVER_RUPEE, Text{ "Ganon's Castle Light Trial Silver Rupee", "Ganon's Castle Light Trial Silver Rupee", "Ganon's Castle Light Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_LIGHT_TRIAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE] = Item(RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, Text{ "Dodongo's Cavern Silver Rupee", "Dodongo's Cavern Silver Rupee", "Dodongo's Cavern Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple MQ Spinning Scythes Silver Rupee", "Shadow Temple MQ Spinning Scythes Silver Rupee", "Shadow Temple MQ Spinning Scythes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE] = Item(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, Text{ "Shadow Temple MQ Invisible Scythes Silver Rupee", "Shadow Temple MQ Invisible Scythes Silver Rupee", "Shadow Temple MQ Invisible Scythes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = Item(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, Text{ "Shadow Temple MQ Near Falling Spikes Silver Rupee", "Shadow Temple MQ Near Falling Spikes Silver Rupee", "Shadow Temple MQ Near Falling Spikes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE] = Item(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, Text{ "Shadow Temple MQ Invisible Spike Room Silver Rupee", "Shadow Temple MQ Invisible Spike Room Silver Rupee", "Shadow Temple MQ Invisible Spike Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE] = Item(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, Text{ "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, Text{ "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, Text{ "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, Text{ "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE] = Item(RG_FIRE_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_WATER_TRIAL_MQ_SILVER_RUPEE] = Item(RG_WATER_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Water Trial MQ Silver Rupee", "Ganon's Castle Water Trial MQ Silver Rupee", "Ganon's Castle Water Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_WATER_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_TRIAL_MQ_SILVER_RUPEE] = Item(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Shadow Trial MQ Silver Rupee", "Ganon's Castle Shadow Trial MQ Silver Rupee", "Ganon's Castle Shadow Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_SHADOW_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_BOTTOMLESS_SILVER_RUPEE_POUCH] = Item(RG_BOTTOMLESS_SILVER_RUPEE_POUCH, Text{ "Bottomless Silver Rupee Pouch", "Bottomless Silver Rupee Pouch", "Bottomless Silver Rupee Pouch" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_BOTTOMLESS_SILVER_RUPEE_POUCH, RG_BOTTOMLESS_SILVER_RUPEE_POUCH, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_BOTTOMLESS_SILVER_RUPEE_POUCH].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_TRIFORCE] = Item(RG_TRIFORCE, Text{ "Triforce", "Triforce", "Triforce" }, ITEMTYPE_EVENT, RG_TRIFORCE, false, LOGIC_NONE, RHT_NONE); itemTable[RG_HINT] = Item(RG_HINT, Text{ "Hint", "Indice", "Hinweis" }, ITEMTYPE_EVENT, RG_HINT, false, LOGIC_NONE, RHT_NONE); // Individual stages of progressive items (only here for GetItemEntry purposes, not for use in seed gen) diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 44831c7c045..63c3b17e690 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -2707,6 +2707,17 @@ void CreateGetItemMessages(const std::array* messageEntries) CustomMessage(messageEntry.english, messageEntry.german, messageEntry.french, TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM)); } + // Special Case for Silver Rupees + customMessageManager->CreateMessage( + Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST, + CustomMessage("You got a %c[[rupee_name]]%w! [[count_text]]", TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) + ); + + customMessageManager->CreateMessage( + Randomizer::getItemMessageTableID, RG_BOTTOMLESS_SILVER_RUPEE_POUCH, + CustomMessage("You found the %cBottomless Silver Rupee Pouch! All Silver Rupee Puzzles are Unlocked", + TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) + ); } void CreateRupeeMessages() { @@ -4051,6 +4062,15 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { } else if (item >= RG_GUARD_HOUSE_KEY && item <= RG_FISHING_HOLE_KEY) { Flags_SetRandomizerInf((RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1)); return Return_Item_Entry(giEntry, RG_NONE); + } else if (item >= RG_SILVER_RUPEE_FIRST && item <= RG_SILVER_RUPEE_LAST) { + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(item)).IncrementCollected(); + return Return_Item_Entry(giEntry, RG_NONE); + } else if (item == RG_BOTTOMLESS_SILVER_RUPEE_POUCH) { + for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { + int max = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).GetTotal(); + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).IncrementCollected(max); + } + return Return_Item_Entry(giEntry, RG_NONE); } switch (item) { diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 6e5c11418fb..0bb0e536ce9 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -4741,7 +4741,7 @@ typedef enum { RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RHT_GANONS_CASTLE_SILVER_RUPEE, - RHT_MAGICAL_SILVER_RUPEE, + RHT_BOTTOMLESS_SILVER_RUPEE_POUCH, RHT_EPONA, RHT_OVERWORLD_KEY, RHT_HINT_MYSTERIOUS, diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 2acc01d7fae..218f1540b32 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2075,6 +2075,8 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { messageEntry = Randomizer::GetIceTrapMessage(); } else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) { messageEntry = Randomizer::GetTriforcePieceMessage(); + } else if (player->getItemEntry.getItemId >= RG_SILVER_RUPEE_FIRST && player->getItemEntry.getItemId <= RG_SILVER_RUPEE_LAST) { + messageEntry = GetSilverRupeeItemMessage(player->getItemEntry.getItemId); } else { messageEntry = Randomizer_GetCustomGetItemMessage(player); } From e0ca535110f63458649a240f8e3a6db80da36bd4 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:51:25 -0500 Subject: [PATCH 19/41] Persist silver rupee items collected to save file --- soh/soh/SaveManager.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 55c7d204e5c..8c7b5a5fc5b 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -463,6 +463,12 @@ void SaveManager::LoadRandomizerVersion3() { SaveManager::Instance->LoadData("", trialId); randoContext->GetTrial(trialId)->SetAsRequired(); }); + + SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { + size_t value; + SaveManager::Instance->LoadData("", value); + randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).IncrementCollected(value); + }); } void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool fullSave) { @@ -595,6 +601,10 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f SaveManager::Instance->SaveData("", i); } }); + + SaveManager::Instance->SaveArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { + SaveManager::Instance->SaveData("", randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).GetCollected()); + }); } // Init() here is an extension of InitSram, and thus not truly an initializer for SaveManager itself. don't put any class initialization stuff here From ceba178eb74755a19f39bf61d37abe6cb24afad4 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 15 Feb 2025 13:51:46 -0500 Subject: [PATCH 20/41] Makes silver rupee trackers count and unlock puzzles. --- .../randomizer/ShuffleSilverRupees.cpp | 55 ++++++++++++++++++- soh/soh/Enhancements/randomizer/static_data.h | 23 ++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 508044989c4..667e686b65c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -6,9 +6,29 @@ extern "C" { #include "variables.h" #include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" +#include extern PlayState* gPlayState; } +CustomMessage GetSilverRupeeItemMessage(uint16_t rgid) { + CustomMessage messageEntry; + if (rgid >= RG_SILVER_RUPEE_FIRST && rgid <= RG_SILVER_RUPEE_LAST) { + messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST); + auto ctx = OTRGlobals::Instance->gRandoContext; + bool complete = ctx->GetSilverRupeeCounter(static_cast(rgid)).AllCollected(); + if (complete) { + messageEntry.Replace("[[count_text]]", "That's all of them"); + } else { + int srCount = ctx->GetSilverRupeeCounter(static_cast(rgid)).GetCollected() + 1; + messageEntry.Replace("[[count_text]]", CustomMessage("You have collected %g[[count]]%w of them so far")); + messageEntry.Replace("[[count]]", std::to_string(srCount)); + } + messageEntry.Replace("[[rupee_name]]", CustomMessage(Rando::StaticData::RetrieveItem(static_cast(rgid)).GetName())); + messageEntry.AutoFormat(); + } + return messageEntry; +} + extern "C" void EnGSwitch_RandomizerDraw(Actor* thisx, PlayState* play) { EnGSwitch* srActor = reinterpret_cast(thisx); Matrix_Push(); @@ -48,6 +68,38 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { return srIdentity; } +std::unordered_map Rando::StaticData::silverTrackerMap = { + { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 328 }, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE }, + { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 329 }, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE }, + { { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, 351 }, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 348 }, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 332 }, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 347 }, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 325 }, RG_SPIRIT_GATE_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 330 }, RG_SPIRIT_BEAMOS_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, 322 }, RG_SPIRIT_BOULDER_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 321 }, RG_SHADOW_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 329 }, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, 328 }, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 334 }, RG_FOREST_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 329 }, RG_FIRE_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 331 }, RG_SPIRIT_TRIAL_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, 338 }, RG_LIGHT_TRIAL_SILVER_RUPEE }, + // MQ + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 348 }, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 396 }, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE }, + { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, 219 }, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE }, + { { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, 357 }, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 321 }, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 643 }, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 337 }, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE }, + { { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, 648 }, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE }, + { { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, 375 }, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 322 }, RG_WATER_TRIAL_MQ_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 331 }, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE }, + { { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, 321 }, RG_FIRE_TRIAL_MQ_SILVER_RUPEE }, +}; + void EnGSwitch_RandomizerInit(void* actorRef) { Actor* actor = static_cast(actorRef); if (actor->id != ACTOR_EN_G_SWITCH) return; @@ -59,7 +111,8 @@ void EnGSwitch_RandomizerInit(void* actorRef) { Actor_Kill(actor); } } else { - srActor->srIdentity.index.randomizerGet = RG_SILVER_RUPEE_FIRST; + Rando::Identifier identifier = {static_cast(gPlayState->sceneNum), ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ : RCQUEST_VANILLA, actor->params}; + srActor->srIdentity.index.randomizerGet = Rando::StaticData::silverTrackerMap.at(identifier); } } diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index ec258dd75b8..ade71a20bcd 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -8,6 +8,12 @@ #include "location.h" namespace Rando { + + struct Identifier { + SceneID scene; + RandomizerCheckQuest quest; + int16_t params; +}; /** * @brief Singleton for storing and accessing static Randomizer-related data * @@ -73,8 +79,25 @@ class StaticData { static std::unordered_map stoneParamsToHint; static std::unordered_map grottoChestParamsToHint; static std::array hintTextTable; + static std::unordered_map silverTrackerMap; StaticData(); ~StaticData(); }; +} + +namespace std { + template<> + struct hash { + inline size_t operator()(const Rando::Identifier& id) const { + return hash{}(id.scene) ^ hash{}(id.quest) ^ hash{}(id.params); + } + }; + + template<> + struct equal_to { + inline bool operator()(const Rando::Identifier& a, const Rando::Identifier& b) const { + return a.scene == b.scene && a.params == b.params && a.quest == b.quest; + } + }; } \ No newline at end of file From 45ba7c158666253db35c2beb9c4e3ee69bd4227f Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 17:41:39 -0400 Subject: [PATCH 21/41] Implement the actual option for Silver Shuffle Before this commit it was always on if randomizer was on --- .../Enhancements/randomizer/3drando/fill.cpp | 2 + .../randomizer/3drando/item_pool.cpp | 101 +++++++++--------- .../randomizer/ShuffleSilverRupees.cpp | 2 +- soh/soh/Enhancements/randomizer/context.cpp | 3 +- .../randomizer/option_descriptions.cpp | 6 ++ .../Enhancements/randomizer/randomizerTypes.h | 2 +- soh/soh/Enhancements/randomizer/settings.cpp | 23 ++++ 7 files changed, 88 insertions(+), 51 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index c53a1477e1c..277eb1a8626 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1078,6 +1078,8 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { }); AssumedFill(dungeonMapAndCompass, dungeonLocations); } + + // randomize Silver Rupees } /*Randomize items restricted to a certain set of locations. diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 46c42a15ca9..f64da29e140 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1233,54 +1233,59 @@ void GenerateItemPool() { } // RANDOTODO lock these additions behind settings - AddItemToMainPool(RG_BOTTOMLESS_SILVER_RUPEE_POUCH); - std::vector silversToAdd; - if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { - silversToAdd.push_back(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE); - silversToAdd.push_back(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE); - } - if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { - silversToAdd.push_back(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE); - } - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE); - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE); - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE); - } else { - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE); - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE); - silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE); - } - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla()) { - silversToAdd.push_back(RG_SPIRIT_GATE_SILVER_RUPEE); - silversToAdd.push_back(RG_SPIRIT_BEAMOS_SILVER_RUPEE); - silversToAdd.push_back(RG_SPIRIT_BOULDER_SILVER_RUPEE); - } else { - silversToAdd.push_back(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE); - } - if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla()) { - silversToAdd.push_back(RG_SHADOW_SCYTHE_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE); - } else { - silversToAdd.push_back(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { - silversToAdd.push_back(RG_FOREST_TRIAL_SILVER_RUPEE); - silversToAdd.push_back(RG_FIRE_TRIAL_SILVER_RUPEE); - silversToAdd.push_back(RG_SPIRIT_TRIAL_SILVER_RUPEE); - silversToAdd.push_back(RG_LIGHT_TRIAL_SILVER_RUPEE); - } else { - silversToAdd.push_back(RG_FIRE_TRIAL_MQ_SILVER_RUPEE); - silversToAdd.push_back(RG_WATER_TRIAL_MQ_SILVER_RUPEE); - silversToAdd.push_back(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE); - } - for (auto rgid : silversToAdd) { - AddItemToMainPool(rgid, ctx->GetSilverRupeeCounter(rgid).GetTotal()); - } + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES)) { + std::vector silversToAdd; + if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { + silversToAdd.push_back(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE); + silversToAdd.push_back(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsVanilla()) { + silversToAdd.push_back(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE); + silversToAdd.push_back(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SPIRIT_GATE_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BEAMOS_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_BOULDER_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsVanilla()) { + silversToAdd.push_back(RG_SHADOW_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE); + } + if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { + silversToAdd.push_back(RG_FOREST_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_FIRE_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_SPIRIT_TRIAL_SILVER_RUPEE); + silversToAdd.push_back(RG_LIGHT_TRIAL_SILVER_RUPEE); + } else { + silversToAdd.push_back(RG_FIRE_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_WATER_TRIAL_MQ_SILVER_RUPEE); + silversToAdd.push_back(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE); + } + for (auto rgid : silversToAdd) { + AddItemToMainPool(rgid, ctx->GetSilverRupeeCounter(rgid).GetTotal()); + } + } + + if (ctx->GetOption(RSK_BOTTOMLESS_SILVER_RUPEE_POUCH)) { + AddItemToMainPool(RG_BOTTOMLESS_SILVER_RUPEE_POUCH); + } if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index c40906ac43a..4e2f6ebb8bd 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -121,7 +121,7 @@ void EnGSwitch_RandomizerInit(void* actor) { } void RegisterShuffleSilverRupees() { - bool shouldRegister = IS_RANDO && true; //RAND_GET_OPTION(RSK_SHUFFLE_SILVER_RUPEES); + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_SILVER_RUPEES); COND_ID_HOOK(OnActorInit, ACTOR_EN_G_SWITCH, shouldRegister, EnGSwitch_RandomizerInit); COND_VB_SHOULD(VB_SILVER_RUPEE_COLLECT, shouldRegister, { diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 7cdf0966241..dabb1fa2908 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -229,7 +229,8 @@ void Context::GenerateLocationPool() { (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || (location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || - (location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES])) { + (location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES]) || + (location.GetRCType() == RCTYPE_SILVER_RUPEE && !mOptions[RSK_SHUFFLE_SILVER_RUPEES])) { continue; } if (location.IsOverworld()) { diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 50d11d9b2ab..3fd9576db9c 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -760,5 +760,11 @@ void Settings::CreateOptionDescriptions() { "Shuffles 8 boss souls (one for each blue warp dungeon). A boss will not appear until you collect its " "respective soul." "\n\"On + Ganon\" will also hide Ganon and Ganondorf behind a boss soul."; + mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES] = "Shuffle Silver Rupees out of their usual locations in dungeons. " + "They will be replaced with new items and can be found at other locations in the game. The doors they " + "previously controlled will be opened when all of the Silver Rupees that used to be in that room have been " + "found wherever they have been shuffled to."; + mOptionDescriptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] = "Adds a special item to the pool that causes all " + "Silver Rupee puzzles to be completed regardless of how many Silver Rupees you have collected."; } } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 2f16800d624..6f140b9bdab 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -6155,7 +6155,7 @@ typedef enum { RSK_LOCK_OVERWORLD_DOORS, RSK_SHUFFLE_GRASS, RSK_SHUFFLE_SILVER_RUPEES, - RSK_MAGICAL_SILVER_RUPEE, + RSK_BOTTOMLESS_SILVER_RUPEE_POUCH, RSK_MAX } RandomizerSettingKey; diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index e46cc4eeeda..647c1c113ca 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -263,6 +263,8 @@ void Settings::CreateOptions() { OPT_U8(RSK_KEYRINGS_BOTTOM_OF_THE_WELL, "Bottom of the Well Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsBottomOfTheWell"), "", WidgetType::Combobox, 0); OPT_U8(RSK_KEYRINGS_GTG, "Gerudo Training Ground Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGTG"), "", WidgetType::Combobox, 0); OPT_U8(RSK_KEYRINGS_GANONS_CASTLE, "Ganon's Castle Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGanonsCastle"), "", WidgetType::Combobox, 0); + OPT_BOOL(RSK_SHUFFLE_SILVER_RUPEES, "Shuffle Silver Rupees", CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES]); + OPT_BOOL(RSK_BOTTOMLESS_SILVER_RUPEE_POUCH, "Add Bottomless Silver Rupee Pouch", CVAR_RANDOMIZER_SETTING("BottomlessSilverRupeePouch"), mOptionDescriptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH]); //Dummied out due to redundancy with TimeSavers.SkipChildStealth until such a time that logic needs to consider child stealth e.g. because it's freestanding checks are added to freestanding shuffle. //To undo this dummying, readd this setting to an OptionGroup so it appears in the UI, then edit the timesaver check hooks to look at this, and the timesaver setting to lock itself as needed. OPT_BOOL(RSK_SKIP_CHILD_STEALTH, "Skip Child Stealth", {"Don't Skip", "Skip"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("SkipChildStealth"), mOptionDescriptions[RSK_SKIP_CHILD_STEALTH], WidgetType::Checkbox, RO_GENERIC_DONT_SKIP); @@ -1327,6 +1329,8 @@ void Settings::CreateOptions() { &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], &mOptions[RSK_KEYRINGS_GTG], &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + &mOptions[RSK_SHUFFLE_SILVER_RUPEES], + &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] }, WidgetContainerType::COLUMN); mOptionGroups[RSG_ITEMS_IMGUI_TABLE] = OptionGroup::SubGroup("Items", @@ -1566,6 +1570,8 @@ void Settings::CreateOptions() { &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], &mOptions[RSK_KEYRINGS_GTG], &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + &mOptions[RSK_SHUFFLE_SILVER_RUPEES], + &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] }); mOptionGroups[RSG_STARTING_ITEMS] = OptionGroup::SubGroup("Items", { &mOptions[RSK_STARTING_OCARINA], &mOptions[RSK_STARTING_KOKIRI_SWORD], @@ -1801,6 +1807,11 @@ const OptionGroup& Settings::GetOptionGroup(const RandomizerSettingGroupKey key) } void Settings::UpdateOptionProperties() { + // If statement for No Logic Only options. + if(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_NO_LOGIC) { + // RANDOTODO: Remove when logic is implemented for Silver Rupee Shuffle. + mOptions[RSK_SHUFFLE_SILVER_RUPEES].Disable("This setting is only available for No Logic runs."); + } // Default to hiding bridge opts and the extra sliders. mOptions[RSK_RAINBOW_BRIDGE].AddFlag(IMFLAG_SEPARATOR_BOTTOM); mOptions[RSK_BRIDGE_OPTIONS].Hide(); @@ -2520,10 +2531,19 @@ void Settings::UpdateOptionProperties() { } else { mOptions[RSK_BIG_POES_HINT].Enable(); } + + if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), 0)) { + mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Disable("This option is not available unless Shuffle Silver Rupees is turned on"); + } } void Context::FinalizeSettings(const std::set& excludedLocations, const std::set& enabledTricks) { + // If you have settings that will only work for No Logic, put them in this if statement. + if (mOptions[RSK_LOGIC_RULES].IsNot(RO_LOGIC_NO_LOGIC)) { + // RANDOTODO: Remove when Logic is implemented for Silver Rupees. + mOptions[RSK_SHUFFLE_SILVER_RUPEES].Set(RO_GENERIC_OFF); + } // if we skip child zelda, we start with zelda's letter, and malon starts // at the ranch, so we should *not* shuffle the weird egg if (mOptions[RSK_SKIP_CHILD_ZELDA]) { @@ -2798,6 +2818,9 @@ void Context::FinalizeSettings(const std::set& excludedLocation (mOptions[RSK_KEYRINGS_GANONS_CASTLE].Is(RO_KEYRING_FOR_DUNGEON_RANDOM) && Random(0, 2) == 1)) { this->GetDungeon(GANONS_CASTLE)->SetKeyRing(); } + if(!mOptions[RSK_SHUFFLE_SILVER_RUPEES]) { + mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Set(RO_GENERIC_OFF); + } } auto trials = this->GetTrials()->GetTrialList(); From 6918dc2a96f166f109c820568745bc8cb3f26c28 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 18:45:38 -0400 Subject: [PATCH 22/41] Adds keysanity style options to silver shuffle. Specifically, the options are now Start With, Vanilla, Own Dungeon, Any Dungeon, Overworld, and Anywhere. --- .../Enhancements/randomizer/3drando/fill.cpp | 22 +++++++++++++++++-- .../randomizer/3drando/item_pool.cpp | 4 ++-- .../randomizer/3drando/starting_inventory.cpp | 6 +++++ soh/soh/Enhancements/randomizer/dungeon.cpp | 17 ++++++++++++++ soh/soh/Enhancements/randomizer/dungeon.h | 1 + soh/soh/Enhancements/randomizer/settings.cpp | 12 +++++----- 6 files changed, 53 insertions(+), 9 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index 277eb1a8626..f85d90664f9 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1067,6 +1067,14 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { AddElementsToPool(dungeonItems, dungeonBossKey); } + // randomize Silver Rupees + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON)) { + auto dungeonSilverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return dungeon->ContainsSilverRupee(i); + }); + AddElementsToPool(dungeonItems, dungeonSilverRupees); + } + // randomize boss key and small keys together for even distribution AssumedFill(dungeonItems, dungeonLocations); @@ -1078,8 +1086,6 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { }); AssumedFill(dungeonMapAndCompass, dungeonLocations); } - - // randomize Silver Rupees } /*Randomize items restricted to a certain set of locations. @@ -1134,6 +1140,18 @@ static void RandomizeDungeonItems() { FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; }); AddElementsToPool(overworldItems, ganonBossKey); } + + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { + auto silverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return dungeon->ContainsSilverRupee(i); + }); + AddElementsToPool(anyDungeonItems, silverRupees); + } else if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { + auto silverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { + return dungeon->ContainsSilverRupee(i); + }); + AddElementsToPool(overworldItems, silverRupees); + } } if (ctx->GetOption(RSK_GERUDO_KEYS).Is(RO_GERUDO_KEYS_ANY_DUNGEON)) { diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index f64da29e140..0fb098e2f62 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1232,8 +1232,8 @@ void GenerateItemPool() { ctx->possibleIceTrapModels.push_back(RG_BIGGORON_SWORD); } - // RANDOTODO lock these additions behind settings - if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES)) { + // Add Silver Rupees to the pool if the setting is not on Start With or Vanilla + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { std::vector silversToAdd; if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { silversToAdd.push_back(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE); diff --git a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp index dda37b18a15..eaa4ee36284 100644 --- a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp @@ -65,6 +65,12 @@ void GenerateStartingInventory() { AddItemToInventory(RG_GERUDO_MEMBERSHIP_CARD); } + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { + for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { + ctx->GetSilverRupeeCounter(static_cast(i)).IncrementCollected(ctx->GetSilverRupeeCounter(static_cast(i)).GetTotal()); + } + } + // Starting Inventory Menu // Values are associated so that the count of items matches the index of // the option selected. If None is selected, the value will be zero and diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 1eb88ed73a9..91bb6eb6592 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -145,6 +145,23 @@ std::vector DungeonInfo::GetDungeonLocations() const { return locations; } +bool DungeonInfo::ContainsSilverRupee(RandomizerGet silverRupee) const { + auto dungeonLocations = GetDungeonLocations(); + const auto silverRupeeLocations = FilterFromPool(dungeonLocations, [](const RandomizerCheck loc) { + return StaticData::GetLocation(loc)->GetRCType() == RCTYPE_SILVER_RUPEE; + }); + if (silverRupeeLocations.empty()) { + return false; + } + for (auto silverRupeeLocation : silverRupeeLocations) { + if (StaticData::GetLocation(silverRupeeLocation)->GetVanillaItem() == silverRupee) { + return true; + } + } + return false; + +} + Dungeons::Dungeons() { dungeonList[DEKU_TREE] = DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0, RSK_MQ_DEKU_TREE); diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index ba81d289d67..2d9dd575967 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -38,6 +38,7 @@ class DungeonInfo { void PlaceVanillaCompass() const; void PlaceVanillaBossKey() const; void PlaceVanillaSmallKeys() const; + bool ContainsSilverRupee(RandomizerGet silverRupee) const; std::vector GetDungeonLocations() const; std::vector locations; diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 647c1c113ca..1edcaf6bb06 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -263,7 +263,7 @@ void Settings::CreateOptions() { OPT_U8(RSK_KEYRINGS_BOTTOM_OF_THE_WELL, "Bottom of the Well Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsBottomOfTheWell"), "", WidgetType::Combobox, 0); OPT_U8(RSK_KEYRINGS_GTG, "Gerudo Training Ground Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGTG"), "", WidgetType::Combobox, 0); OPT_U8(RSK_KEYRINGS_GANONS_CASTLE, "Ganon's Castle Keyring", {"No", "Random", "Yes"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleKeyRingsGanonsCastle"), "", WidgetType::Combobox, 0); - OPT_BOOL(RSK_SHUFFLE_SILVER_RUPEES, "Shuffle Silver Rupees", CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES]); + OPT_U8(RSK_SHUFFLE_SILVER_RUPEES, "Shuffle Silver Rupees", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_VANILLA); OPT_BOOL(RSK_BOTTOMLESS_SILVER_RUPEE_POUCH, "Add Bottomless Silver Rupee Pouch", CVAR_RANDOMIZER_SETTING("BottomlessSilverRupeePouch"), mOptionDescriptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH]); //Dummied out due to redundancy with TimeSavers.SkipChildStealth until such a time that logic needs to consider child stealth e.g. because it's freestanding checks are added to freestanding shuffle. //To undo this dummying, readd this setting to an OptionGroup so it appears in the UI, then edit the timesaver check hooks to look at this, and the timesaver setting to lock itself as needed. @@ -2532,8 +2532,10 @@ void Settings::UpdateOptionProperties() { mOptions[RSK_BIG_POES_HINT].Enable(); } - if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), 0)) { - mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Disable("This option is not available unless Shuffle Silver Rupees is turned on"); + if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), RO_DUNGEON_ITEM_LOC_VANILLA) <= RO_DUNGEON_ITEM_LOC_VANILLA) { + mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Disable("This option is not available unless Silver Rupees are shuffled."); + } else { + mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Enable(); } } @@ -2542,7 +2544,7 @@ void Context::FinalizeSettings(const std::set& excludedLocation // If you have settings that will only work for No Logic, put them in this if statement. if (mOptions[RSK_LOGIC_RULES].IsNot(RO_LOGIC_NO_LOGIC)) { // RANDOTODO: Remove when Logic is implemented for Silver Rupees. - mOptions[RSK_SHUFFLE_SILVER_RUPEES].Set(RO_GENERIC_OFF); + mOptions[RSK_SHUFFLE_SILVER_RUPEES].Set(RO_DUNGEON_ITEM_LOC_VANILLA); } // if we skip child zelda, we start with zelda's letter, and malon starts // at the ranch, so we should *not* shuffle the weird egg @@ -2818,7 +2820,7 @@ void Context::FinalizeSettings(const std::set& excludedLocation (mOptions[RSK_KEYRINGS_GANONS_CASTLE].Is(RO_KEYRING_FOR_DUNGEON_RANDOM) && Random(0, 2) == 1)) { this->GetDungeon(GANONS_CASTLE)->SetKeyRing(); } - if(!mOptions[RSK_SHUFFLE_SILVER_RUPEES]) { + if(mOptions[RSK_SHUFFLE_SILVER_RUPEES].Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Set(RO_GENERIC_OFF); } } From 70ca57878eed4eb5675f1ac040ceee61113fecdb Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 18:59:29 -0400 Subject: [PATCH 23/41] Location list cleanup, remove spoilerNames --- .../randomizer/ShuffleSilverRupees.cpp | 352 +++++++++--------- 1 file changed, 176 insertions(+), 176 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 4e2f6ebb8bd..44288cee4ba 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -159,184 +159,184 @@ void RegisterShuffleSilverRupees() { static RegisterShipInitFunc initFunc(RegisterShuffleSilverRupees, { "IS_RANDO" }); void Rando::StaticData::RegisterSilverRupeeLocations() { - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", "Ice Cavern Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", "Ice Cavern Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", "Ice Cavern Spinning Blades Silver Rupee 3", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", "Ice Cavern Spinning Blades Silver Rupee 4", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", "Ice Cavern Spinning Blades Silver Rupee 5", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); - - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", "Ice Cavern Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", "Ice Cavern Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", "Ice Cavern Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", "Ice Cavern Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", "Ice Cavern Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); - - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Bottom of the Well Basement Silver Rupee 1", "Bottom of the Well Basement Silver Rupee 1", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Bottom of the Well Basement Silver Rupee 2", "Bottom of the Well Basement Silver Rupee 2", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Bottom of the Well Basement Silver Rupee 3", "Bottom of the Well Basement Silver Rupee 3", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Bottom of the Well Basement Silver Rupee 4", "Bottom of the Well Basement Silver Rupee 4", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Bottom of the Well Basement Silver Rupee 5", "Bottom of the Well Basement Silver Rupee 5", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", "GTG Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", "GTG Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", "GTG Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", "GTG Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", "GTG Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", "GTG Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", "GTG Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", "GTG Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", "GTG Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", "GTG Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", "GTG Whirlpool Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", "GTG Whirlpool Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", "GTG Whirlpool Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", "GTG Whirlpool Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", "GTG Whirlpool Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", "Spirit Temple Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", "Spirit Temple Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", "Spirit Temple Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", "Spirit Temple Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", "Spirit Temple Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", "Spirit Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", "Spirit Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "Beamos Room Silver Rupee 3", "Spirit Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "Beamos Room Silver Rupee 4", "Spirit Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "Beamos Room Silver Rupee 5", "Spirit Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "Boulder Room Silver Rupee 1", "Spirit Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "Boulder Room Silver Rupee 2", "Spirit Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "Boulder Room Silver Rupee 3", "Spirit Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "Boulder Room Silver Rupee 4", "Spirit Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "Boulder Room Silver Rupee 5", "Spirit Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", "Shadow Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", "Shadow Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", "Shadow Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", "Shadow Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", "Shadow Outside Spike Rain Room Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", "Shadow Outside Spike Rain Room Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", "Shadow Outside Spike Rain Room Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", "Shadow Outside Spike Rain Room Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", "Shadow Outside Spike Rain Room Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", "Shadow Invisible Spikes Room Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", "Shadow Invisible Spikes Room Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", "Shadow Invisible Spikes Room Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", "Shadow Invisible Spikes Room Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", "Shadow Invisible Spikes Room Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); - - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "Forest Trial Silver Rupee 1", "Inside Ganon's Castle Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "Forest Trial Silver Rupee 2", "Inside Ganon's Castle Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "Forest Trial Silver Rupee 3", "Inside Ganon's Castle Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "Forest Trial Silver Rupee 4", "Inside Ganon's Castle Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "Forest Trial Silver Rupee 5", "Inside Ganon's Castle Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "Fire Trial Silver Rupee 1", "Inside Ganon's Castle Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "Fire Trial Silver Rupee 2", "Inside Ganon's Castle Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "Fire Trial Silver Rupee 3", "Inside Ganon's Castle Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "Fire Trial Silver Rupee 4", "Inside Ganon's Castle Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "Fire Trial Silver Rupee 5", "Inside Ganon's Castle Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "Spirit Trial Silver Rupee 1", "Inside Ganon's Castle Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "Spirit Trial Silver Rupee 2", "Inside Ganon's Castle Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "Spirit Trial Silver Rupee 3", "Inside Ganon's Castle Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "Spirit Trial Silver Rupee 4", "Inside Ganon's Castle Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "Spirit Trial Silver Rupee 5", "Inside Ganon's Castle Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "Light Trial Silver Rupee 1", "Inside Ganon's Castle Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "Light Trial Silver Rupee 2", "Inside Ganon's Castle Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "Light Trial Silver Rupee 3", "Inside Ganon's Castle Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "Light Trial Silver Rupee 4", "Inside Ganon's Castle Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "Light Trial Silver Rupee 5", "Inside Ganon's Castle Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", "Dodongo's Cavern Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", "Dodongo's Cavern Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", "Dodongo's Cavern Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", "Dodongo's Cavern Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", "Dodongo's Cavern Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", "Shadow Temple MQ Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", "Shadow Temple MQ Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", "Shadow Temple MQ Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", "Shadow Temple MQ Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", "Shadow Temple MQ Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", "Shadow Temple MQ Invisible Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", "Shadow Temple MQ Invisible Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", "Shadow Temple MQ Invisible Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", "Shadow Temple MQ Invisible Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", "Shadow Temple MQ Invisible Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", "Shadow Temple MQ Invisible Scythe Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", "Shadow Temple MQ Invisible Scythe Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", "Shadow Temple MQ Invisible Scythe Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", "Shadow Temple MQ Invisible Scythe Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", "Shadow Temple MQ Invisible Scythe Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); - - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", "Shadow Temple MQ Outside Spike Rain Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", "Shadow Temple MQ Outside Spike Rain Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); + + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); + + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Basement Silver Rupee 1", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Basement Silver Rupee 2", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Basement Silver Rupee 3", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Basement Silver Rupee 4", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Basement Silver Rupee 5", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); + + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); // The following two locations have the same X and Z coordinates, so use X and Y for the params instead. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", "Shadow Temple MQ Outside Spike Rain Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", "Shadow Temple MQ Outside Spike Rain Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); // Back to X and Z coordinates for the params. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", "Shadow Temple MQ Outside Spike Rain Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", "Shadow Temple MQ Invisible Spikes Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", "Shadow Temple MQ Invisible Spikes Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", "Shadow Temple MQ Invisible Spikes Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", "Shadow Temple MQ Invisible Spikes Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", "Shadow Temple MQ Invisible Spikes Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", "Shadow Temple MQ Invisible Spikes Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", "Shadow Temple MQ Invisible Spikes Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", "Shadow Temple MQ Invisible Spikes Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", "Shadow Temple MQ Invisible Spikes Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", "Shadow Temple MQ Invisible Spikes Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); - - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", "Spirit Temple MQ Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", "Spirit Temple MQ Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", "Spirit Temple MQ Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", "Spirit Temple MQ Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", "Spirit Temple MQ Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", "Gerduo Training Grounds MQ Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", "Gerduo Training Grounds MQ Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", "Gerduo Training Grounds MQ Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", "Gerduo Training Grounds MQ Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", "Gerduo Training Grounds MQ Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", "Gerduo Training Grounds MQ Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", "Gerduo Training Grounds MQ Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", "Gerduo Training Grounds MQ Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); - - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", "Ganon's Castle Fire Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", "Ganon's Castle Fire Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", "Ganon's Castle Fire Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", "Ganon's Castle Fire Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", "Ganon's Castle Fire Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", "Ganon's Castle Water Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", "Ganon's Castle Water Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", "Ganon's Castle Water Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", "Ganon's Castle Water Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", "Ganon's Castle Water Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", "Ganon's Castle Shadow Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", "Ganon's Castle Shadow Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", "Ganon's Castle Shadow Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", "Ganon's Castle Shadow Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", "Ganon's Castle Shadow Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); + + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); } static ObjectExtension::Register RegisterSilverRupeeIdentity; From e3b1ef9cd066c1dfce70c074cfcd4a03660e5598 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 20:30:58 -0400 Subject: [PATCH 24/41] Fix Silver Rupee related hints --- .../hint_list/hint_list_exclude_dungeon.cpp | 22 +++ .../3drando/hint_list/hint_list_item.cpp | 9 ++ .../randomizer/ShuffleSilverRupees.cpp | 148 +++++++++--------- soh/soh/Enhancements/randomizer/item_list.cpp | 12 +- .../Enhancements/randomizer/randomizerTypes.h | 4 +- 5 files changed, 114 insertions(+), 81 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 aa375716f68..fb17f6e5b81 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 @@ -2225,6 +2225,28 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { /*german*/ "Man erzählt sich, daß ein #Herz in Ganons Schloß# #[[1]]# verstecke.", /*french*/ "Selon moi, un #coeur dans le Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE] = HintText(CustomMessage("They say that #spinning blades in Ice Cavern# protect #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE] = HintText(CustomMessage("They say that a #freezing slippery room# hides #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE] = HintText(CustomMessage("They say that the #Bottom of the well acid pit# protects #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE] = HintText(CustomMessage("They say that a #timed boulder maze# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE] = HintText(CustomMessage("They say that #a pillar rising out of lava in the desert# holds #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE] = HintText(CustomMessage("They say that a #whirlpool in the desert# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_GATE_SILVER_RUPEE] = HintText(CustomMessage("They say that a #gate in the Spirit Temple# protects #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_BEAMOS_SILVER_RUPEE] = HintText(CustomMessage("They say that #Beamos in the Spirit Temple# guard #[[1]]# from a #child#.", {QM_RED, QM_GREEN, QM_LBLUE})); + hintTextTable[RHT_SPIRIT_BOULDER_SILVER_RUPEE] = HintText(CustomMessage("They say that #boulders in the Spirit Temple# guard #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_LOBBY_SILVER_RUPEE] = HintText(CustomMessage("They say that #in the first room of the Spirit Temple#, #[[1]]# can be found.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE] = HintText(CustomMessage("They say that #visible spinning scythes in the Shadow Temple# guard #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = HintText(CustomMessage("They say that #outside the door to falling spikes in the Shadow Temple#, #[[1]]# can be found.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE] = HintText(CustomMessage("They say that #invisible spikes in the Shadow Temple# guard #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_FOREST_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of the forest# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_FIRE_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of fire# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_WATER_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of water# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of the spirit# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of the shadows# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_LIGHT_TRIAL_SILVER_RUPEE] = HintText(CustomMessage("They say that #a trial of light# guards #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_DODONGOS_CAVERN_SILVER_RUPEE] = HintText(CustomMessage("They say that #around a collapsible staircase#, #[[1]]# can be found.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE] = HintText(CustomMessage("They say that #invisible scythes in the Shadow Temple# guard #[[1]]#.", {QM_RED, QM_GREEN})); + // clang-format on } } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index c74c0ff23b9..a7f1a415691 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -2117,6 +2117,15 @@ void StaticData::HintTable_Init_Item() { hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"die unendliche Geldbörse", /*french*/"une Bourse sans fond")); + hintTextTable[RHT_DC_SILVER_RUPEE] = HintText(CustomMessage("a Dodongo's Cavern Silver Rupee")); + hintTextTable[RHT_ICE_CAVERN_SILVER_RUPEE] = HintText(CustomMessage("an Ice Cavern Silver Rupee")); + hintTextTable[RHT_BOTTOM_OF_THE_WELL] = HintText(CustomMessage("a Bottom of the Well Silver Rupee")); + hintTextTable[RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE] = HintText(CustomMessage("a Gerudo Training Ground Silver Rupee")); + hintTextTable[RHT_SPIRIT_TEMPLE_SILVER_RUPEE] = HintText(CustomMessage("a Spirit Temple Silver Rupee")); + hintTextTable[RHT_SHADOW_TEMPLE_SILVER_RUPEE] = HintText(CustomMessage("a Shadow Temple Silver Rupee")); + hintTextTable[RHT_GANONS_CASTLE_SILVER_RUPEE] = HintText(CustomMessage("a Ganon's Castle Silver Rupee")); + hintTextTable[RHT_BOTTOMLESS_SILVER_RUPEE_POUCH] = HintText(CustomMessage("a pouch full of Silver Rupees")); + hintTextTable[RHT_EPONA] = HintText(CustomMessage("Epona", /*german*/"Epona", /*french*/"Epona"), // /*spanish*/a Epona { diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 44288cee4ba..5f21cadd565 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -261,82 +261,82 @@ void Rando::StaticData::RegisterSilverRupeeLocations() { locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); - - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); + + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); // The following two locations have the same X and Z coordinates, so use X and Y for the params instead. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); // Back to X and Z coordinates for the params. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); - - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); - - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", RHT_GANONS_CASTLE_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); + + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); } static ObjectExtension::Register RegisterSilverRupeeIdentity; diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index d0c597e1038..6f4c589bf53 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -378,11 +378,11 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_ICE_CAVERN_SLIDING_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE] = Item(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, Text{ "BotW Silver Rupee", "BotW Silver Rupee", "BotW Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, Text{ "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, Text{ "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, Text{ "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, Text{ "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee", "GTG Lava Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, Text{ "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, Text{ "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee", "GTG Whirlpool Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); itemTable[RG_SPIRIT_GATE_SILVER_RUPEE] = Item(RG_SPIRIT_GATE_SILVER_RUPEE, Text{ "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee", "Spirit Temple Child Gate Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_SPIRIT_GATE_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); @@ -416,11 +416,11 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE] = Item(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, Text{ "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee", "Spirit Temple MQ Lobby Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, Text{ "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, Text{ "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee", "GTG MQ Boulder Maze Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, Text{ "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, Text{ "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee", "GTG MQ Lava Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, Text{ "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE] = Item(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, Text{ "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee", "GTG MQ Whirlpool Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE] = Item(RG_FIRE_TRIAL_MQ_SILVER_RUPEE, Text{ "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee", "Ganon's Castle Fire Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, LOGIC_NONE, RHT_GANONS_CASTLE_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER); itemTable[RG_FIRE_TRIAL_MQ_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 6f140b9bdab..0124d44c8fa 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5137,7 +5137,9 @@ typedef enum { RHT_SPIRIT_GATE_SILVER_RUPEE, RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RHT_SPIRIT_BOULDER_SILVER_RUPEE, + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RHT_FOREST_TRIAL_SILVER_RUPEE, @@ -5399,7 +5401,7 @@ typedef enum { RHT_DC_SILVER_RUPEE, RHT_ICE_CAVERN_SILVER_RUPEE, RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE, - RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE, + RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE, RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RHT_SHADOW_TEMPLE_SILVER_RUPEE, RHT_GANONS_CASTLE_SILVER_RUPEE, From bc992a417fbf716728fe0d9ffef1e9040826d9e8 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 20:40:16 -0400 Subject: [PATCH 25/41] Apply clang-formatting --- .../Enhancements/randomizer/3drando/fill.cpp | 17 +- .../randomizer/3drando/item_pool.cpp | 8 +- .../randomizer/3drando/starting_inventory.cpp | 3 +- .../randomizer/ShuffleSilverRupees.cpp | 998 ++++++++++++++---- .../randomizer/ShuffleSilverRupees.h | 7 +- soh/soh/Enhancements/randomizer/context.h | 8 +- soh/soh/Enhancements/randomizer/dungeon.cpp | 1 - .../randomizer/option_descriptions.cpp | 6 +- .../Enhancements/randomizer/randomizer.cpp | 15 +- soh/soh/Enhancements/randomizer/settings.cpp | 112 +- soh/soh/Enhancements/randomizer/static_data.h | 28 +- soh/soh/OTRGlobals.cpp | 3 +- soh/soh/SaveManager.cpp | 7 +- 13 files changed, 921 insertions(+), 292 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/fill.cpp b/soh/soh/Enhancements/randomizer/3drando/fill.cpp index f85d90664f9..15f0597011f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/fill.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/fill.cpp @@ -1069,9 +1069,8 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) { // randomize Silver Rupees if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_OWN_DUNGEON)) { - auto dungeonSilverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { - return dungeon->ContainsSilverRupee(i); - }); + auto dungeonSilverRupees = FilterAndEraseFromPool( + ItemPool, [dungeon](const RandomizerGet i) { return dungeon->ContainsSilverRupee(i); }); AddElementsToPool(dungeonItems, dungeonSilverRupees); } @@ -1140,16 +1139,14 @@ static void RandomizeDungeonItems() { FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; }); AddElementsToPool(overworldItems, ganonBossKey); } - + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_ANY_DUNGEON)) { - auto silverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { - return dungeon->ContainsSilverRupee(i); - }); + auto silverRupees = FilterAndEraseFromPool( + ItemPool, [dungeon](const RandomizerGet i) { return dungeon->ContainsSilverRupee(i); }); AddElementsToPool(anyDungeonItems, silverRupees); } else if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_OVERWORLD)) { - auto silverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i) { - return dungeon->ContainsSilverRupee(i); - }); + auto silverRupees = FilterAndEraseFromPool( + ItemPool, [dungeon](const RandomizerGet i) { return dungeon->ContainsSilverRupee(i); }); AddElementsToPool(overworldItems, silverRupees); } } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 0fb098e2f62..199e4d77c13 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1287,10 +1287,10 @@ void GenerateItemPool() { AddItemToMainPool(RG_BOTTOMLESS_SILVER_RUPEE_POUCH); } - if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { - if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { - AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); - } + if (ctx->GetOption(RSK_ITEM_POOL).Is(RO_ITEM_POOL_PLENTIFUL)) { + if (ctx->GetOption(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD)) { + AddItemToPool(PendingJunkPool, RG_GERUDO_MEMBERSHIP_CARD); + } } // Replace ice traps with junk from the pending junk pool if necessary diff --git a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp index eaa4ee36284..69b85a3e8cd 100644 --- a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp @@ -67,7 +67,8 @@ void GenerateStartingInventory() { if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_DUNGEON_ITEM_LOC_STARTWITH)) { for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { - ctx->GetSilverRupeeCounter(static_cast(i)).IncrementCollected(ctx->GetSilverRupeeCounter(static_cast(i)).GetTotal()); + ctx->GetSilverRupeeCounter(static_cast(i)) + .IncrementCollected(ctx->GetSilverRupeeCounter(static_cast(i)).GetTotal()); } } diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 5f21cadd565..2cf16a64ec8 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -14,7 +14,8 @@ extern PlayState* gPlayState; CustomMessage GetSilverRupeeItemMessage(uint16_t rgid) { CustomMessage messageEntry; if (rgid >= RG_SILVER_RUPEE_FIRST && rgid <= RG_SILVER_RUPEE_LAST) { - messageEntry = CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST); + messageEntry = + CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST); auto ctx = OTRGlobals::Instance->gRandoContext; bool complete = ctx->GetSilverRupeeCounter(static_cast(rgid)).AllCollected(); if (complete) { @@ -24,7 +25,9 @@ CustomMessage GetSilverRupeeItemMessage(uint16_t rgid) { messageEntry.Replace("[[count_text]]", CustomMessage("You have collected %g[[count]]%w of them so far")); messageEntry.Replace("[[count]]", std::to_string(srCount)); } - messageEntry.Replace("[[rupee_name]]", CustomMessage(Rando::StaticData::RetrieveItem(static_cast(rgid)).GetName())); + messageEntry.Replace( + "[[rupee_name]]", + CustomMessage(Rando::StaticData::RetrieveItem(static_cast(rgid)).GetName())); messageEntry.AutoFormat(); } return messageEntry; @@ -56,15 +59,17 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { // the same X and Z coordinates. We have to make an exception here // and look them up by X and Y coordinates instead. if (sceneNum == SCENE_SHADOW_TEMPLE && param1 == 2110 && param2 == 3372) { - param2 =(int16_t)pos.y; + param2 = (int16_t)pos.y; } - Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor(ACTOR_EN_G_SWITCH, sceneNum, TWO_ACTOR_PARAMS(param1, param2)); + Rando::Location* location = OTRGlobals::Instance->gRandomizer->GetCheckObjectFromActor( + ACTOR_EN_G_SWITCH, sceneNum, TWO_ACTOR_PARAMS(param1, param2)); if (location->GetRandomizerCheck() == RC_UNKNOWN_CHECK) { LUSLOG_WARN("SilverRupeeIdentity did not receive a valid RC value (%d).", location->GetRandomizerCheck()); assert(false); } else { srIdentity.index.randomizerCheck = location->GetRandomizerCheck(); - srIdentity.itemEntry = OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.index.randomizerCheck, true, GI_NONE); + srIdentity.itemEntry = + OTRGlobals::Instance->gRandoContext->GetFinalGIEntry(srIdentity.index.randomizerCheck, true, GI_NONE); srIdentity.randomizerInf = static_cast(location->GetCollectionCheck().flag); } return srIdentity; @@ -72,7 +77,7 @@ SilverRupeeIdentity IdentifySilverRupee(Vec3f_ pos) { std::unordered_map Rando::StaticData::silverTrackerMap = { { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 328 }, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE }, - { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 329 }, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE }, + { { SCENE_ICE_CAVERN, RCQUEST_VANILLA, 329 }, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE }, { { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, 351 }, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE }, { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 348 }, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE }, { { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, 332 }, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE }, @@ -112,7 +117,10 @@ void EnGSwitch_RandomizerInit(void* actor) { } ObjectExtension::GetInstance().Set(actor, std::move(srIdentity)); } else if (srActor->type == ENGSWITCH_SILVER_TRACKER) { - Rando::Identifier identifier = {static_cast(gPlayState->sceneNum), ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ : RCQUEST_VANILLA, srActor->actor.params}; + Rando::Identifier identifier = { static_cast(gPlayState->sceneNum), + ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ + : RCQUEST_VANILLA, + srActor->actor.params }; srIdentity.index.randomizerGet = Rando::StaticData::silverTrackerMap.at(identifier); ObjectExtension::GetInstance().Set(actor, std::move(srIdentity)); } else { @@ -138,7 +146,8 @@ void RegisterShuffleSilverRupees() { // we run this every frame in case one of the rupees for a room // is randomized into the same room. Without this we'd need to // reload the scene after collecting it to unlock the door. - if (OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(srIdentity->index.randomizerGet).AllCollected()) { + if (OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(srIdentity->index.randomizerGet) + .AllCollected()) { if ((gPlayState->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (srActor->actor.room == 2)) { Flags_SetTempClear(gPlayState, srActor->actor.room); } else { @@ -159,184 +168,802 @@ void RegisterShuffleSilverRupees() { static RegisterShipInitFunc initFunc(RegisterShuffleSilverRupees, { "IS_RANDO" }); void Rando::StaticData::RegisterSilverRupeeLocations() { - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); - locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); - - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); - locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); - - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Basement Silver Rupee 1", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Basement Silver Rupee 2", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Basement Silver Rupee 3", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Basement Silver Rupee 4", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); - locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Basement Silver Rupee 5", RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); - - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); - locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); - - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); - - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1] = Location::Base( + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "Spinning Blades Silver Rupee 1", + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2] = Location::Base( + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "Spinning Blades Silver Rupee 2", + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3] = Location::Base( + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "Spinning Blades Silver Rupee 3", + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4] = Location::Base( + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "Spinning Blades Silver Rupee 4", + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5] = Location::Base( + RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "Spinning Blades Silver Rupee 5", + RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5)); + + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1] = Location::Base( + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "Sliding Puzzle Silver Rupee 1", + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2] = Location::Base( + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "Sliding Puzzle Silver Rupee 2", + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3] = Location::Base( + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "Sliding Puzzle Silver Rupee 3", + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4] = Location::Base( + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "Sliding Puzzle Silver Rupee 4", + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4)); + locationTable[RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5] = Location::Base( + RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_ICE_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "Sliding Puzzle Silver Rupee 5", + RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5)); + + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1] = Location::Base( + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, + ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "Basement Silver Rupee 1", + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2] = Location::Base( + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, + ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "Basement Silver Rupee 2", + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3] = Location::Base( + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, + ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "Basement Silver Rupee 3", + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4] = Location::Base( + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, + ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "Basement Silver Rupee 4", + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4)); + locationTable[RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5] = Location::Base( + RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_BOTTOM_OF_THE_WELL, + ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "Basement Silver Rupee 5", + RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1887, -2134), "Boulder Maze Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1627, -1462), "Boulder Maze Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1579, -999), "Boulder Maze Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 4", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1332, -992), "Boulder Maze Silver Rupee 5", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1437, -2193), "Lava Room Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1558, -1370), "Lava Room Silver Rupee 4", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1320, -1248), "Lava Room Silver Rupee 5", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2160, -1315), "Whirlpool Room Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2078, -1458), "Whirlpool Room Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2453, -1612), "Whirlpool Room Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2497, -1465), "Whirlpool Room Silver Rupee 4", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2308, -1464), "Whirlpool Room Silver Rupee 5", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_1] = Location::Base( + RC_SPIRIT_GATE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_2] = Location::Base( + RC_SPIRIT_GATE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_3] = Location::Base( + RC_SPIRIT_GATE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_4] = Location::Base( + RC_SPIRIT_GATE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_GATE_SILVER_RUPEE_5] = Location::Base( + RC_SPIRIT_GATE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, + RG_SPIRIT_GATE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_1] = Location::Base( + RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, + RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_2] = Location::Base( + RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, + RG_SPIRIT_BEAMOS_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_3] = + Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), + "Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_4] = + Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), + "Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BEAMOS_SILVER_RUPEE_5] = + Location::Base(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), + "Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_1] = + Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), + "Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_2] = + Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), + "Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_3] = + Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), + "Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_4] = + Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), + "Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_BOULDER_SILVER_RUPEE_5] = + Location::Base(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), + "Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_SCYTHE_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 1", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_SCYTHE_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "Spinning Scythe Silver Rupee 2", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_SCYTHE_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "Spinning Scythe Silver Rupee 3", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_SCYTHE_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_SCYTHE_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_SCYTHE_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 5", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "Outside Spike Rain Room Silver Rupee 1", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "Outside Spike Rain Room Silver Rupee 2", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "Outside Spike Rain Room Silver Rupee 3", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "Outside Spike Rain Room Silver Rupee 4", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Room Silver Rupee 5", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Room Silver Rupee 1", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Room Silver Rupee 2", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Room Silver Rupee 3", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Room Silver Rupee 4", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Room Silver Rupee 5", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_1] = + Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), + "Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_2] = + Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), + "Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_3] = + Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), + "Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_4] = + Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), + "Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FOREST_TRIAL_SILVER_RUPEE_5] = + Location::Base(RC_FOREST_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), + "Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_1] = + Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), + "Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_2] = + Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), + "Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_3] = + Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), + "Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_4] = + Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), + "Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_SILVER_RUPEE_5] = + Location::Base(RC_FIRE_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), + "Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_1] = + Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), + "Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_2] = + Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), + "Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_3] = + Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), + "Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_4] = + Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), + "Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_TRIAL_SILVER_RUPEE_5] = + Location::Base(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), + "Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_1] = + Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_1, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), + "Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_2] = + Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_2, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), + "Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_3] = + Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_3, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), + "Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_4] = + Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_4, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), + "Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4)); + locationTable[RC_LIGHT_TRIAL_SILVER_RUPEE_5] = + Location::Base(RC_LIGHT_TRIAL_SILVER_RUPEE_5, RCQUEST_VANILLA, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), + "Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5)); + + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1] = + Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "Silver Rupee 1", + RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2] = + Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "Silver Rupee 2", + RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3] = + Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "Silver Rupee 3", + RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4] = + Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "Silver Rupee 4", + RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5] = + Location::Base(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_DODONGOS_CAVERN, + ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "Silver Rupee 5", + RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "Spinning Scythe Silver Rupee 1", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "Spinning Scythe Silver Rupee 2", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "Spinning Scythe Silver Rupee 3", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "Spinning Scythe Silver Rupee 4", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", + RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "Invisible Scythe Silver Rupee 1", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "Invisible Scythe Silver Rupee 2", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "Invisible Scythe Silver Rupee 3", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "Invisible Scythe Silver Rupee 4", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "Invisible Scythe Silver Rupee 5", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "Invisible Scythe Silver Rupee 6", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "Invisible Scythe Silver Rupee 7", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "Invisible Scythe Silver Rupee 8", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "Invisible Scythe Silver Rupee 9", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "Invisible Scythe Silver Rupee 10", + RHT_SHADOW_INVISIBLE_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10)); + + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "Outside Spike Rain Silver Rupee 1", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "Outside Spike Rain Silver Rupee 2", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2)); // The following two locations have the same X and Z coordinates, so use X and Y for the params instead. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -970), "Outside Spike Rain Silver Rupee 3", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, -1092), "Outside Spike Rain Silver Rupee 4", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4)); // Back to X and Z coordinates for the params. - locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); - locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); - - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); - locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); - - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); - locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); - - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "Fire Trial MQ Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "Fire Trial MQ Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), "Fire Trial MQ Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "Fire Trial MQ Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "Fire Trial MQ Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "Water Trial MQ Silver Rupee 1", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "Water Trial MQ Silver Rupee 2", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "Water Trial MQ Silver Rupee 3", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "Water Trial MQ Silver Rupee 4", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "Water Trial MQ Silver Rupee 5", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); - - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "Shadow Trial MQ Silver Rupee 1", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "Shadow Trial MQ Silver Rupee 2", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "Shadow Trial MQ Silver Rupee 3", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "Shadow Trial MQ Silver Rupee 4", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); - locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "Shadow Trial MQ Silver Rupee 5", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "Outside Spike Rain Silver Rupee 5", + RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "Invisible Spikes Silver Rupee 1", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "Invisible Spikes Silver Rupee 2", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "Invisible Spikes Silver Rupee 3", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "Invisible Spikes Silver Rupee 4", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "Invisible Spikes Silver Rupee 5", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "Invisible Spikes Silver Rupee 6", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "Invisible Spikes Silver Rupee 7", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "Invisible Spikes Silver Rupee 8", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "Invisible Spikes Silver Rupee 9", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9)); + locationTable[RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10] = Location::Base( + RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "Invisible Spikes Silver Rupee 10", + RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10)); + + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1] = + Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "Lobby Silver Rupee 1", + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2] = + Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -574), "Lobby Silver Rupee 2", + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3] = + Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "Lobby Silver Rupee 3", + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4] = + Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "Lobby Silver Rupee 4", + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4)); + locationTable[RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5] = + Location::Base(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SPIRIT_TEMPLE, + ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "Lobby Silver Rupee 5", + RHT_SPIRIT_LOBBY_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1261, -923), "Boulder Maze Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1886, -956), "Boulder Maze Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1480, -1000), "Boulder Maze Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1542, -1476), "Boulder Maze Silver Rupee 4", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(-1245, -2112), "Boulder Maze Silver Rupee 5", + RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1317, -1243), "Lava Room Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1083, -1374), "Lava Room Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1560, -1380), "Lava Room Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1404, -1653), "Lava Room Silver Rupee 4", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1134, -1841), "Lava Room Silver Rupee 5", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(1560, -1861), "Lava Room Silver Rupee 6", + RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_6)); + + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2160, -1315), "Toilet Room Silver Rupee 1", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2302, -1464), "Toilet Room Silver Rupee 2", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2)); + locationTable[RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3] = + Location::Base(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, + RCAREA_GERUDO_TRAINING_GROUND, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, + TWO_ACTOR_PARAMS(2453, -1612), "Toilet Room Silver Rupee 3", + RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3)); + + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1] = + Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), + "Fire Trial MQ Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2] = + Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), + "Fire Trial MQ Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3] = + Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -2254), + "Fire Trial MQ Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4] = + Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), + "Fire Trial MQ Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5] = + Location::Base(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), + "Fire Trial MQ Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_1] = + Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), + "Water Trial MQ Silver Rupee 1", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_2] = + Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), + "Water Trial MQ Silver Rupee 2", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_3] = + Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), + "Water Trial MQ Silver Rupee 3", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_4] = + Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), + "Water Trial MQ Silver Rupee 4", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_WATER_TRIAL_MQ_SILVER_RUPEE_5] = + Location::Base(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), + "Water Trial MQ Silver Rupee 5", RHT_WATER_TRIAL_SILVER_RUPEE, RG_WATER_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5)); + + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1] = + Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), + "Shadow Trial MQ Silver Rupee 1", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2] = + Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), + "Shadow Trial MQ Silver Rupee 2", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3] = + Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), + "Shadow Trial MQ Silver Rupee 3", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4] = + Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), + "Shadow Trial MQ Silver Rupee 4", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4)); + locationTable[RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5] = + Location::Base(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_GANONS_CASTLE, + ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), + "Shadow Trial MQ Silver Rupee 5", RHT_SHADOW_TRIAL_SILVER_RUPEE, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, + SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5)); } static ObjectExtension::Register RegisterSilverRupeeIdentity; @@ -345,7 +972,8 @@ static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterSilverRupeeL Rando::SilverRupeeCounter::SilverRupeeCounter() : mCollected(0), mTotal(0), mRandoGet(RG_NONE) { } -Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet) : mCollected(0), mTotal(total), mRandoGet(randoGet) { +Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet) + : mCollected(0), mTotal(total), mRandoGet(randoGet) { } uint8_t Rando::SilverRupeeCounter::GetCollected() const { diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index 7caf3152389..b0e7317d8c5 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -18,7 +18,7 @@ typedef struct SilverRupeeIdentity { CustomMessage GetSilverRupeeItemMessage(uint16_t rgid); namespace Rando { class SilverRupeeCounter { -public: + public: SilverRupeeCounter(); SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); @@ -26,7 +26,8 @@ class SilverRupeeCounter { uint8_t GetTotal() const; void IncrementCollected(uint8_t amount = 1); bool AllCollected(); -private: + + private: uint8_t mCollected = 0; uint8_t mTotal; RandomizerGet mRandoGet; @@ -34,4 +35,4 @@ class SilverRupeeCounter { } // namespace Rando #endif -#endif //SHUFLESILVERRUPEES_H \ No newline at end of file +#endif // SHUFLESILVERRUPEES_H \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index 95245a852b6..6a0c92af5a5 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -177,11 +177,11 @@ class Context { void SetHash(std::string hash); /** - * @brief Gets a reference to the silver rupee counter corresponding to the + * @brief Gets a reference to the silver rupee counter corresponding to the * Given RandomizerGet value. - * - * @param rg - * @return SilverRupeeCounter& + * + * @param rg + * @return SilverRupeeCounter& */ SilverRupeeCounter& GetSilverRupeeCounter(RandomizerGet rg); diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 91bb6eb6592..4be5f4c4620 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -159,7 +159,6 @@ bool DungeonInfo::ContainsSilverRupee(RandomizerGet silverRupee) const { } } return false; - } Dungeons::Dungeons() { diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 3fd9576db9c..324569a4013 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -760,11 +760,13 @@ void Settings::CreateOptionDescriptions() { "Shuffles 8 boss souls (one for each blue warp dungeon). A boss will not appear until you collect its " "respective soul." "\n\"On + Ganon\" will also hide Ganon and Ganondorf behind a boss soul."; - mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES] = "Shuffle Silver Rupees out of their usual locations in dungeons. " + mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES] = + "Shuffle Silver Rupees out of their usual locations in dungeons. " "They will be replaced with new items and can be found at other locations in the game. The doors they " "previously controlled will be opened when all of the Silver Rupees that used to be in that room have been " "found wherever they have been shuffled to."; - mOptionDescriptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] = "Adds a special item to the pool that causes all " + mOptionDescriptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] = + "Adds a special item to the pool that causes all " "Silver Rupee puzzles to be completed regardless of how many Silver Rupees you have collected."; } } // namespace Rando diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 528dd62b5d9..847451a7294 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -4678,14 +4678,12 @@ template void CreateGetItemMessages(const std::arrayCreateMessage( Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST, - CustomMessage("You got a %c[[rupee_name]]%w! [[count_text]]", TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) - ); + CustomMessage("You got a %c[[rupee_name]]%w! [[count_text]]", TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM)); customMessageManager->CreateMessage( Randomizer::getItemMessageTableID, RG_BOTTOMLESS_SILVER_RUPEE_POUCH, CustomMessage("You found the %cBottomless Silver Rupee Pouch! All Silver Rupee Puzzles are Unlocked", - TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM) - ); + TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM)); } void CreateRupeeMessages() { @@ -6113,12 +6111,15 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { (RandomizerInf)((int)RAND_INF_GUARD_HOUSE_UNLOCKED + ((item - RG_GUARD_HOUSE_KEY) * 2) + 1)); return Return_Item_Entry(giEntry, RG_NONE); } else if (item >= RG_SILVER_RUPEE_FIRST && item <= RG_SILVER_RUPEE_LAST) { - OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(item)).IncrementCollected(); + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(item)) + .IncrementCollected(); return Return_Item_Entry(giEntry, RG_NONE); } else if (item == RG_BOTTOMLESS_SILVER_RUPEE_POUCH) { for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { - int max = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).GetTotal(); - OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).IncrementCollected(max); + int max = + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)).GetTotal(); + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(i)) + .IncrementCollected(max); } return Return_Item_Entry(giEntry, RG_NONE); } diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 1edcaf6bb06..222af28599f 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -1305,33 +1305,31 @@ void Settings::CreateOptions() { WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS_IMGUI] = OptionGroup::SubGroup("Shuffle Dungeon Items", - { - &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], - &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], - &mOptions[RSK_KEYSANITY], - &mOptions[RSK_GERUDO_KEYS], - &mOptions[RSK_BOSS_KEYSANITY], - &mOptions[RSK_GANONS_BOSS_KEY], - &mOptions[RSK_LACS_STONE_COUNT], - &mOptions[RSK_LACS_MEDALLION_COUNT], - &mOptions[RSK_LACS_DUNGEON_COUNT], - &mOptions[RSK_LACS_REWARD_COUNT], - &mOptions[RSK_LACS_TOKEN_COUNT], - &mOptions[RSK_LACS_OPTIONS], - &mOptions[RSK_KEYRINGS], - &mOptions[RSK_KEYRINGS_RANDOM_COUNT], - &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], - &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], - &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], - &mOptions[RSK_KEYRINGS_WATER_TEMPLE], - &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], - &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], - &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], - &mOptions[RSK_KEYRINGS_GTG], - &mOptions[RSK_KEYRINGS_GANONS_CASTLE], - &mOptions[RSK_SHUFFLE_SILVER_RUPEES], - &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] - }, + { &mOptions[RSK_SHUFFLE_DUNGEON_REWARDS], + &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], + &mOptions[RSK_KEYSANITY], + &mOptions[RSK_GERUDO_KEYS], + &mOptions[RSK_BOSS_KEYSANITY], + &mOptions[RSK_GANONS_BOSS_KEY], + &mOptions[RSK_LACS_STONE_COUNT], + &mOptions[RSK_LACS_MEDALLION_COUNT], + &mOptions[RSK_LACS_DUNGEON_COUNT], + &mOptions[RSK_LACS_REWARD_COUNT], + &mOptions[RSK_LACS_TOKEN_COUNT], + &mOptions[RSK_LACS_OPTIONS], + &mOptions[RSK_KEYRINGS], + &mOptions[RSK_KEYRINGS_RANDOM_COUNT], + &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], + &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], + &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], + &mOptions[RSK_KEYRINGS_WATER_TEMPLE], + &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], + &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], + &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], + &mOptions[RSK_KEYRINGS_GTG], + &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + &mOptions[RSK_SHUFFLE_SILVER_RUPEES], + &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] }, WidgetContainerType::COLUMN); mOptionGroups[RSG_ITEMS_IMGUI_TABLE] = OptionGroup::SubGroup("Items", { @@ -1547,32 +1545,30 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_FAIRIES], }); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS] = - OptionGroup("Shuffle Dungeon Items", { - &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], - &mOptions[RSK_KEYSANITY], - &mOptions[RSK_GERUDO_KEYS], - &mOptions[RSK_BOSS_KEYSANITY], - &mOptions[RSK_GANONS_BOSS_KEY], - &mOptions[RSK_LACS_STONE_COUNT], - &mOptions[RSK_LACS_MEDALLION_COUNT], - &mOptions[RSK_LACS_DUNGEON_COUNT], - &mOptions[RSK_LACS_REWARD_COUNT], - &mOptions[RSK_LACS_TOKEN_COUNT], - &mOptions[RSK_LACS_OPTIONS], - &mOptions[RSK_KEYRINGS], - &mOptions[RSK_KEYRINGS_RANDOM_COUNT], - &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], - &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], - &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], - &mOptions[RSK_KEYRINGS_WATER_TEMPLE], - &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], - &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], - &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], - &mOptions[RSK_KEYRINGS_GTG], - &mOptions[RSK_KEYRINGS_GANONS_CASTLE], - &mOptions[RSK_SHUFFLE_SILVER_RUPEES], - &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] - }); + OptionGroup("Shuffle Dungeon Items", { &mOptions[RSK_SHUFFLE_MAPANDCOMPASS], + &mOptions[RSK_KEYSANITY], + &mOptions[RSK_GERUDO_KEYS], + &mOptions[RSK_BOSS_KEYSANITY], + &mOptions[RSK_GANONS_BOSS_KEY], + &mOptions[RSK_LACS_STONE_COUNT], + &mOptions[RSK_LACS_MEDALLION_COUNT], + &mOptions[RSK_LACS_DUNGEON_COUNT], + &mOptions[RSK_LACS_REWARD_COUNT], + &mOptions[RSK_LACS_TOKEN_COUNT], + &mOptions[RSK_LACS_OPTIONS], + &mOptions[RSK_KEYRINGS], + &mOptions[RSK_KEYRINGS_RANDOM_COUNT], + &mOptions[RSK_KEYRINGS_GERUDO_FORTRESS], + &mOptions[RSK_KEYRINGS_FOREST_TEMPLE], + &mOptions[RSK_KEYRINGS_FIRE_TEMPLE], + &mOptions[RSK_KEYRINGS_WATER_TEMPLE], + &mOptions[RSK_KEYRINGS_SPIRIT_TEMPLE], + &mOptions[RSK_KEYRINGS_SHADOW_TEMPLE], + &mOptions[RSK_KEYRINGS_BOTTOM_OF_THE_WELL], + &mOptions[RSK_KEYRINGS_GTG], + &mOptions[RSK_KEYRINGS_GANONS_CASTLE], + &mOptions[RSK_SHUFFLE_SILVER_RUPEES], + &mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH] }); mOptionGroups[RSG_STARTING_ITEMS] = OptionGroup::SubGroup("Items", { &mOptions[RSK_STARTING_OCARINA], &mOptions[RSK_STARTING_KOKIRI_SWORD], &mOptions[RSK_STARTING_DEKU_SHIELD] }); @@ -1808,7 +1804,7 @@ const OptionGroup& Settings::GetOptionGroup(const RandomizerSettingGroupKey key) void Settings::UpdateOptionProperties() { // If statement for No Logic Only options. - if(CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_NO_LOGIC) { + if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_NO_LOGIC) { // RANDOTODO: Remove when logic is implemented for Silver Rupee Shuffle. mOptions[RSK_SHUFFLE_SILVER_RUPEES].Disable("This setting is only available for No Logic runs."); } @@ -2532,8 +2528,10 @@ void Settings::UpdateOptionProperties() { mOptions[RSK_BIG_POES_HINT].Enable(); } - if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), RO_DUNGEON_ITEM_LOC_VANILLA) <= RO_DUNGEON_ITEM_LOC_VANILLA) { - mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Disable("This option is not available unless Silver Rupees are shuffled."); + if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilverRupees"), RO_DUNGEON_ITEM_LOC_VANILLA) <= + RO_DUNGEON_ITEM_LOC_VANILLA) { + mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Disable( + "This option is not available unless Silver Rupees are shuffled."); } else { mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Enable(); } @@ -2820,7 +2818,7 @@ void Context::FinalizeSettings(const std::set& excludedLocation (mOptions[RSK_KEYRINGS_GANONS_CASTLE].Is(RO_KEYRING_FOR_DUNGEON_RANDOM) && Random(0, 2) == 1)) { this->GetDungeon(GANONS_CASTLE)->SetKeyRing(); } - if(mOptions[RSK_SHUFFLE_SILVER_RUPEES].Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { + if (mOptions[RSK_SHUFFLE_SILVER_RUPEES].Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { mOptions[RSK_BOTTOMLESS_SILVER_RUPEE_POUCH].Set(RO_GENERIC_OFF); } } diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 011db27feac..28ab106089b 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -9,7 +9,7 @@ namespace Rando { - struct Identifier { +struct Identifier { SceneID scene; RandomizerCheckQuest quest; int16_t params; @@ -91,20 +91,18 @@ class StaticData { StaticData(); ~StaticData(); }; -} +} // namespace Rando namespace std { - template<> - struct hash { - inline size_t operator()(const Rando::Identifier& id) const { - return hash{}(id.scene) ^ hash{}(id.quest) ^ hash{}(id.params); - } - }; +template <> struct hash { + inline size_t operator()(const Rando::Identifier& id) const { + return hash{}(id.scene) ^ hash{}(id.quest) ^ hash{}(id.params); + } +}; - template<> - struct equal_to { - inline bool operator()(const Rando::Identifier& a, const Rando::Identifier& b) const { - return a.scene == b.scene && a.params == b.params && a.quest == b.quest; - } - }; -} +template <> struct equal_to { + inline bool operator()(const Rando::Identifier& a, const Rando::Identifier& b) const { + return a.scene == b.scene && a.params == b.params && a.quest == b.quest; + } +}; +} // namespace std diff --git a/soh/soh/OTRGlobals.cpp b/soh/soh/OTRGlobals.cpp index 851d6c8adab..b5a02399342 100644 --- a/soh/soh/OTRGlobals.cpp +++ b/soh/soh/OTRGlobals.cpp @@ -2265,7 +2265,8 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) { messageEntry = Randomizer::GetIceTrapMessage(); } else if (player->getItemEntry.getItemId == RG_TRIFORCE_PIECE) { messageEntry = Randomizer::GetTriforcePieceMessage(); - } else if (player->getItemEntry.getItemId >= RG_SILVER_RUPEE_FIRST && player->getItemEntry.getItemId <= RG_SILVER_RUPEE_LAST) { + } else if (player->getItemEntry.getItemId >= RG_SILVER_RUPEE_FIRST && + player->getItemEntry.getItemId <= RG_SILVER_RUPEE_LAST) { messageEntry = GetSilverRupeeItemMessage(player->getItemEntry.getItemId); } else { messageEntry = Randomizer_GetCustomGetItemMessage(player); diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index dda641cc733..41236bb407f 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -256,7 +256,8 @@ void SaveManager::LoadRandomizer() { SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST, [&](size_t i) { size_t value; SaveManager::Instance->LoadData("", value); - randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).IncrementCollected(value); + randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)) + .IncrementCollected(value); }); } @@ -408,7 +409,9 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f }); SaveManager::Instance->SaveArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST, [&](size_t i) { - SaveManager::Instance->SaveData("", randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).GetCollected()); + SaveManager::Instance->SaveData( + "", + randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).GetCollected()); }); } From 499264b335559b361eac1d9660e3ea9c53570043 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 17 Sep 2025 21:25:39 -0400 Subject: [PATCH 26/41] Hopefully fix Linux builds. --- soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 2cf16a64ec8..99ad402a112 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -124,7 +124,7 @@ void EnGSwitch_RandomizerInit(void* actor) { srIdentity.index.randomizerGet = Rando::StaticData::silverTrackerMap.at(identifier); ObjectExtension::GetInstance().Set(actor, std::move(srIdentity)); } else { - LUSLOG_INFO("ENGSWITCH_TARGET_RUPEE or ENGSWITCH_ARCHERY_POT, no Randomizer logic required"); + LUSLOG_INFO("EnGSwitch Actor Type %s, no Randomizer logic required", srActor->type); } } From fe0625de016bcb21f4318ef68e82db63d7707cb9 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 18 Sep 2025 13:33:01 -0400 Subject: [PATCH 27/41] Fix missing hint text for Bottom of the Well Silver Rupees --- .../Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index a7f1a415691..9589c737cba 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -2118,6 +2118,7 @@ void StaticData::HintTable_Init_Item() { hintTextTable[RHT_WALLET_INF] = HintText(CustomMessage("an infinite Wallet", /*german*/"die unendliche Geldbörse", /*french*/"une Bourse sans fond")); hintTextTable[RHT_DC_SILVER_RUPEE] = HintText(CustomMessage("a Dodongo's Cavern Silver Rupee")); + hintTextTable[RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE] = HintText(CustomMessage("a Bottom of the Well Silver Rupee")); hintTextTable[RHT_ICE_CAVERN_SILVER_RUPEE] = HintText(CustomMessage("an Ice Cavern Silver Rupee")); hintTextTable[RHT_BOTTOM_OF_THE_WELL] = HintText(CustomMessage("a Bottom of the Well Silver Rupee")); hintTextTable[RHT_GERUDO_TRAINING_GROUND_SILVER_RUPEE] = HintText(CustomMessage("a Gerudo Training Ground Silver Rupee")); From 94c2032b5821cc7c03b3ba7d2a4c8c34e20c8cf6 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 10:49:02 -0400 Subject: [PATCH 28/41] Fix off by one bug on the silver rupee counters --- soh/soh/Enhancements/randomizer/context.cpp | 1 + soh/soh/Enhancements/randomizer/context.h | 2 +- soh/soh/SaveManager.cpp | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index dabb1fa2908..d0e04d0c311 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -38,6 +38,7 @@ Context::Context() { SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE), SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE), SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE), + SilverRupeeCounter(5, RG_SPIRIT_GATE_SILVER_RUPEE), SilverRupeeCounter(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE), SilverRupeeCounter(5, RG_SPIRIT_BOULDER_SILVER_RUPEE), SilverRupeeCounter(5, RG_SHADOW_SCYTHE_SILVER_RUPEE), diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index 6a0c92af5a5..acfac670204 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -191,7 +191,7 @@ class Context { std::array itemLocationTable = {}; std::array mOptions; std::array mTrickOptions; - std::array mSilverRupeeCounters; + std::array mSilverRupeeCounters; RandoOptionLACSCondition mLACSCondition = RO_LACS_VANILLA; std::shared_ptr mEntranceShuffler; std::shared_ptr mDungeons; diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 41236bb407f..4258fb9c0ff 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -253,7 +253,7 @@ void SaveManager::LoadRandomizer() { randoContext->GetTrickOption(RandomizerTrick(i)).Set(value); }); - SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST, [&](size_t i) { + SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { size_t value; SaveManager::Instance->LoadData("", value); randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)) @@ -408,7 +408,7 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f SaveManager::Instance->SaveData("", randoContext->GetTrickOption(RandomizerTrick(i)).Get()); }); - SaveManager::Instance->SaveArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST, [&](size_t i) { + SaveManager::Instance->SaveArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { SaveManager::Instance->SaveData( "", randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).GetCollected()); From e1df242fa954bada04ab7112a223ed7528b28df3 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 10:49:25 -0400 Subject: [PATCH 29/41] Adds save editor sliders for silver rupee counts --- .../Enhancements/debugger/debugSaveEditor.cpp | 25 +++++++++++++++++++ .../randomizer/ShuffleSilverRupees.cpp | 6 +++++ .../randomizer/ShuffleSilverRupees.h | 1 + 3 files changed, 32 insertions(+) diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 7b514a16c5a..2f3e2d8c772 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1675,6 +1675,25 @@ void ResetBaseOptions() { .Tooltip(""); } +void DrawRandomizerTab() { + auto ctx = OTRGlobals::Instance->gRandoContext; + ImGui::Text("Silver Rupee Counts"); + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES)) { + for (int32_t i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { + RandomizerGet rgid = static_cast(i); + int32_t collected = ctx->GetSilverRupeeCounter(rgid).GetCollected(); + PushStyleSlider(THEME_COLOR); + if (UIWidgets::SliderInt(Rando::StaticData::RetrieveItem(rgid).GetName().GetEnglish().c_str(), &collected, UIWidgets::IntSliderOptions().DefaultValue(0).Max(ctx->GetSilverRupeeCounter(rgid).GetTotal()).Min(0).ShowButtons(true))) { + ctx->GetSilverRupeeCounter(rgid).SetCollected(collected); + } + PopStyleSlider(); + } + } else { + ImGui::Text("Silver Rupees are not shuffled"); + } + UIWidgets::PaddedSeparator(); +} + void SaveEditorWindow::DrawElement() { PushStyleTabs(THEME_COLOR); ImGui::PushFont(OTRGlobals::Instance->fontMonoLarger); @@ -1717,6 +1736,12 @@ void SaveEditorWindow::DrawElement() { ImGui::EndTabItem(); } + ResetBaseOptions(); + if (ImGui::BeginTabItem("Randomizer")) { + DrawRandomizerTab(); + ImGui::EndTabItem(); + } + ImGui::EndTabBar(); } diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 99ad402a112..b447a3887d9 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -991,3 +991,9 @@ void Rando::SilverRupeeCounter::IncrementCollected(uint8_t amount) { bool Rando::SilverRupeeCounter::AllCollected() { return GetCollected() == GetTotal(); } + +void Rando::SilverRupeeCounter::SetCollected(uint8_t newCollected) { + if (newCollected >= 0 && newCollected <= GetTotal()) { + mCollected = newCollected; + } +} diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index b0e7317d8c5..beed8c1eb2c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -26,6 +26,7 @@ class SilverRupeeCounter { uint8_t GetTotal() const; void IncrementCollected(uint8_t amount = 1); bool AllCollected(); + void SetCollected(uint8_t newCollected); private: uint8_t mCollected = 0; From afb1d6c9c6d74f6a76625cec8e90a30aeb05492c Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 11:15:38 -0400 Subject: [PATCH 30/41] Fixed option not enabling when Logic is switched to No Logic --- soh/soh/Enhancements/randomizer/settings.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 222af28599f..c98b774f8c5 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -1807,7 +1807,10 @@ void Settings::UpdateOptionProperties() { if (CVarGetInteger(CVAR_RANDOMIZER_SETTING("LogicRules"), RO_LOGIC_GLITCHLESS) != RO_LOGIC_NO_LOGIC) { // RANDOTODO: Remove when logic is implemented for Silver Rupee Shuffle. mOptions[RSK_SHUFFLE_SILVER_RUPEES].Disable("This setting is only available for No Logic runs."); + } else { + mOptions[RSK_SHUFFLE_SILVER_RUPEES].Enable(); } + // Default to hiding bridge opts and the extra sliders. mOptions[RSK_RAINBOW_BRIDGE].AddFlag(IMFLAG_SEPARATOR_BOTTOM); mOptions[RSK_BRIDGE_OPTIONS].Hide(); From 300316163cfeb0fbd719b6c5afdca45d93566f5e Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 11:25:05 -0400 Subject: [PATCH 31/41] Prevent some MQ Dungeon spoiling I can't give people Dodongo's Cavern Silver Rupees without spoiling Dodongo's Cavern is MQ, but I can give Shadow Temple Outside Spike Rain Silver Rupees without spoiling Shadow is MQ, for example. --- soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index b447a3887d9..333dca897c4 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -28,6 +28,8 @@ CustomMessage GetSilverRupeeItemMessage(uint16_t rgid) { messageEntry.Replace( "[[rupee_name]]", CustomMessage(Rando::StaticData::RetrieveItem(static_cast(rgid)).GetName())); + // Remove the "MQ" text from the item name to avoid *some* MQ dungeon spoiling. + messageEntry.Replace(" MQ", CustomMessage("")); messageEntry.AutoFormat(); } return messageEntry; From 93acd235a48bb114dca2918b9c981d01d59f41c6 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 14:16:05 -0400 Subject: [PATCH 32/41] Adds Silver Rupees to ImGui Item Tracker --- .../randomizer/randomizer_item_tracker.cpp | 110 ++++++++++++++++++ .../randomizer/randomizer_item_tracker.h | 1 + soh/soh/SohGui/ImGuiUtils.cpp | 12 ++ 3 files changed, 123 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 81144c7a704..1aea54a994e 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -25,6 +25,7 @@ extern PlayState* gPlayState; #include "textures/icon_item_static/icon_item_static.h" #include "textures/icon_item_24_static/icon_item_24_static.h" +#include } void DrawEquip(ItemTrackerItem item); @@ -159,6 +160,37 @@ std::vector overworldKeyItems = { ITEM_TRACKER_ITEM_CUSTOM(RG_FISHING_HOLE_KEY, ITEM_KEY_SMALL, ITEM_KEY_SMALL, 0, DrawItem), }; +std::vector silverRupeeItems = { + ITEM_TRACKER_ITEM_CUSTOM(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_GATE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_BEAMOS_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_FOREST_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_FIRE_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_LIGHT_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_FIRE_TRIAL_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_WATER_TRIAL_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), +}; + std::vector fishingPoleItems = { ITEM_TRACKER_ITEM(ITEM_FISHING_POLE, 0, DrawItem) }; std::vector itemTrackerDungeonsWithMapsHorizontal = { @@ -698,6 +730,28 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { ImGui::PushStyleColor(ImGuiCol_Text, maxColor); ImGui::Text("%s", maxString.c_str()); ImGui::PopStyleColor(); + } else if (item.id >= RG_SILVER_RUPEE_FIRST && item.id <= RG_SILVER_RUPEE_LAST && IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA && IsValidSaveFile()) { + RandomizerGet rgid = static_cast(item.id); + std::string current = ""; + std::string max = ""; + uint8_t rupeesMax = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetTotal(); + ImU32 currentColor = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).AllCollected() + ? IM_COL_GREEN + : IM_COL_WHITE; + ImU32 maxColor = IM_COL_GREEN; + current += std::to_string(OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetCollected()); + current += "/"; + max += std::to_string(rupeesMax); + ImGui::SetCursorScreenPos( + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((current + max).c_str()).x / 2), p.y - 14) + ); + ImGui::PushStyleColor(ImGuiCol_Text, currentColor); + ImGui::Text("%d/", OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetCollected()); + ImGui::PopStyleColor(); + ImGui::SameLine(0, 0.0f); + ImGui::PushStyleColor(ImGuiCol_Text, maxColor); + ImGui::Text("%d", rupeesMax); + ImGui::PopStyleColor(); } else { ImGui::SetCursorScreenPos(ImVec2(p.x, p.y - 14)); ImGui::Text(""); @@ -985,6 +1039,38 @@ void DrawItem(ItemTrackerItem item) { hasItem = Flags_GetRandomizerInf(RAND_INF_FISHING_HOLE_KEY_OBTAINED); itemName = "Fishing Hole Key"; break; + case RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE: + case RG_ICE_CAVERN_SLIDING_SILVER_RUPEE: + case RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE: + case RG_SPIRIT_GATE_SILVER_RUPEE: + case RG_SPIRIT_BEAMOS_SILVER_RUPEE: + case RG_SPIRIT_BOULDER_SILVER_RUPEE: + case RG_SHADOW_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE: + case RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE: + case RG_FOREST_TRIAL_SILVER_RUPEE: + case RG_FIRE_TRIAL_SILVER_RUPEE: + case RG_SPIRIT_TRIAL_SILVER_RUPEE: + case RG_LIGHT_TRIAL_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE: + case RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE: + case RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE: + case RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE: + case RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE: + case RG_FIRE_TRIAL_MQ_SILVER_RUPEE: + case RG_WATER_TRIAL_MQ_SILVER_RUPEE: + case RG_SHADOW_TRIAL_MQ_SILVER_RUPEE: + actualItemId = item.id; + hasItem = OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA; + itemName = Rando::StaticData::RetrieveItem(static_cast(actualItemId)).GetName().GetForLanguage(CVarGetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG)); + break; } if (GameInteractor::IsSaveLoaded() && @@ -1493,6 +1579,14 @@ void UpdateVectors() { mainWindowItems.insert(mainWindowItems.end(), overworldKeyItems.begin(), overworldKeyItems.end()); } + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.SilverRupees"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_MAIN_WINDOW) { + while (mainWindowItems.size() % 6) { + mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem)); + } + mainWindowItems.insert(mainWindowItems.end(), silverRupeeItems.begin(), silverRupeeItems.end()); + } + shouldUpdateVectors = false; } @@ -1674,6 +1768,13 @@ void ItemTrackerWindow::DrawElement() { EndFloatingWindows(); } + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.SilverRupees"), SECTION_DISPLAY_HIDDEN) == + SECTION_DISPLAY_SEPARATE) { + BeginFloatingWindows("Silver Rupee Tracker"); + DrawItemsInRows(silverRupeeItems); + EndFloatingWindows(); + } + if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.FishingPole"), SECTION_DISPLAY_EXTENDED_HIDDEN) == SECTION_DISPLAY_EXTENDED_SEPARATE) { BeginFloatingWindows("Fishing Pole Tracker"); @@ -1982,6 +2083,15 @@ void ItemTrackerSettingsWindow::DrawElement() { shouldUpdateVectors = true; } + if (CVarCombobox("Silver Rupees", CVAR_TRACKER_ITEM("DisplayType.SilverRupees"), displayTypes, + ComboboxOptions() + .DefaultIndex(SECTION_DISPLAY_HIDDEN) + .ComponentAlignment(ComponentAlignments::Right) + .LabelPosition(LabelPositions::Far) + .Color(THEME_COLOR))) { + shouldUpdateVectors = true; + } + if (CVarCombobox("Total Checks", "gTrackers.ItemTracker.TotalChecks.DisplayType", minimalDisplayTypes, ComboboxOptions() .DefaultIndex(SECTION_DISPLAY_MINIMAL_HIDDEN) diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h index 85a2b63a030..b800c8929f0 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.h @@ -37,6 +37,7 @@ static std::vector itemTrackerWindowIDs = { "Item Tracker", "Boss Soul Tracker", "Ocarina Button Tracker", "Overworld Key Tracker", + "Silver Rupee Tracker", "Fishing Pole Tracker", "Personal Notes", "Total Checks" }; diff --git a/soh/soh/SohGui/ImGuiUtils.cpp b/soh/soh/SohGui/ImGuiUtils.cpp index ab3d8f59c52..a7f03c8ede7 100644 --- a/soh/soh/SohGui/ImGuiUtils.cpp +++ b/soh/soh/SohGui/ImGuiUtils.cpp @@ -133,6 +133,10 @@ std::map gregMapping = { { ITEM_RUPEE_GREEN, { ITEM_RUPEE_GREEN, "ITEM_RUPEE_GREEN", "ITEM_RUPEE_GREEN_Faded", gRupeeCounterIconTex } } }; +std::map silverRupeeMapping = { + { ITEM_RUPEE_GREEN, { ITEM_RUPEE_GREEN, "ITEM_RUPEE_SILVER", "ITEM_RUPEE_SILVER_Faded", gRupeeCounterIconTex } } +}; + std::map triforcePieceMapping = { { RG_TRIFORCE_PIECE, { RG_TRIFORCE_PIECE, "RG_TRIFORCE_PIECE", "RG_TRIFORCE_PIECE_Faded", gTriforcePieceTex } } }; @@ -216,6 +220,14 @@ void RegisterImGuiItemIcons() { entry.second.texturePath, gregFadedGreen); } + for (const auto& entry : silverRupeeMapping) { + ImVec4 silver = ImVec4(0.7f, 0.7f, 0.7f, 1.0f); + ImVec4 silverFaded = silver; + silverFaded.w = 0.3f; + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, silver); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, silverFaded); + } + for (const auto& entry : triforcePieceMapping) { Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, ImVec4(1, 1, 1, 1)); From 8a83e4b531dea3613497d2ad21ccd05f708ecd1e Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 17:13:19 -0400 Subject: [PATCH 33/41] Formatting bump --- .../Enhancements/debugger/debugSaveEditor.cpp | 7 ++- .../randomizer/randomizer_item_tracker.cpp | 55 ++++++++++++------- soh/soh/SohGui/ImGuiUtils.cpp | 6 +- 3 files changed, 46 insertions(+), 22 deletions(-) diff --git a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp index 2f3e2d8c772..098ba066cdf 100644 --- a/soh/soh/Enhancements/debugger/debugSaveEditor.cpp +++ b/soh/soh/Enhancements/debugger/debugSaveEditor.cpp @@ -1683,7 +1683,12 @@ void DrawRandomizerTab() { RandomizerGet rgid = static_cast(i); int32_t collected = ctx->GetSilverRupeeCounter(rgid).GetCollected(); PushStyleSlider(THEME_COLOR); - if (UIWidgets::SliderInt(Rando::StaticData::RetrieveItem(rgid).GetName().GetEnglish().c_str(), &collected, UIWidgets::IntSliderOptions().DefaultValue(0).Max(ctx->GetSilverRupeeCounter(rgid).GetTotal()).Min(0).ShowButtons(true))) { + if (UIWidgets::SliderInt(Rando::StaticData::RetrieveItem(rgid).GetName().GetEnglish().c_str(), &collected, + UIWidgets::IntSliderOptions() + .DefaultValue(0) + .Max(ctx->GetSilverRupeeCounter(rgid).GetTotal()) + .Min(0) + .ShowButtons(true))) { ctx->GetSilverRupeeCounter(rgid).SetCollected(collected); } PopStyleSlider(); diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 1aea54a994e..84fca3ba316 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -161,30 +161,42 @@ std::vector overworldKeyItems = { }; std::vector silverRupeeItems = { - ITEM_TRACKER_ITEM_CUSTOM(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_GATE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_BEAMOS_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_FOREST_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_FIRE_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_LIGHT_TRIAL_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, + 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), - ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), + ITEM_TRACKER_ITEM_CUSTOM(RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, + DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_FIRE_TRIAL_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), ITEM_TRACKER_ITEM_CUSTOM(RG_WATER_TRIAL_MQ_SILVER_RUPEE, ITEM_RUPEE_SILVER, ITEM_RUPEE_SILVER, 0, DrawItem), @@ -730,21 +742,23 @@ void DrawItemCount(ItemTrackerItem item, bool hideMax) { ImGui::PushStyleColor(ImGuiCol_Text, maxColor); ImGui::Text("%s", maxString.c_str()); ImGui::PopStyleColor(); - } else if (item.id >= RG_SILVER_RUPEE_FIRST && item.id <= RG_SILVER_RUPEE_LAST && IS_RANDO && OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA && IsValidSaveFile()) { + } else if (item.id >= RG_SILVER_RUPEE_FIRST && item.id <= RG_SILVER_RUPEE_LAST && IS_RANDO && + OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > + RO_DUNGEON_ITEM_LOC_VANILLA && + IsValidSaveFile()) { RandomizerGet rgid = static_cast(item.id); std::string current = ""; std::string max = ""; uint8_t rupeesMax = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetTotal(); ImU32 currentColor = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).AllCollected() - ? IM_COL_GREEN - : IM_COL_WHITE; + ? IM_COL_GREEN + : IM_COL_WHITE; ImU32 maxColor = IM_COL_GREEN; current += std::to_string(OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetCollected()); current += "/"; max += std::to_string(rupeesMax); ImGui::SetCursorScreenPos( - ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((current + max).c_str()).x / 2), p.y - 14) - ); + ImVec2(p.x + (iconSize / 2) - (ImGui::CalcTextSize((current + max).c_str()).x / 2), p.y - 14)); ImGui::PushStyleColor(ImGuiCol_Text, currentColor); ImGui::Text("%d/", OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(rgid).GetCollected()); ImGui::PopStyleColor(); @@ -1068,8 +1082,11 @@ void DrawItem(ItemTrackerItem item) { case RG_WATER_TRIAL_MQ_SILVER_RUPEE: case RG_SHADOW_TRIAL_MQ_SILVER_RUPEE: actualItemId = item.id; - hasItem = OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA; - itemName = Rando::StaticData::RetrieveItem(static_cast(actualItemId)).GetName().GetForLanguage(CVarGetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG)); + hasItem = OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > + RO_DUNGEON_ITEM_LOC_VANILLA; + itemName = Rando::StaticData::RetrieveItem(static_cast(actualItemId)) + .GetName() + .GetForLanguage(CVarGetInteger(CVAR_SETTING("Languages"), LANGUAGE_ENG)); break; } diff --git a/soh/soh/SohGui/ImGuiUtils.cpp b/soh/soh/SohGui/ImGuiUtils.cpp index a7f03c8ede7..be327684046 100644 --- a/soh/soh/SohGui/ImGuiUtils.cpp +++ b/soh/soh/SohGui/ImGuiUtils.cpp @@ -224,8 +224,10 @@ void RegisterImGuiItemIcons() { ImVec4 silver = ImVec4(0.7f, 0.7f, 0.7f, 1.0f); ImVec4 silverFaded = silver; silverFaded.w = 0.3f; - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, silver); - Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, entry.second.texturePath, silverFaded); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.name, entry.second.texturePath, + silver); + Ship::Context::GetInstance()->GetWindow()->GetGui()->LoadGuiTexture(entry.second.nameFaded, + entry.second.texturePath, silverFaded); } for (const auto& entry : triforcePieceMapping) { From f25430eda238d9a89c60dcd707c435701768f114 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Fri, 19 Sep 2025 18:29:50 -0400 Subject: [PATCH 34/41] Filter out MQ/Vanilla silver rupees in tracker --- .../randomizer/ShuffleSilverRupees.cpp | 13 +++- .../randomizer/ShuffleSilverRupees.h | 6 +- soh/soh/Enhancements/randomizer/context.cpp | 60 ++++++++++--------- .../randomizer/randomizer_item_tracker.cpp | 32 +++++++++- soh/soh/SaveManager.cpp | 3 +- 5 files changed, 79 insertions(+), 35 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 333dca897c4..5fbde748b47 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -974,8 +974,9 @@ static RegisterShipInitFunc registerFunc(Rando::StaticData::RegisterSilverRupeeL Rando::SilverRupeeCounter::SilverRupeeCounter() : mCollected(0), mTotal(0), mRandoGet(RG_NONE) { } -Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet) - : mCollected(0), mTotal(total), mRandoGet(randoGet) { +Rando::SilverRupeeCounter::SilverRupeeCounter(uint8_t total, RandomizerGet randoGet, uint8_t dungeonId, + RandomizerCheckQuest quest) + : mCollected(0), mTotal(total), mRandoGet(randoGet), mDungeonId(dungeonId), mQuest(quest) { } uint8_t Rando::SilverRupeeCounter::GetCollected() const { @@ -999,3 +1000,11 @@ void Rando::SilverRupeeCounter::SetCollected(uint8_t newCollected) { mCollected = newCollected; } } + +uint8_t Rando::SilverRupeeCounter::DungeonID() { + return mDungeonId; +} + +RandomizerCheckQuest Rando::SilverRupeeCounter::Quest() { + return mQuest; +} diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h index beed8c1eb2c..4ea76aa3a9c 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.h @@ -20,18 +20,22 @@ namespace Rando { class SilverRupeeCounter { public: SilverRupeeCounter(); - SilverRupeeCounter(uint8_t total, RandomizerGet randoGet); + SilverRupeeCounter(uint8_t total, RandomizerGet randoGet, uint8_t dungeonId, RandomizerCheckQuest quest); uint8_t GetCollected() const; uint8_t GetTotal() const; void IncrementCollected(uint8_t amount = 1); bool AllCollected(); void SetCollected(uint8_t newCollected); + uint8_t DungeonID(); + RandomizerCheckQuest Quest(); private: uint8_t mCollected = 0; uint8_t mTotal; RandomizerGet mRandoGet; + uint8_t mDungeonId; + RandomizerCheckQuest mQuest; }; } // namespace Rando #endif diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index d0e04d0c311..32acd2f6b7a 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -32,35 +32,35 @@ Context::Context() { mFishsanity = std::make_shared(); mSilverRupeeCounters = { // Vanilla - SilverRupeeCounter(5, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE), - SilverRupeeCounter(5, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE), - SilverRupeeCounter(5, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE), - SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE), - SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE), - SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SPIRIT_GATE_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SPIRIT_BOULDER_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_SCYTHE_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE), - SilverRupeeCounter(5, RG_FOREST_TRIAL_SILVER_RUPEE), - SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SPIRIT_TRIAL_SILVER_RUPEE), - SilverRupeeCounter(5, RG_LIGHT_TRIAL_SILVER_RUPEE), + SilverRupeeCounter(5, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, ICE_CAVERN, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, ICE_CAVERN, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, BOTTOM_OF_THE_WELL, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SPIRIT_GATE_SILVER_RUPEE, SPIRIT_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE, SPIRIT_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SPIRIT_BOULDER_SILVER_RUPEE, SPIRIT_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SHADOW_SCYTHE_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_FOREST_TRIAL_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_SPIRIT_TRIAL_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_VANILLA), + SilverRupeeCounter(5, RG_LIGHT_TRIAL_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_VANILLA), // MQ - SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE), - SilverRupeeCounter(6, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE), - SilverRupeeCounter(3, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE), - SilverRupeeCounter(5, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE), - SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE), - SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE), - SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE), - SilverRupeeCounter(5, RG_WATER_TRIAL_MQ_SILVER_RUPEE), - SilverRupeeCounter(5, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE), + SilverRupeeCounter(5, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_MQ), + SilverRupeeCounter(6, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_MQ), + SilverRupeeCounter(3, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, GERUDO_TRAINING_GROUND, RCQUEST_MQ), + SilverRupeeCounter(5, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, DODONGOS_CAVERN, RCQUEST_MQ), + SilverRupeeCounter(5, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, SPIRIT_TEMPLE, RCQUEST_MQ), + SilverRupeeCounter(5, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_MQ), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_MQ), + SilverRupeeCounter(5, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_MQ), + SilverRupeeCounter(10, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, SHADOW_TEMPLE, RCQUEST_MQ), + SilverRupeeCounter(5, RG_FIRE_TRIAL_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_MQ), + SilverRupeeCounter(5, RG_WATER_TRIAL_MQ_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_MQ), + SilverRupeeCounter(5, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, GANONS_CASTLE, RCQUEST_MQ), }; VanillaLogicDefaults = { // RANDOTODO check what this does @@ -327,6 +327,10 @@ void Context::ItemReset() { GetItemLocation(RC_GIFT_FROM_RAURU)->ResetVariables(); GetItemLocation(RC_LINKS_POCKET)->ResetVariables(); + + for (auto silverCounter : mSilverRupeeCounters) { + silverCounter.SetCollected(0); + } } void Context::LocationReset() { diff --git a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp index 84fca3ba316..eccc4372d27 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_item_tracker.cpp @@ -7,6 +7,7 @@ #include "soh/SohGui/UIWidgets.hpp" #include "soh/SohGui/SohGui.hpp" #include "randomizerTypes.h" +#include "dungeon.h" #include #include @@ -1601,7 +1602,19 @@ void UpdateVectors() { while (mainWindowItems.size() % 6) { mainWindowItems.push_back(ITEM_TRACKER_ITEM(ITEM_NONE, 0, DrawItem)); } - mainWindowItems.insert(mainWindowItems.end(), silverRupeeItems.begin(), silverRupeeItems.end()); + for (auto silverRupee : silverRupeeItems) { + uint8_t dungeonId = + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(silverRupee.id)) + .DungeonID(); + RandomizerCheckQuest dungeonQuest = + OTRGlobals::Instance->gRandoContext->GetDungeon(dungeonId)->IsMQ() ? RCQUEST_MQ : RCQUEST_VANILLA; + RandomizerCheckQuest rupeeQuest = + OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(static_cast(silverRupee.id)) + .Quest(); + if (dungeonQuest == rupeeQuest) { + mainWindowItems.push_back(silverRupee); + } + } } shouldUpdateVectors = false; @@ -1787,8 +1800,23 @@ void ItemTrackerWindow::DrawElement() { if (CVarGetInteger(CVAR_TRACKER_ITEM("DisplayType.SilverRupees"), SECTION_DISPLAY_HIDDEN) == SECTION_DISPLAY_SEPARATE) { + std::vector questMatchingSilverRupeeItems; + for (auto silverRupee : silverRupeeItems) { + uint8_t dungeonId = OTRGlobals::Instance->gRandoContext + ->GetSilverRupeeCounter(static_cast(silverRupee.id)) + .DungeonID(); + RandomizerCheckQuest dungeonQuest = + OTRGlobals::Instance->gRandoContext->GetDungeon(dungeonId)->IsMQ() ? RCQUEST_MQ : RCQUEST_VANILLA; + RandomizerCheckQuest rupeeQuest = + OTRGlobals::Instance->gRandoContext + ->GetSilverRupeeCounter(static_cast(silverRupee.id)) + .Quest(); + if (dungeonQuest == rupeeQuest) { + questMatchingSilverRupeeItems.push_back(silverRupee); + } + } BeginFloatingWindows("Silver Rupee Tracker"); - DrawItemsInRows(silverRupeeItems); + DrawItemsInRows(questMatchingSilverRupeeItems); EndFloatingWindows(); } diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 4258fb9c0ff..917c33b8d7b 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -256,8 +256,7 @@ void SaveManager::LoadRandomizer() { SaveManager::Instance->LoadArray("silverRupees", RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1, [&](size_t i) { size_t value; SaveManager::Instance->LoadData("", value); - randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)) - .IncrementCollected(value); + randoContext->GetSilverRupeeCounter(static_cast(i + RG_SILVER_RUPEE_FIRST)).SetCollected(value); }); } From 30c3086ea0a4722098710193f15b6d0cdbd0622c Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Sat, 20 Sep 2025 17:51:10 -0400 Subject: [PATCH 35/41] Fix crash --- soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 5fbde748b47..571a2f37572 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -126,7 +126,7 @@ void EnGSwitch_RandomizerInit(void* actor) { srIdentity.index.randomizerGet = Rando::StaticData::silverTrackerMap.at(identifier); ObjectExtension::GetInstance().Set(actor, std::move(srIdentity)); } else { - LUSLOG_INFO("EnGSwitch Actor Type %s, no Randomizer logic required", srActor->type); + LUSLOG_INFO("EnGSwitch Actor Type %d, no Randomizer logic required", srActor->type); } } From 2ee999902e19388000add6cacaa5a28e5066ebbe Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 24 Sep 2025 23:17:09 -0400 Subject: [PATCH 36/41] First pass at Kaleido tracker entries --- soh/soh/Enhancements/kaleido.cpp | 70 +++++++++++++++++++++++++++++++- soh/soh/Enhancements/kaleido.h | 17 ++++++-- 2 files changed, 82 insertions(+), 5 deletions(-) diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index eef19b49520..f3f4566d3e8 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -18,6 +18,7 @@ extern PlayState* gPlayState; #include "textures/icon_item_static/icon_item_static.h" #include "consolevariablebridge.h" #include "soh/Enhancements/cosmetics/cosmeticsTypes.h" +#include "soh/Enhancements/randomizer/dungeon.h" #include @@ -146,6 +147,24 @@ Kaleido::Kaleido() { FlagType::FLAG_RANDOMIZER_INF, RAND_INF_GANON_SOUL, 0, yOffset, "Ganon's Soul")); yOffset += 18; } + if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { + for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { + uint8_t dungeonId = + ctx->GetSilverRupeeCounter(static_cast(i)) + .DungeonID(); + RandomizerCheckQuest dungeonQuest = + ctx->GetDungeon(dungeonId)->IsMQ() ? RCQUEST_MQ : RCQUEST_VANILLA; + RandomizerCheckQuest rupeeQuest = + ctx->GetSilverRupeeCounter(static_cast(i)) + .Quest(); + if (dungeonQuest == rupeeQuest) { + mEntries.push_back(std::make_shared( + static_cast(i), 0, yOffset + )); + yOffset += 18; + } + } + } } extern "C" { @@ -267,14 +286,18 @@ KaleidoEntryIconCountRequired::KaleidoEntryIconCountRequired(const char* iconRes int16_t x, int16_t y, int* watch, int required, int total) : mWatch(watch), mRequired(required), mTotal(total), KaleidoEntryIcon(iconResourceName, iconFormat, iconSize, iconWidth, iconHeight, iconColor, x, y) { - mCount = *mWatch; + if (mWatch != nullptr) { + mCount = *mWatch; + } BuildText(); BuildVertices(); } void KaleidoEntryIconCountRequired::BuildText() { std::ostringstream totals; - totals << mCount; + if (mCount < mRequired) { + totals << mCount; + } if (mRequired != 0 && mCount < mRequired) { totals << '/' << mRequired; } @@ -284,6 +307,49 @@ void KaleidoEntryIconCountRequired::BuildText() { mText = totals.str(); } +KaleidoEntrySilverRupeeCounter::KaleidoEntrySilverRupeeCounter(RandomizerGet rgid, int16_t x, int16_t y) + : mRgid(rgid), KaleidoEntryIconCountRequired(gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, Color_RGBA8(200, 200, 200, 255), x, y) { + mCount = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetCollected(); + mRequired = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetTotal(); + BuildText(); + BuildVertices(); +} + +void KaleidoEntrySilverRupeeCounter::BuildText() { + KaleidoEntryIconCountRequired::BuildText(); + CustomMessage name = CustomMessage(Rando::StaticData::RetrieveItem(mRgid).GetName()); + // Abbreviate Dungeon Names + name.Replace("Spirit Temple", "SpT"); + name.Replace("Shadow Temple", "ShT"); + name.Replace("Bottom of the Well", "BotW"); + name.Replace("Gerudo Training Grounds", "GTG"); + name.Replace("Dodongo's Cavern", "DC"); + name.Replace("Ice Cavern", "IC"); + name.Replace("Ganon's Castle", "GC"); + // Remove MQ to make spoilers less prevalent + name.Replace("MQ", ""); + // Remove "Silver Rupee" from the name + name.Replace("Silver Rupee", ""); + if (!mText.empty()) { + mText += " "; + } + mText += name.GetForCurrentLanguage(); + if (mText.length() > 24) { + mText = mText.substr(0, 21) + "..."; + } +} + + +void KaleidoEntrySilverRupeeCounter::Update(PlayState* play) { + int newCount = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetCollected(); + if (mCount != newCount) { + mCount = newCount; + BuildText(); + RebuildVertices(); + mAchieved = mCount >= mRequired; + } +} + void KaleidoEntryIcon::BuildVertices() { int offsetY = 0; int offsetX = 0; diff --git a/soh/soh/Enhancements/kaleido.h b/soh/soh/Enhancements/kaleido.h index 7776afb6631..46a2a589edb 100644 --- a/soh/soh/Enhancements/kaleido.h +++ b/soh/soh/Enhancements/kaleido.h @@ -128,17 +128,28 @@ class KaleidoEntryIconCountRequired : public KaleidoEntryIcon { * @param total The amount of this collectible available in the seed. Set to 0 to not render. */ KaleidoEntryIconCountRequired(const char* iconResourceName, int iconFormat, int iconSize, int iconWidth, - int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, int* watch, + int iconHeight, Color_RGBA8 iconColor, int16_t x, int16_t y, int* watch = nullptr, int required = 0, int total = 0); void Update(PlayState* play) override; + void BuildText(); + + protected: + int mRequired; + int mCount; private: int* mWatch; - int mRequired; int mTotal; - int mCount; +}; +class KaleidoEntrySilverRupeeCounter : public KaleidoEntryIconCountRequired { + public: + KaleidoEntrySilverRupeeCounter(RandomizerGet rgid, int16_t x, int16_t y); + void Update(PlayState* play) override; void BuildText(); + + private: + RandomizerGet mRgid; }; class KaleidoEntryOcarinaButtons : public KaleidoEntryIcon { From 9b0b6427fb1eb864a6689d3c2025193946051913 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 25 Sep 2025 00:28:53 -0400 Subject: [PATCH 37/41] slightly more consistent truncation Shifts to truncating based on total width of the line rather than the number of characters, since different characters are different widths. --- soh/soh/Enhancements/kaleido.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index f3f4566d3e8..6f7f8111ad5 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -334,9 +334,6 @@ void KaleidoEntrySilverRupeeCounter::BuildText() { mText += " "; } mText += name.GetForCurrentLanguage(); - if (mText.length() > 24) { - mText = mText.substr(0, 21) + "..."; - } } @@ -360,8 +357,22 @@ void KaleidoEntryIcon::BuildVertices() { offsetX += 18; for (size_t i = 0; i < mText.length(); i++) { int charWidth = static_cast(Ship_GetCharFontWidth(mText[i])); + if ((offsetX + charWidth) > 220) { + offsetX -= Ship_GetCharFontWidth(mText[i-1]); + offsetX -= Ship_GetCharFontWidth(mText[i-2]); + mText = mText.substr(0, i-2) + "..."; + int periodWidth = Ship_GetCharFontWidth('.'); + Ship_CreateQuadVertexGroup(&(vertices)[(i - 1) * 4], offsetX, offsetY, periodWidth, 16, 0); + offsetX += periodWidth; + Ship_CreateQuadVertexGroup(&(vertices)[(i) * 4], offsetX, offsetY, periodWidth, 16, 0); + offsetX += periodWidth; + Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, periodWidth, 16, 0); + offsetX += periodWidth; + break; + } Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, charWidth, 16, 0); offsetX += charWidth; + } offsetY += FONT_CHAR_TEX_HEIGHT; mWidth = static_cast(offsetX); From e7c925a69a135210c39f1eea5d7a24684acec1f3 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 25 Sep 2025 17:31:11 -0400 Subject: [PATCH 38/41] Fix Mac build and format --- soh/soh/Enhancements/kaleido.cpp | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index 6f7f8111ad5..12d1a5daaff 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -149,18 +149,12 @@ Kaleido::Kaleido() { } if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Get() > RO_DUNGEON_ITEM_LOC_VANILLA) { for (int i = RG_SILVER_RUPEE_FIRST; i <= RG_SILVER_RUPEE_LAST; i++) { - uint8_t dungeonId = - ctx->GetSilverRupeeCounter(static_cast(i)) - .DungeonID(); - RandomizerCheckQuest dungeonQuest = - ctx->GetDungeon(dungeonId)->IsMQ() ? RCQUEST_MQ : RCQUEST_VANILLA; - RandomizerCheckQuest rupeeQuest = - ctx->GetSilverRupeeCounter(static_cast(i)) - .Quest(); + uint8_t dungeonId = ctx->GetSilverRupeeCounter(static_cast(i)).DungeonID(); + RandomizerCheckQuest dungeonQuest = ctx->GetDungeon(dungeonId)->IsMQ() ? RCQUEST_MQ : RCQUEST_VANILLA; + RandomizerCheckQuest rupeeQuest = ctx->GetSilverRupeeCounter(static_cast(i)).Quest(); if (dungeonQuest == rupeeQuest) { - mEntries.push_back(std::make_shared( - static_cast(i), 0, yOffset - )); + mEntries.push_back( + std::make_shared(static_cast(i), 0, yOffset)); yOffset += 18; } } @@ -308,7 +302,8 @@ void KaleidoEntryIconCountRequired::BuildText() { } KaleidoEntrySilverRupeeCounter::KaleidoEntrySilverRupeeCounter(RandomizerGet rgid, int16_t x, int16_t y) - : mRgid(rgid), KaleidoEntryIconCountRequired(gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, Color_RGBA8(200, 200, 200, 255), x, y) { + : mRgid(rgid), KaleidoEntryIconCountRequired(gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, + Color_RGBA8{ 200, 200, 200, 255 }, x, y) { mCount = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetCollected(); mRequired = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetTotal(); BuildText(); @@ -336,10 +331,9 @@ void KaleidoEntrySilverRupeeCounter::BuildText() { mText += name.GetForCurrentLanguage(); } - void KaleidoEntrySilverRupeeCounter::Update(PlayState* play) { int newCount = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetCollected(); - if (mCount != newCount) { + if (mCount != newCount) { mCount = newCount; BuildText(); RebuildVertices(); @@ -358,13 +352,13 @@ void KaleidoEntryIcon::BuildVertices() { for (size_t i = 0; i < mText.length(); i++) { int charWidth = static_cast(Ship_GetCharFontWidth(mText[i])); if ((offsetX + charWidth) > 220) { - offsetX -= Ship_GetCharFontWidth(mText[i-1]); - offsetX -= Ship_GetCharFontWidth(mText[i-2]); - mText = mText.substr(0, i-2) + "..."; + offsetX -= Ship_GetCharFontWidth(mText[i - 1]); + offsetX -= Ship_GetCharFontWidth(mText[i - 2]); + mText = mText.substr(0, i - 2) + "..."; int periodWidth = Ship_GetCharFontWidth('.'); Ship_CreateQuadVertexGroup(&(vertices)[(i - 1) * 4], offsetX, offsetY, periodWidth, 16, 0); offsetX += periodWidth; - Ship_CreateQuadVertexGroup(&(vertices)[(i) * 4], offsetX, offsetY, periodWidth, 16, 0); + Ship_CreateQuadVertexGroup(&(vertices)[(i)*4], offsetX, offsetY, periodWidth, 16, 0); offsetX += periodWidth; Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, periodWidth, 16, 0); offsetX += periodWidth; @@ -372,7 +366,6 @@ void KaleidoEntryIcon::BuildVertices() { } Ship_CreateQuadVertexGroup(&(vertices)[(i + 1) * 4], offsetX, offsetY, charWidth, 16, 0); offsetX += charWidth; - } offsetY += FONT_CHAR_TEX_HEIGHT; mWidth = static_cast(offsetX); From 744930a4e87041041be8264f0da9805bbdacf086 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Thu, 25 Sep 2025 18:02:14 -0400 Subject: [PATCH 39/41] Separates Grayscale from "Achieved" This way the icons aren't grayscale for 99% of the seed when it's something like triforce pieces or silver rupees. --- soh/soh/Enhancements/kaleido.cpp | 15 ++++++++++++--- soh/soh/Enhancements/kaleido.h | 1 + 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/kaleido.cpp b/soh/soh/Enhancements/kaleido.cpp index 12d1a5daaff..e3327b5accb 100644 --- a/soh/soh/Enhancements/kaleido.cpp +++ b/soh/soh/Enhancements/kaleido.cpp @@ -76,7 +76,7 @@ void KaleidoEntryIcon::Draw(PlayState* play, std::vector* mEntryDl) { G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); // icon - if (!mAchieved) { + if (mGrayscale) { mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); mEntryDl->push_back(gsSPGrayscale(true)); } @@ -273,6 +273,7 @@ KaleidoEntryIconFlag::KaleidoEntryIconFlag(const char* iconResourceName, int ico void KaleidoEntryIconFlag::Update(PlayState* play) { mAchieved = GameInteractor::RawAction::CheckFlag(mFlagType, static_cast(mFlag)); + mGrayscale = !mAchieved; } KaleidoEntryIconCountRequired::KaleidoEntryIconCountRequired(const char* iconResourceName, int iconFormat, int iconSize, @@ -283,6 +284,8 @@ KaleidoEntryIconCountRequired::KaleidoEntryIconCountRequired(const char* iconRes if (mWatch != nullptr) { mCount = *mWatch; } + mAchieved = mCount >= mRequired; + mGrayscale = mCount == 0; BuildText(); BuildVertices(); } @@ -303,9 +306,11 @@ void KaleidoEntryIconCountRequired::BuildText() { KaleidoEntrySilverRupeeCounter::KaleidoEntrySilverRupeeCounter(RandomizerGet rgid, int16_t x, int16_t y) : mRgid(rgid), KaleidoEntryIconCountRequired(gRupeeCounterIconTex, G_IM_FMT_IA, G_IM_SIZ_8b, 16, 16, - Color_RGBA8{ 200, 200, 200, 255 }, x, y) { + Color_RGBA8{ 255, 255, 255, 255 }, x, y) { mCount = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetCollected(); mRequired = OTRGlobals::Instance->gRandoContext->GetSilverRupeeCounter(mRgid).GetTotal(); + mAchieved = mCount >= mRequired; + mGrayscale = mCount == 0; BuildText(); BuildVertices(); } @@ -338,6 +343,7 @@ void KaleidoEntrySilverRupeeCounter::Update(PlayState* play) { BuildText(); RebuildVertices(); mAchieved = mCount >= mRequired; + mGrayscale = mCount == 0; } } @@ -396,6 +402,7 @@ void KaleidoEntryIconCountRequired::Update(PlayState* play) { BuildText(); RebuildVertices(); mAchieved = mCount >= mRequired; + mGrayscale = mCount == 0; } } @@ -451,11 +458,13 @@ void KaleidoEntryOcarinaButtons::Update(PlayState* play) { mButtonCollected[4] = GameInteractor::RawAction::CheckFlag(FLAG_RANDOMIZER_INF, RAND_INF_HAS_OCARINA_C_RIGHT) > 0; CalculateColors(); mAchieved = false; + mGrayscale = true; for (int i = 0; i < mButtonCollected.size(); i++) { if (!mButtonCollected[i]) { mButtonColors[i] = Color_RGBA8{ 109, 109, 109, 255 }; } else { mAchieved = true; + mGrayscale = false; } } } @@ -476,7 +485,7 @@ void KaleidoEntryOcarinaButtons::Draw(PlayState* play, std::vector* mEntryD G_MTX_PUSH | G_MTX_LOAD | G_MTX_MODELVIEW)); // icon - if (!mAchieved) { + if (mGrayscale) { mEntryDl->push_back(gsDPSetGrayscaleColor(109, 109, 109, 255)); mEntryDl->push_back(gsSPGrayscale(true)); } diff --git a/soh/soh/Enhancements/kaleido.h b/soh/soh/Enhancements/kaleido.h index 46a2a589edb..d298dbeb108 100644 --- a/soh/soh/Enhancements/kaleido.h +++ b/soh/soh/Enhancements/kaleido.h @@ -39,6 +39,7 @@ class KaleidoEntry { Vtx* vtx; std::string mText; bool mAchieved = false; + bool mGrayscale = true; }; /** From 6e43e6373b74200de6e4b8f449e9d2d70a5e7e27 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 30 Sep 2025 19:49:25 -0400 Subject: [PATCH 40/41] Fixes coordinates typo --- soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp index 571a2f37572..ad3f8679c91 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilverRupees.cpp @@ -642,7 +642,7 @@ void Rando::StaticData::RegisterSilverRupeeLocations() { SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4)); locationTable[RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5] = Location::Base( RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, RCQUEST_MQ, RCTYPE_SILVER_RUPEE, RCAREA_SHADOW_TEMPLE, ACTOR_EN_G_SWITCH, - SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2180, -961), "Spinning Scythe Silver Rupee 5", + SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2810, -961), "Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5)); From 1bf88aa8234155854337a8211ea015b69d83c2a3 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Tue, 30 Sep 2025 19:49:46 -0400 Subject: [PATCH 41/41] Adds sparkles to the Silver Rupee items For easier identification before actually collecting them. You'll only be able to tell what dungeon they are for from the color, but I'm not sure there's much else to be done. Also added a Dark Purple particle to represent Ganon's castle --- soh/src/code/z_en_item00.c | 41 ++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) diff --git a/soh/src/code/z_en_item00.c b/soh/src/code/z_en_item00.c index b6bf5ecdf90..bf2acdc507d 100644 --- a/soh/src/code/z_en_item00.c +++ b/soh/src/code/z_en_item00.c @@ -1195,6 +1195,7 @@ typedef enum { PARTICLE_PINK, PARTICLE_BRIGHT_RED, PARTICLE_BLUE, + PARTICLE_DARK_PURPLE } Item00ParticleColors; void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry giEntry) { @@ -1231,21 +1232,42 @@ void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry colorIndex = PARTICLE_BRIGHT_GREEN; break; case RG_BOLERO_OF_FIRE: + case RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE: colorIndex = PARTICLE_RED; break; case RG_SERENADE_OF_WATER: case RG_BOTTLE_WITH_FISH: + case RG_ICE_CAVERN_SLIDING_SILVER_RUPEE: + case RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE: colorIndex = PARTICLE_CYAN; break; case RG_REQUIEM_OF_SPIRIT: + case RG_SPIRIT_GATE_SILVER_RUPEE: + case RG_SPIRIT_BEAMOS_SILVER_RUPEE: + case RG_SPIRIT_BOULDER_SILVER_RUPEE: + case RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE: colorIndex = PARTICLE_ORANGE; break; case RG_NOCTURNE_OF_SHADOW: case RG_BOTTLE_WITH_POE: + case RG_SHADOW_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE: + case RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE: + case RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE: + case RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE: + case RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE: + case RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE: colorIndex = PARTICLE_VIOLET; break; case RG_PRELUDE_OF_LIGHT: case RG_BOTTLE_WITH_BIG_POE: + case RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE: + case RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE: colorIndex = PARTICLE_YELLOW; break; case RG_DEKU_STICK_BAG: @@ -1272,6 +1294,15 @@ void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry case RG_BOTTLE_WITH_BLUE_POTION: colorIndex = PARTICLE_BLUE; break; + case RG_FIRE_TRIAL_SILVER_RUPEE: + case RG_FIRE_TRIAL_MQ_SILVER_RUPEE: + case RG_SPIRIT_TRIAL_SILVER_RUPEE: + case RG_FOREST_TRIAL_SILVER_RUPEE: + case RG_LIGHT_TRIAL_SILVER_RUPEE: + case RG_SHADOW_TRIAL_MQ_SILVER_RUPEE: + case RG_WATER_TRIAL_MQ_SILVER_RUPEE: + colorIndex = PARTICLE_DARK_PURPLE; + break; default: return; } @@ -1281,7 +1312,7 @@ void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry } // Color of the circle for the particles - static Color_RGBA8 mainColors[13][3] = { + static Color_RGBA8 mainColors[14][3] = { { 34, 255, 76 }, // Minuet, Bean Pack, Magic Upgrades, Bottle with Green Potion, Bottle with Bugs, and Greg { 177, 35, 35 }, // Bolero { 115, 251, 253 }, // Serenade and Bottle with Fish @@ -1294,11 +1325,12 @@ void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry { 19, 120, 182 }, // Progressive Bombchu { 255, 205, 255 }, // Bottle with Fairy { 255, 118, 118 }, // Bottle with Red Potion - { 154, 204, 255 } // Bottle with Blue Fire and Bottle with Blue Potion + { 154, 204, 255 }, // Bottle with Blue Fire and Bottle with Blue Potion + { 118, 10, 143 } // Ganon's Castle Silver Rupees }; // Color of the faded flares stretching off the particles - static Color_RGBA8 flareColors[13][3] = { + static Color_RGBA8 flareColors[14][3] = { { 30, 110, 30 }, // Minuet, Bean Pack, Magic Upgrades, Bottle with Green Potion, Bottle with Bugs, and Greg { 90, 10, 10 }, // Bolero { 35, 35, 177 }, // Serenade and Bottle with Fish @@ -1311,7 +1343,8 @@ void EnItem00_CustomItemsParticles(Actor* Parent, PlayState* play, GetItemEntry { 204, 102, 0 }, // Progressive Bombchu { 216, 70, 216 }, // Bottle with Fairy { 90, 10, 10 }, // Bottle with Red Potion - { 35, 35, 177 } // Bottle with Blue Fire + { 35, 35, 177 }, // Bottle with Blue Fire + { 131, 81, 143 } // Ganon's Castle Silver Rupees }; static Vec3f velocity = { 0.0f, 0.0f, 0.0f };