This commit is contained in:
Christopher Leggett 2024-04-10 14:09:46 -04:00 committed by GitHub
commit 37892abebd
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
44 changed files with 2039 additions and 39 deletions

View File

@ -283,7 +283,7 @@ typedef struct {
// #endregion
// #region SOH [Randomizer]
// Upstream TODO: Move these to their own struct or name to more obviously specific to Randomizer
/* */ u16 randomizerInf[16];
/* */ u16 randomizerInf[25];
/* */ u8 mqDungeonCount;
/* */ u16 adultTradeItems;
/* */ u8 triforcePiecesCollected;

View File

@ -348,7 +348,7 @@ const std::vector<FlagTable> flagTables = {
{ 0x24, "Market Crowd Text Randomizer" },
{ 0x30, "Entered the Market" },
} },
{ "Randomizer Inf Flags", RANDOMIZER_INF, 16, {
{ "Randomizer Inf Flags", RANDOMIZER_INF, 25, {
{ RAND_INF_DUNGEONS_DONE_DEKU_TREE, "DUNGEONS_DONE_DEKU_TREE" },
{ RAND_INF_DUNGEONS_DONE_DODONGOS_CAVERN, "DUNGEONS_DONE_DODONGOS_CAVERN" },
{ RAND_INF_DUNGEONS_DONE_JABU_JABUS_BELLY, "DUNGEONS_DONE_JABU_JABUS_BELLY" },
@ -607,7 +607,157 @@ const std::vector<FlagTable> flagTables = {
{ RAND_INF_ZD_FISH_2, "RAND_INF_ZD_FISH_2" },
{ RAND_INF_ZD_FISH_3, "RAND_INF_ZD_FISH_3" },
{ RAND_INF_ZD_FISH_4, "RAND_INF_ZD_FISH_4" },
{ RAND_INF_ZD_FISH_5, "RAND_INF_ZD_FISH_5" }
{ RAND_INF_ZD_FISH_5, "RAND_INF_ZD_FISH_5" },
{ RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, "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_2" },
{ RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, "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_4" },
{ RAND_INF_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, "RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4" },
{ RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, "RAND_INF_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5" },
{ RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, "RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_1" },
{ RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, "RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_2" },
{ RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, "RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_3" },
{ RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, "RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_4" },
{ RAND_INF_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, "RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, "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_5" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, "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_2" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, "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_4" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, "RAND_INF_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5" },
{ RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1, "RAND_INF_SPIRIT_GATE_SILVER_RUPEE_1" },
{ RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2, "RAND_INF_SPIRIT_GATE_SILVER_RUPEE_2" },
{ RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3, "RAND_INF_SPIRIT_GATE_SILVER_RUPEE_3" },
{ RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4, "RAND_INF_SPIRIT_GATE_SILVER_RUPEE_4" },
{ RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5, "RAND_INF_SPIRIT_GATE_SILVER_RUPEE_5" },
{ RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1, "RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_1" },
{ RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2, "RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_2" },
{ RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3, "RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_3" },
{ RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4, "RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_4" },
{ RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5, "RAND_INF_SPIRIT_BEAMOS_SILVER_RUPEE_5" },
{ RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1, "RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_1" },
{ RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2, "RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_2" },
{ RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3, "RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_3" },
{ RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4, "RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_4" },
{ RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5, "RAND_INF_SPIRIT_BOULDER_SILVER_RUPEE_5" },
{ RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1, "RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_1" },
{ RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2, "RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_2" },
{ RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3, "RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_3" },
{ RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4, "RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_4" },
{ RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5, "RAND_INF_SHADOW_SCYTHE_SILVER_RUPEE_5" },
{ RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, "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_2" },
{ RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, "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_4" },
{ RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, "RAND_INF_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5" },
{ RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, "RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1" },
{ RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, "RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2" },
{ RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, "RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3" },
{ RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, "RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4" },
{ RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, "RAND_INF_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5" },
{ RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1, "RAND_INF_FOREST_TRIAL_SILVER_RUPEE_1" },
{ RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2, "RAND_INF_FOREST_TRIAL_SILVER_RUPEE_2" },
{ RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3, "RAND_INF_FOREST_TRIAL_SILVER_RUPEE_3" },
{ RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4, "RAND_INF_FOREST_TRIAL_SILVER_RUPEE_4" },
{ RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5, "RAND_INF_FOREST_TRIAL_SILVER_RUPEE_5" },
{ RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1, "RAND_INF_FIRE_TRIAL_SILVER_RUPEE_1" },
{ RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2, "RAND_INF_FIRE_TRIAL_SILVER_RUPEE_2" },
{ RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3, "RAND_INF_FIRE_TRIAL_SILVER_RUPEE_3" },
{ RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4, "RAND_INF_FIRE_TRIAL_SILVER_RUPEE_4" },
{ RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5, "RAND_INF_FIRE_TRIAL_SILVER_RUPEE_5" },
{ RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1, "RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_1" },
{ RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2, "RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_2" },
{ RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3, "RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_3" },
{ RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4, "RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_4" },
{ RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5, "RAND_INF_LIGHT_TRIAL_SILVER_RUPEE_5" },
{ RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1, "RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_1" },
{ RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2, "RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_2" },
{ RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3, "RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_3" },
{ RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4, "RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_4" },
{ RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5, "RAND_INF_SPIRIT_TRIAL_SILVER_RUPEE_5" },
{ RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1" },
{ RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2" },
{ RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3" },
{ RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, "RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4" },
{ RAND_INF_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, "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_BOULDER_SILVER_RUPEE_5" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, "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_2" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, "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_4" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, "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_LAVA_SILVER_RUPEE_6" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, "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_2" },
{ RAND_INF_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, "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_1" },
{ RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, "RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2" },
{ RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, "RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3" },
{ RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, "RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4" },
{ RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, "RAND_INF_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5" },
{ RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, "RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1" },
{ RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, "RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2" },
{ RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, "RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3" },
{ RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, "RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4" },
{ RAND_INF_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, "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_5" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, "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_7" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, "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_9" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, "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_1" },
{ RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, "RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4" },
{ RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, "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_1" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, "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_3" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, "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_5" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, "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_7" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, "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_9" },
{ RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, "RAND_INF_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10" },
{ RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1, "RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_1" },
{ RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2, "RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_2" },
{ RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3, "RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_3" },
{ RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4, "RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_4" },
{ RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5, "RAND_INF_FIRE_TRIAL_MQ_SILVER_RUPEE_5" },
{ RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1, "RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_1" },
{ RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2, "RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_2" },
{ RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3, "RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_3" },
{ RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4, "RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_4" },
{ RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5, "RAND_INF_WATER_TRIAL_MQ_SILVER_RUPEE_5" },
{ RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, "RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_1" },
{ RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, "RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_2" },
{ RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, "RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_3" },
{ RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, "RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_4" },
{ RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, "RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5" },
{ RAND_INF_MAGICAL_SILVER_RUPEE, "RAND_INF_MAGICAL_SILVER_RUPEE" }
} },
};

View File

@ -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) \

View File

@ -29,6 +29,7 @@
#include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
#include "objects/object_link_boy/object_link_boy.h"
#include "objects/object_link_child/object_link_child.h"
#include "soh/Enhancements/randomizer/actors/z_en_g_switch_rando.h"
extern "C" {
#include <z64.h>
@ -1180,6 +1181,51 @@ void RegisterRandomizerSheikSpawn() {
});
}
//Changes silver rupee update and draw functions, if silver rupees shuffle is enabled
void RegisterSilverRupeeShuffle() {
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* refActor) {
if (!gPlayState) {
return;
}
if (!IS_RANDO || OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_SILVER_SHUFFLE_VANILLA)) {
return;
}
auto* actor = static_cast<Actor*>(refActor);
if (actor->id == ACTOR_EN_G_SWITCH) {
auto* silverRupee = reinterpret_cast<EnGSwitch*>(actor);
if (silverRupee->type == ENGSWITCH_SILVER_RUPEE) {
Rando::Position randoPos = {static_cast<SceneID>(gPlayState->sceneNum), ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ : RCQUEST_VANILLA, actor->world.pos};
silverRupee->rc = Rando::StaticData::silverRupeeMap.at(randoPos);
Rando::Location* loc = Rando::StaticData::GetLocation(silverRupee->rc);
silverRupee->randInfFlag = static_cast<RandomizerInf>(loc->GetCollectionCheck().flag);
if (Flags_GetRandomizerInf(silverRupee->randInfFlag)) {
Actor_Kill(actor);
}
silverRupee->rg = OTRGlobals::Instance->gRandoContext->GetItemLocation(silverRupee->rc)->GetPlacedRandomizerGet();
silverRupee->giEntry = OTRGlobals::Instance->gRandoContext->GetItemLocation(silverRupee->rc)->GetPlacedItem().GetGIEntry().get();
silverRupee->actionFunc = EnGSwitch_Randomizer_SilverRupeeIdle;
silverRupee->actor.draw = EnGSwitch_Randomizer_Draw;
} else if (silverRupee->type == ENGSWITCH_SILVER_TRACKER) {
Rando::Identifier randoIdentifier = {
static_cast<SceneID>(gPlayState->sceneNum),
ResourceMgr_IsSceneMasterQuest(gPlayState->sceneNum) ? RCQUEST_MQ : RCQUEST_VANILLA, actor->params
};
silverRupee->rg = Rando::StaticData::silverTrackerMap.at(randoIdentifier);
if ((OTRGlobals::Instance->gRandoContext->GetSilverRupees()->GetInfo(silverRupee->rg).GetCollected() >= silverRupee->silverCount)
|| Flags_GetRandomizerInf(RAND_INF_MAGICAL_SILVER_RUPEE)) {
if ((gPlayState->sceneNum == SCENE_GERUDO_TRAINING_GROUND) && (silverRupee->actor.room == 2)) {
Flags_SetTempClear(gPlayState, silverRupee->actor.room);
} else {
func_80078884(NA_SE_SY_CORRECT_CHIME);
Flags_SetSwitch(gPlayState, silverRupee->switchFlag);
}
Actor_Kill(&silverRupee->actor);
}
}
}
});
}
//Boss souls require an additional item (represented by a RAND_INF) to spawn a boss in a particular lair
void RegisterBossSouls() {
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* actor) {
@ -1738,6 +1784,7 @@ void InitMods() {
RegisterAltTrapTypes();
RegisterRandomizerSheikSpawn();
RegisterBossSouls();
RegisterSilverRupeeShuffle();
RegisterRandomizedEnemySizes();
RegisterOpenAllHours();
RegisterToTMedallions();

View File

@ -19,6 +19,7 @@ enum class Category {
cVanillaCompass,
cAdultTrade,
cBeehive,
cSilverRupee,
};
enum class OptionCategory {

View File

@ -863,6 +863,11 @@ static void RandomizeOwnDungeon(const Rando::DungeonInfo* dungeon) {
AddElementsToPool(dungeonItems, dungeonBossKey);
}
if ((ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_SILVER_SHUFFLE_OWN_DUNGEON) && dungeon->HasSilverRupees())) {
auto silverRupees = FilterAndEraseFromPool(ItemPool, [dungeon](const RandomizerGet i){ return dungeon->ContainsSilverRupee(i); });
AddElementsToPool(dungeonItems, silverRupees);
}
//randomize boss key and small keys together for even distribution
AssumedFill(dungeonItems, dungeonLocations);
@ -916,6 +921,14 @@ static void RandomizeDungeonItems() {
auto ganonBossKey = FilterAndEraseFromPool(ItemPool, [](const auto i) { return i == RG_GANONS_CASTLE_BOSS_KEY; });
AddElementsToPool(overworldItems, ganonBossKey);
}
if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).Is(RO_SILVER_SHUFFLE_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_SILVER_SHUFFLE_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)) {

View File

@ -1151,6 +1151,21 @@ void HintTable_Init_Exclude_Dungeon() {
Text{"#upon a web of glass# in the Spirit Temple sits a spider holding", /*french*/"une #Skulltula sur une paroi de verre du Temple de l'Esprit# a", /*spanish*/"#sobre una plataforma de cristal# yace una Skulltula que otorga"},
});
//TODO: Translate
hintTable[RHT_SPIRIT_GATE_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #gate# in the Spirit Temple guards"}
});
hintTable[RHT_SPIRIT_BEAMOS_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"#Beamos and blocks# in the Spirit Temple guard"}
});
hintTable[RHT_SPIRIT_BOULDER_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"#rolling rocks# in the Spirit Temple guard"}
});
//TODO: End Translation
/*--------------------------
| SHADOW TEMPLE |
---------------------------*/
@ -1392,6 +1407,21 @@ void HintTable_Init_Exclude_Dungeon() {
Text{"a #suspended spider# guards", /*french*/"une #Skulltula près du repère du Temple de l'Ombre# a", /*spanish*/"una #Skulltula flotante# del Templo de las Sombras otorga"},
});
//TODO: Translate
hintTable[RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #spinning scythe# guards"}
});
hintTable[RHT_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #Beamos and Spike Trap# in the Shadow Temple guard"}
});
hintTable[RHT_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"#invisible spikes# guard"}
});
/*--------------------------
| BOTTOM OF THE WELL |
---------------------------*/
@ -1511,6 +1541,11 @@ void HintTable_Init_Exclude_Dungeon() {
//obscure text
Text{"a #spider locked in a crypt# within the well guards", /*french*/"une #Skulltula embarrée dans la crypte au fonds du Puits# a", /*spanish*/"una #Skulltula encerrada en una cripta# del pozo otorga"},
});
hintTable[RHT_BOTTOM_OF_THE_WELL_BASEMENT_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"#Redeads in a well# guard"}
});
/*--------------------------
| ICE CAVERN |
@ -1587,6 +1622,12 @@ void HintTable_Init_Exclude_Dungeon() {
Text{"a #spider in fiery ice# hoards", /*french*/"une #Skulltula figée dans la glace rouge# a", /*spanish*/"una #Skulltula tras un ardiente hielo# otorga"},
});
// TODO: Translate
hintTable[RHT_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE] = HintText::Exclude({
// obscure text
Text{"#spinning ice# guards"}
});
/*--------------------------
| GERUDO TRAINING GROUNDS |
---------------------------*/
@ -1766,6 +1807,21 @@ void HintTable_Init_Exclude_Dungeon() {
Text{"a #feat of strength# rewards thieves with", /*french*/"#derrière un bloc argent# dans le Gymnase Gerudo gît", /*spanish*/"una #hazaña de fuerza# premia a las bandidas con"},
});
// TODO: Translate
hintTable[RHT_GERUDO_TRAINING_GROUND_BOULDER_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #boulder maze# in the Gerudo Training Grounds guards"}
});
hintTable[RHT_GERUDO_TRAINING_GROUND_LAVA_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #fiery trial# in the Gerudo Training Grounds guards"}
});
hintTable[RHT_GERUDO_TRAINING_GROUND_TOILET_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"a #swirly trial# in the Gerudo Training Grounds guards"}
});
//TODO: End Translation
/*--------------------------
| GANONS CASTLE |
---------------------------*/
@ -1961,4 +2017,22 @@ void HintTable_Init_Exclude_Dungeon() {
//obscure text
Text{"#scrubs in Ganon's Castle# sell", /*french*/"les #pestes Mojo dans le Château de Ganon# vendent", /*spanish*/"los #dekus del Castillo de Ganon# venden"},
});
hintTable[RHT_FOREST_TRIAL_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"the #test of the wilds# holds", /*french*/"l'#épreuve des bois# contient", /*spanish*/"la #prueba de la naturaleza# brinda"},
});
//TODO: Translate
hintTable[RHT_FIRE_TRIAL_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"the #test of flames# holds"}
});
hintTable[RHT_SPIRIT_TRIAL_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"the #test of the sands# holds", /*french*/"l'#épreuve des sables# contient", /*spanish*/"la #prueba de las arenas# brinda"}
});
hintTable[RHT_LIGHT_TRIAL_SILVER_RUPEE] = HintText::Exclude({
//obscure text
Text{"the #test of radiance# holds", /*french*/"l'#épreuve du ciel# contient", /*spanish*/"la #prueba del resplandor# brinda"}
});
}

View File

@ -2113,6 +2113,73 @@ void HintTable_Init_Item() {
Text{"a fishing pole", /*french*/"canne à pêche", /*spanish*/"caña de pescar"}
);
// TODO: Translations
hintTable[RHT_ICE_CAVERN_SILVER_RUPEE] = HintText::Item({
//obscure text
Text{"cold unlocking currency"},
}, {
//ambiguous text
Text{"a Silver Rupee"},
},
Text{"an Ice Cavern Silver Rupee"}
);
hintTable[RHT_BOTTOM_OF_THE_WELL_SILVER_RUPEE] = HintText::Item(
{
// obscure text
Text{ "damp unlocking currency" },
},
{
// ambiguous text
Text{ "a Silver Rupee" },
},
Text{ "a Bottom of the Well Silver Rupee" });
hintTable[RHT_GERUDO_TRAINING_GROUNDS_SILVER_RUPEE] = HintText::Item(
{
// obscure text
Text{ "stolen unlocking currency" },
},
{
// ambiguous text
Text{ "a Silver Rupee" },
},
Text{ "a Gerudo Training Grounds Silver Rupee" });
hintTable[RHT_SPIRIT_TEMPLE_SILVER_RUPEE] = HintText::Item(
{
// obscure text
Text{ "spiritual unlocking currency" },
},
{
// ambiguous text
Text{ "a Silver Rupee" },
},
Text{ "a Spirit Temple Silver Rupee" });
hintTable[RHT_SHADOW_TEMPLE_SILVER_RUPEE] = HintText::Item(
{
// obscure text
Text{ "dark unlocking currency" },
},
{
// ambiguous text
Text{ "a Silver Rupee" },
},
Text{ "a Shadow Temple Silver Rupee" });
hintTable[RHT_GANONS_CASTLE_SILVER_RUPEE] = HintText::Item(
{
// obscure text
Text{ "evil unlocking currency" },
},
{
// ambiguous text
Text{ "a Silver Rupee" },
},
Text{ "a Ganon's Castle Silver Rupee" });
// TODO: End Translation
hintTable[RHT_EPONA] = HintText::Item({
//obscure text
Text{"a horse", /*french*/"un fidèle destrier", /*spanish*/"una yegua"},

View File

@ -287,7 +287,7 @@ Text AutoFormatHintText(const Text& unformattedHintText, const std::vector<std::
strings[i] = textStr;
}
return {strings[0], strings[1], ""/*spanish*/, strings[2]};
return {strings[0], strings[2], ""/*spanish*/, strings[1]};
}
std::array<DungeonHintInfo, 10> dungeonInfoData;
@ -615,6 +615,7 @@ void CreateGanonAndSheikText() {
}
ctx->AddHint(RH_GANONDORF_HINT, AutoFormatHintText(ganonHintText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
ctx->AddHint(RH_GANONDORF_NOHINT, AutoFormatHintText(ganonText), lightArrowLocation[0], HINT_TYPE_STATIC, "Static", lightArrowArea);
if (!ctx->GetOption(RSK_TRIAL_COUNT).Is(0)) {
sheikText = ::Hint(RHT_SHEIK_LIGHT_ARROW_HINT).GetText() + LightArrowAreaText + "%w.";
@ -963,7 +964,7 @@ static void DistributeHints(std::vector<uint8_t>& selected, size_t stoneCount, s
for (uint8_t distribution = 0; distribution < distTable.size(); distribution++){
currentWeight -= distTable[distribution].weight;
if (currentWeight <= 0){
if (stoneCount >= distTable[distribution].copies){
if (stoneCount >= distTable[distribution].copies || distTable[distribution].copies == 0){
selected[distribution] += 1;
stoneCount -= distTable[distribution].copies;
break;
@ -1074,8 +1075,9 @@ void CreateStoneHints() {
while(totalStones != 0){
totalStones = PlaceHints(selectedHints, distTable);
if (totalStones != 0){
while (totalStones != 0){
DistributeHints(selectedHints, totalStones, distTable, hintSetting.junkWeight, false);
totalStones = PlaceHints(selectedHints, distTable);
}
}

View File

@ -1061,6 +1061,63 @@ void GenerateItemPool() {
}
}
// Silver Rupees
// Add the Magical Silver Rupee if the option is on
if (ctx->GetOption(RSK_MAGICAL_SILVER_RUPEE)) {
AddItemToMainPool(RG_MAGICAL_SILVER_RUPEE);
}
// The Silver Rupees to add to the pool will be different according to which dungeons are vanilla/mq.
if (ctx->GetOption(RSK_SHUFFLE_SILVER_RUPEES).IsNot(RO_SILVER_SHUFFLE_VANILLA)) {
std::vector<RandomizerGet> 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_GROUNDS)->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->GetSilverRupees()->GetInfo(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);

View File

@ -42,6 +42,12 @@ void AreaTable_Init_BottomOfTheWell() {
LocationAccess(RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, {[]{return logic->Boomerang && (randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}}),
LocationAccess(RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, {[]{return logic->Boomerang && (randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3);}}),
LocationAccess(RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, {[]{return logic->SmallKeys(RR_BOTTOM_OF_THE_WELL, 3) && (randoCtx->GetTrickOption(RT_LENS_BOTW) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->Boomerang;}}),
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_BOTTOM_OF_THE_WELL_ENTRYWAY, {[]{return true;}}),

View File

@ -233,6 +233,11 @@ void AreaTable_Init_DodongosCavern() {
LocationAccess(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, {[]{return logic->CanStunDeku;}}),
LocationAccess(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, {[]{return logic->CanStunDeku;}}),
LocationAccess(RC_DODONGOS_CAVERN_GOSSIP_STONE, {[]{return true;}}),
LocationAccess(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_DODONGOS_CAVERN_MQ_LOWER_RIGHT_SIDE, {[]{return Here(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return logic->CanBlastOrSmash || (((logic->IsChild && logic->CanUse(RG_STICKS)) || logic->CanUse(RG_DINS_FIRE)) && logic->CanTakeDamage);});}}),

View File

@ -58,12 +58,23 @@ void AreaTable_Init_GanonsCastle() {
}, {
//Locations
LocationAccess(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, {[]{return logic->CanAdultDamage || logic->CanChildDamage;}}),
LocationAccess(RC_FOREST_TRIAL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FOREST_TRIAL_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FOREST_TRIAL_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FOREST_TRIAL_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FOREST_TRIAL_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Area("Ganon's Castle Fire Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
//Events
EventAccess(&logic->FireTrialClear, {[]{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LIGHT_ARROWS) && logic->CanUse(RG_LONGSHOT);}}),
}, {}, {});
}, {
LocationAccess(RC_FIRE_TRIAL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Area("Ganon's Castle Water Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
//Events
@ -93,6 +104,11 @@ void AreaTable_Init_GanonsCastle() {
//Locations
LocationAccess(RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, {[]{return (randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && logic->CanJumpslash;}}),
LocationAccess(RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, {[]{return (randoCtx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) || logic->CanUse(RG_HOOKSHOT)) && logic->HasBombchus && (randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH));}}),
LocationAccess(RC_SPIRIT_TRIAL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_TRIAL_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_TRIAL_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_TRIAL_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_TRIAL_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Area("Ganon's Castle Light Trial", "Ganon's Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
@ -108,6 +124,11 @@ void AreaTable_Init_GanonsCastle() {
LocationAccess(RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, {[]{return true;}}),
LocationAccess(RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, {[]{return randoCtx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH);}}),
LocationAccess(RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, {[]{return logic->CanUse(RG_ZELDAS_LULLABY) && logic->SmallKeys(RR_GANONS_CASTLE, 1);}}),
LocationAccess(RC_LIGHT_TRIAL_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_LIGHT_TRIAL_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_LIGHT_TRIAL_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_LIGHT_TRIAL_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_LIGHT_TRIAL_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {});
}
@ -169,7 +190,14 @@ void AreaTable_Init_GanonsCastle() {
//Events
EventAccess(&logic->FireTrialClear, {[]{return logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_LONGSHOT) || logic->HoverBoots || (randoCtx->GetTrickOption(RT_GANON_MQ_FIRE_TRIAL) && logic->CanUse(RG_HOOKSHOT)));}}),
//Trick: logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LIGHT_ARROWS) && (logic->CanUse(RG_LONGSHOT) || logic->HoverBoots || (LogicFireTrialMQ && logic->CanUse(RG_HOOKSHOT)))
}, {}, {});
}, {
// Locations
LocationAccess(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL] = Area("Ganon's Castle MQ Water Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
//Events
@ -178,6 +206,11 @@ void AreaTable_Init_GanonsCastle() {
}, {
//Locations
LocationAccess(RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, {[]{return logic->BlueFire;}}),
LocationAccess(RC_WATER_TRIAL_MQ_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_WATER_TRIAL_MQ_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_WATER_TRIAL_MQ_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_WATER_TRIAL_MQ_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_WATER_TRIAL_MQ_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL] = Area("Ganon's Castle MQ Shadow Trial", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {
@ -189,6 +222,11 @@ void AreaTable_Init_GanonsCastle() {
LocationAccess(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, {[]{return logic->IsAdult && ((logic->Bow && (logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_HOVER_BOOTS))) || (logic->CanUse(RG_HOVER_BOOTS) && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->HasExplosives || logic->GoronBracelet || logic->CanUse(RG_DINS_FIRE))));}}),
LocationAccess(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, {[]{return logic->IsAdult && logic->Bow && (randoCtx->GetTrickOption(RT_LENS_GANON_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->HoverBoots || (logic->Hookshot && (logic->HasFireSource || randoCtx->GetTrickOption(RT_GANON_MQ_SHADOW_TRIAL))));}}),
//Trick: logic->IsAdult && logic->Bow && (LogicLensCastleMQ || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->HoverBoots || (logic->Hookshot && (logic->HasFireSource || LogicShadowTrialMQ)))
LocationAccess(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GANONS_CASTLE_MQ_SPIRIT_TRIAL] = Area("Ganon's Castle MQ Spirit Castle", "Ganons Castle", RA_GANONS_CASTLE, NO_DAY_NIGHT_CYCLE, {

View File

@ -59,6 +59,16 @@ void AreaTable_Init_GerudoTrainingGrounds() {
areaTable[RR_GERUDO_TRAINING_GROUNDS_LAVA_ROOM] = Area("Gerudo Training Grounds Lava Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LocationAccess(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->IronBoots && logic->WaterTimer >= 24;}}),
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUNDS_CENTRAL_MAZE_RIGHT, {[]{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}}),
@ -94,6 +104,12 @@ void AreaTable_Init_GerudoTrainingGrounds() {
areaTable[RR_GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_ROOM] = Area("Gerudo Training Grounds Heavy Block Room", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LocationAccess(RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, {[]{return logic->CanJumpslash;}}),
// TODO: Maybe a new region for the boulder maze room? Not sure if that's needed or if it's fine for them to stay here.
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUNDS_EYE_STATUE_UPPER, {[]{return (randoCtx->GetTrickOption(RT_LENS_GTG) || logic->CanUse(RG_LENS_OF_TRUTH)) && (logic->CanUse(RG_HOOKSHOT) || (randoCtx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->CanUse(RG_HOVER_BOOTS)));}}),
@ -142,6 +158,9 @@ void AreaTable_Init_GerudoTrainingGrounds() {
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER] = Area("Gerudo Training Grounds MQ Underwater", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, {[]{return logic->HasFireSource && logic->IsAdult && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer >= 24 && logic->CanTakeDamage;}}),
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {});
areaTable[RR_GERUDO_TRAINING_GROUNDS_MQ_LEFT_SIDE] = Area("Gerudo Training Grounds MQ Left Side", "Gerudo Training Grounds", RA_GERUDO_TRAINING_GROUND, NO_DAY_NIGHT_CYCLE, {}, {
@ -160,6 +179,11 @@ void AreaTable_Init_GerudoTrainingGrounds() {
//Locations
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, {[]{return logic->IsAdult && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD));}}),
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, {[]{return logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD));}}),
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_BACK_AREAS, {[]{return logic->IsAdult && (logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && (randoCtx->GetTrickOption(RT_LENS_GTG_MQ) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->BlueFire && (logic->CanUse(RG_SONG_OF_TIME) || (randoCtx->GetTrickOption(RT_GTG_FAKE_WALL) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}}),
@ -182,6 +206,12 @@ void AreaTable_Init_GerudoTrainingGrounds() {
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, {[]{return true;}}),
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, {[]{return true;}}),
LocationAccess(RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, {[]{return logic->SmallKeys(RR_GERUDO_TRAINING_GROUNDS, 3);}}),
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER, {[]{return logic->IsAdult && (logic->CanUse(RG_LONGSHOT) || (logic->CanUse(RG_HOOKSHOT) && logic->Bow));}}),

View File

@ -38,6 +38,16 @@ void AreaTable_Init_IceCavern() {
LocationAccess(RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, {[]{return logic->HookshotOrBoomerang;}}),
LocationAccess(RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, {[]{return logic->BlueFire && logic->HookshotOrBoomerang;}}),
LocationAccess(RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, {[]{return logic->BlueFire && (logic->HookshotOrBoomerang || (randoCtx->GetTrickOption(RT_ICE_BLOCK_GS) && logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));}}),
LocationAccess(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {});
}

View File

@ -39,6 +39,11 @@ void AreaTable_Init_ShadowTemple() {
//Locations
LocationAccess(RC_SHADOW_TEMPLE_COMPASS_CHEST, {[]{return logic->CanJumpslash;}}),
LocationAccess(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, {[]{return logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT);}}),
LocationAccess(RC_SHADOW_SCYTHE_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_SCYTHE_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_SCYTHE_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_SCYTHE_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_SCYTHE_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, {[]{return false;}}),
}, {
//Exits
@ -50,10 +55,20 @@ void AreaTable_Init_ShadowTemple() {
//Locations
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, {[]{return logic->CanJumpslash;}}),
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, {[]{return logic->CanJumpslash;}}),
LocationAccess(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, {[]{return true;}}),
LocationAccess(RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, {[]{return (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->HoverBoots) || logic->GoronBracelet;}}),
LocationAccess(RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, {[]{return (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->HoverBoots) || logic->GoronBracelet;}}),
LocationAccess(RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, {[]{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && randoCtx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH));}}),
LocationAccess(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TEMPLE_FREESTANDING_KEY, {[]{return logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && randoCtx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->Hookshot && (logic->Bombs || logic->GoronBracelet || (randoCtx->GetTrickOption(RT_SHADOW_FREESTANDING_KEY) && logic->HasBombchus));}}),
LocationAccess(RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, {[]{return logic->CanJumpslash;}}),
LocationAccess(RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, {[]{return logic->Hookshot || (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->HoverBoots);}}),
@ -109,6 +124,11 @@ void AreaTable_Init_ShadowTemple() {
LocationAccess(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, {[]{return logic->CanAdultAttack || logic->Nuts;}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, {[]{return logic->CanJumpslash;}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, {[]{return logic->CanAdultAttack || logic->Nuts;}}),
LocationAccess(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, {[]{return logic->HasExplosives && logic->SmallKeys(RR_SHADOW_TEMPLE, 2);}}),
@ -120,6 +140,16 @@ void AreaTable_Init_ShadowTemple() {
//Trick: logic->CanUse(RG_SONG_OF_TIME) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO))
LocationAccess(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, {[]{return logic->CanUse(RG_SONG_OF_TIME) || (randoCtx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && randoCtx->GetOption(RSK_DAMAGE_MULTIPLIER).IsNot(RO_DAMAGE_MULTIPLIER_OHKO));}}),
//Trick: logic->CanUse(RG_SONG_OF_TIME) || (LogicShadowMQInvisibleBlades && DamageMultiplier.IsNot(DAMAGEMULTIPLIER_OHKO))
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, {[]{return logic->HasFireSource || randoCtx->GetTrickOption(RT_SHADOW_MQ_HUGE_PIT);}}),
@ -128,11 +158,26 @@ void AreaTable_Init_ShadowTemple() {
areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Area("Shadow Temple MQ Lower Huge Pit", "Shadow Temple", RA_SHADOW_TEMPLE, NO_DAY_NIGHT_CYCLE, {}, {
//Locations
LocationAccess(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, {[]{return logic->IsAdult && logic->CanUse(RG_LONGSHOT);}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, {[]{return true;}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, {[]{return (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->HoverBoots) || logic->GoronBracelet;}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, {[]{return (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA) && logic->HoverBoots) || logic->GoronBracelet;}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, {[]{return logic->CanJumpslash && logic->HoverBoots && logic->SmallKeys(RR_SHADOW_TEMPLE, 3) && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) && randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM)) || logic->CanUse(RG_LENS_OF_TRUTH));}}),
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, {[]{return (logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_MASTER_SWORD) || logic->CanUse(RG_BIGGORON_SWORD)) && logic->HoverBoots && logic->SmallKeys(RR_SHADOW_TEMPLE, 3) && logic->Hookshot && ((randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ) &&
randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) && randoCtx->GetTrickOption(RT_LENS_SHADOW_MQ_PLATFORM)) || logic->CanUse(RG_LENS_OF_TRUTH));}}),
LocationAccess(RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, {[]{return logic->Hookshot || (randoCtx->GetTrickOption(RT_SHADOW_UMBRELLA_GS) && logic->HoverBoots);}}),

View File

@ -32,6 +32,11 @@ void AreaTable_Init_SpiritTemple() {
}, {
//Locations
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, {[]{return (logic->Boomerang || logic->Slingshot || (logic->HasBombchus && randoCtx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives || ((logic->Nuts || logic->Boomerang) && (logic->Sticks || logic->KokiriSword || logic->Slingshot)));}}),
LocationAccess(RC_SPIRIT_GATE_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_GATE_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_GATE_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_GATE_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_GATE_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, {[]{return (logic->Boomerang || logic->Slingshot || (logic->HasBombchus && randoCtx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives || ((logic->Nuts || logic->Boomerang) && (logic->Sticks || logic->KokiriSword || logic->Slingshot))) && (logic->Sticks || logic->CanUse(RG_DINS_FIRE));}}),
LocationAccess(RC_SPIRIT_TEMPLE_GS_METAL_FENCE, {[]{return (logic->Boomerang || logic->Slingshot || (logic->HasBombchus && randoCtx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives || ((logic->Nuts || logic->Boomerang) && (logic->Sticks || logic->KokiriSword || logic->Slingshot)));}}),
}, {
@ -47,6 +52,11 @@ void AreaTable_Init_SpiritTemple() {
(logic->CanTakeDamage && (logic->CanJumpslash || logic->HasProjectile(HasProjectileAge::Child))) ||
(logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasProjectile(HasProjectileAge::Child)) ||
((logic->SmallKeys(RR_SPIRIT_TEMPLE, 3) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && randoCtx->GetOption(RSK_BOMBCHUS_IN_LOGIC) && randoCtx->GetOption(RSK_SHUFFLE_DUNGEON_ENTRANCES).Is(RO_DUNGEON_ENTRANCE_SHUFFLE_OFF))) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->HasProjectile(HasProjectileAge::Adult) || (logic->CanTakeDamage && logic->CanJumpslash)));}}),
LocationAccess(RC_SPIRIT_BEAMOS_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BEAMOS_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BEAMOS_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BEAMOS_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BEAMOS_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return logic->HasExplosives || (randoCtx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}}),
@ -59,6 +69,11 @@ void AreaTable_Init_SpiritTemple() {
LocationAccess(RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, {[]{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 3);}}),
LocationAccess(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, {[]{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 3);}}),
LocationAccess(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, {[]{return logic->CanUse(RG_SONG_OF_TIME) && (logic->Bow || logic->Hookshot || logic->HasBombchus || (logic->Bombs && randoCtx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)));}}),
LocationAccess(RC_SPIRIT_BOULDER_SILVER_RUPEE_1, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BOULDER_SILVER_RUPEE_2, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BOULDER_SILVER_RUPEE_3, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BOULDER_SILVER_RUPEE_4, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_BOULDER_SILVER_RUPEE_5, {[]{return true;}}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, {[]{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}}),
@ -147,6 +162,11 @@ void AreaTable_Init_SpiritTemple() {
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, {[]{return true;}}),
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, {[]{return Here(RR_SPIRIT_TEMPLE_MQ_LOBBY, []{return logic->CanBlastOrSmash;}) && ((logic->IsChild && logic->CanUse(RG_FAIRY_SLINGSHOT)) || (logic->IsAdult && logic->CanUse(RG_FAIRY_BOW)));}}),
LocationAccess(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, {[]{return logic->HasBombchus || (logic->IsAdult && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT))) || (logic->IsChild && (logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG)));}}),
LocationAccess(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
LocationAccess(RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5, {[]{ return true; }}), /*TODO: Silver Rupee Logic*/
}, {
//Exits
Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, {[]{return true;}}),

View File

@ -661,6 +661,9 @@ static void WriteAllLocations() {
auto ctx = Rando::Context::GetInstance();
for (const RandomizerCheck key : ctx->allLocations) {
Rando::ItemLocation* location = ctx->GetItemLocation(key);
if (Rando::StaticData::GetLocation(location->GetRandomizerCheck())->GetName().empty()) {
continue;
}
std::string placedItemName;
switch (ctx->GetOption(RSK_LANGUAGE).GetSelectedOptionIndex()) {

View File

@ -13,13 +13,19 @@ public:
: english(std::move(english_)),
french(std::move(french_)),
spanish(std::move(spanish_)),
german(std::move("")) {}
german(std::move("")) {
// german defaults to english text until a translation is provided.
german = english;
}
Text(std::string english_, std::string french_, std::string spanish_, std::string german_)
: english(std::move(english_)),
french(std::move(french_)),
spanish(std::move(spanish_)),
german(std::move(german_)) {}
Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {}
Text(std::string english_) : english(std::move(english_)), french(std::move("")), spanish(std::move("")), german(std::move("")) {
// default unprovided languages to english text
french = spanish = german = english;
}
const std::string& GetEnglish() const {
return english;

View File

@ -0,0 +1,64 @@
#include "z_en_g_switch_rando.h"
void EnGSwitch_Kill(EnGSwitch* this, PlayState* play);
void EnGSwitch_Randomizer_SilverRupeeIdle(EnGSwitch* self, PlayState* play) {
Player* player = GET_PLAYER(play);
self->actor.shape.rot.y += 0x800;
if (self->actor.xyzDistToPlayerSq < 900.0f) {
if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_SILVER_RUPEES) != RO_SILVER_SHUFFLE_VANILLA) {
player->getItemEntry = *self->giEntry;
if (self->giEntry->getItemId == RG_ICE_TRAP) {
Message_StartTextbox(play, 0xF8, NULL);
} else {
Message_StartTextbox(play, self->giEntry->textId, NULL);
}
if (self->giEntry->modIndex == MOD_NONE) {
// RANDOTOD: Move this into Item_Give() or some other more central location
if (self->giEntry->getItemId == GI_SWORD_BGS) {
gSaveContext.bgsFlag = true;
}
Item_Give(play, self->giEntry->itemId);
} else if (self->giEntry->modIndex == MOD_RANDOMIZER && self->giEntry->getItemId != RG_ICE_TRAP) {
Randomizer_Item_Give(play, *self->giEntry);
}
Flags_SetRandomizerInf(self->randInfFlag);
// if ((!CVarGetInteger("gSkulltulaFreeze", 0) || self->giEntry->itemId != ITEM_SKULL_TOKEN) &&
// self->giEntry->getItemId != RG_ICE_TRAP) {
// player->actor.freezeTimer = 20;
// }
// if (self->giEntry->getItemId == RG_ICE_TRAP && Message_GetState(&play->msgCtx) != TEXT_STATE_CLOSING) {
// player->actor.freezeTimer = 10;
// }
if (IS_RANDO) {
if (self->giEntry->getItemId != RG_ICE_TRAP) {
Audio_PlayFanfare_Rando(*self->giEntry);
} else {
gSaveContext.pendingIceTrapCount++;
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
}
} else {
Audio_PlayFanfare(NA_BGM_SMALL_ITEM_GET);
}
player->getItemEntry = (GetItemEntry)GET_ITEM_NONE;
self->killTimer = 0;
self->actionFunc = EnGSwitch_Kill;
}
}
}
void EnGSwitch_Randomizer_Draw(Actor* thisx, PlayState* play) {
EnGSwitch* this = (EnGSwitch*)thisx;
if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_SILVER_RUPEES) != RO_SILVER_SHUFFLE_VANILLA &&
this->type == ENGSWITCH_SILVER_RUPEE) {
OPEN_DISPS(play->state.gfxCtx);
Matrix_Scale(17.5f, 17.5f, 17.5f, MTXMODE_APPLY);
GetItemEntry_Draw(play, *this->giEntry);
CLOSE_DISPS(play->state.gfxCtx);
}
}

View File

@ -0,0 +1,17 @@
#ifndef SHIP_Z_EN_G_SWITCH_RANDO_H
#define SHIP_Z_EN_G_SWITCH_RANDO_H
#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h"
#ifdef __cplusplus
extern "C" {
#endif
void EnGSwitch_Randomizer_SilverRupeeIdle(EnGSwitch *self, PlayState *play);
void EnGSwitch_Randomizer_Draw(Actor *thisx, PlayState *play);
#ifdef __cplusplus
};
#endif
#endif //SHIP_Z_EN_G_SWITCH_RANDO_H

View File

@ -93,6 +93,7 @@ Context::Context() {
mTrials = std::make_shared<Trials>();
mSettings = std::make_shared<Settings>();
mFishsanity = std::make_shared<Fishsanity>();
mSilverRupees = std::make_shared<SilverRupees>();
for (auto& location : StaticData::GetLocationTable()) {
mSpoilerfileCheckNameToEnum[location.GetName()] = location.GetRandomizerCheck();
}
@ -581,4 +582,8 @@ Option& Context::GetOption(const RandomizerSettingKey key) const {
TrickOption& Context::GetTrickOption(const RandomizerTrick key) const {
return mSettings->GetTrickOption(key);
}
std::shared_ptr<SilverRupees> Context::GetSilverRupees() {
return mSilverRupees;
}
} // namespace Rando

View File

@ -7,6 +7,7 @@
#include "3drando/text.hpp"
#include "hint.h"
#include "fishsanity.h"
#include "silver_rupee.h"
#include <memory>
#include <array>
@ -68,6 +69,7 @@ class Context {
std::shared_ptr<EntranceShuffler> GetEntranceShuffler();
std::shared_ptr<Dungeons> GetDungeons();
std::shared_ptr<Fishsanity> GetFishsanity();
std::shared_ptr<SilverRupees> GetSilverRupees();
DungeonInfo* GetDungeon(size_t key) const;
std::shared_ptr<Logic> GetLogic();
void ResetLogic();
@ -114,6 +116,7 @@ class Context {
std::shared_ptr<Logic> mLogic;
std::shared_ptr<Trials> mTrials;
std::shared_ptr<Fishsanity> mFishsanity;
std::shared_ptr<SilverRupees> mSilverRupees;
bool mSeedGenerated = false;
bool mSpoilerLoaded = false;
bool mPlandoLoaded = false;

View File

@ -15,6 +15,7 @@
#include "objects/object_gi_fire/object_gi_fire.h"
#include "objects/object_fish/object_fish.h"
#include "objects/object_toki_objects/object_toki_objects.h"
#include "objects/object_gi_rupy/object_gi_rupy.h"
#include "objects/gameplay_field_keep/gameplay_field_keep.h"
#include "soh_assets.h"
#include "soh/Enhancements/cosmetics/cosmeticsTypes.h"
@ -518,5 +519,25 @@ extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getI
Matrix_Pop();
CLOSE_DISPS(play->state.gfxCtx);
}
extern "C" void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry) {
OPEN_DISPS(play->state.gfxCtx);
Color_RGB8 silverRupeeColor =
CVarGetColor24("gCosmetics.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);
}

View File

@ -21,6 +21,7 @@ void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry);
void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getItemEntry);
void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getItemEntry);
void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry);
void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry);
#ifdef __cplusplus
};
#endif

View File

@ -6,12 +6,15 @@
namespace Rando {
DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_, const RandomizerGet map_,
const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_,
const RandomizerGet bossKey_, RandomizerArea area_, const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_,
std::vector<RandomizerCheck> vanillaLocations_, std::vector<RandomizerCheck> mqLocations_,
std::vector<RandomizerCheck> sharedLocations_, std::vector<RandomizerCheck> bossRoomLocations_)
const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_,
const RandomizerGet bossKey_, std::unordered_set<RandomizerGet> vanillaSilverRupees_,
std::unordered_set<RandomizerGet> mqSilverRupees_, RandomizerArea area_,
const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_,
std::vector<RandomizerCheck> vanillaLocations_, std::vector<RandomizerCheck> mqLocations_,
std::vector<RandomizerCheck> sharedLocations_, std::vector<RandomizerCheck> bossRoomLocations_)
: name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_),
bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_),
bossKey(bossKey_), vanillaSilverRupees(std::move(vanillaSilverRupees_)), mqSilverRupees(std::move(mqSilverRupees_)),
area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_),
vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)),
sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) {
}
@ -51,6 +54,20 @@ bool DungeonInfo::IsVanilla() const {
return !masterQuest;
}
bool DungeonInfo::ContainsSilverRupee(RandomizerGet rg) const {
if (masterQuest) {
return mqSilverRupees.contains(rg);
}
return vanillaSilverRupees.contains(rg);
}
bool DungeonInfo::HasSilverRupees() const {
if (masterQuest) {
return !mqSilverRupees.empty();
}
return !vanillaSilverRupees.empty();
}
uint8_t DungeonInfo::GetSmallKeyCount() const {
return masterQuest ? mqKeyCount : vanillaKeyCount;
}
@ -152,7 +169,7 @@ std::vector<RandomizerCheck> DungeonInfo::GetEveryLocation() const {
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,
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,
{
// Vanilla Locations
RC_DEKU_TREE_MAP_CHEST,
@ -188,7 +205,7 @@ Dungeons::Dungeons() {
RC_QUEEN_GOHMA,
});
dungeonList[DODONGOS_CAVERN] = DungeonInfo("Dodongo's Cavern", RHT_DODONGOS_CAVERN, RG_DODONGOS_CAVERN_MAP,
RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0,
RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, {}, {RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE}, RA_DODONGOS_CAVERN, 0, 0,
{
// Vanilla Locations
RC_DODONGOS_CAVERN_MAP_CHEST,
@ -223,6 +240,11 @@ Dungeons::Dungeons() {
RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM,
RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM,
RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA,
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,
},
{},
{
@ -232,7 +254,7 @@ Dungeons::Dungeons() {
RC_KING_DODONGO,
});
dungeonList[JABU_JABUS_BELLY] = DungeonInfo("Jabu Jabu's Belly", RHT_JABU_JABUS_BELLY, RG_JABU_JABUS_BELLY_MAP,
RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0,
RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, {}, {}, RA_JABU_JABUS_BELLY, 0, 0,
{
// Vanilla Locations
RC_JABU_JABUS_BELLY_MAP_CHEST,
@ -271,7 +293,7 @@ Dungeons::Dungeons() {
});
dungeonList[FOREST_TEMPLE] =
DungeonInfo("Forest Temple", RHT_FOREST_TEMPLE, RG_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_COMPASS,
RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6,
RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, {}, {}, RA_FOREST_TEMPLE, 5, 6,
{
// Vanilla Locations
RC_FOREST_TEMPLE_FIRST_ROOM_CHEST,
@ -321,7 +343,7 @@ Dungeons::Dungeons() {
});
dungeonList[FIRE_TEMPLE] =
DungeonInfo("Fire Temple", RHT_FIRE_TEMPLE, RG_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_COMPASS,
RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5,
RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, {}, {}, RA_FIRE_TEMPLE, 8, 5,
{
// Vanilla Locations
RC_FIRE_TEMPLE_NEAR_BOSS_CHEST,
@ -372,7 +394,7 @@ Dungeons::Dungeons() {
});
dungeonList[WATER_TEMPLE] =
DungeonInfo("Water Temple", RHT_WATER_TEMPLE, RG_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_COMPASS,
RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2,
RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, {}, {}, RA_WATER_TEMPLE, 6, 2,
{
// Vanilla Locations
RC_WATER_TEMPLE_MAP_CHEST,
@ -413,7 +435,13 @@ Dungeons::Dungeons() {
});
dungeonList[SPIRIT_TEMPLE] =
DungeonInfo("Spirit Temple", RHT_SPIRIT_TEMPLE, RG_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_COMPASS,
RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7,
RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, {
RG_SPIRIT_BEAMOS_SILVER_RUPEE,
RG_SPIRIT_BOULDER_SILVER_RUPEE,
RG_SPIRIT_GATE_SILVER_RUPEE,
}, {
RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE,
}, RA_SPIRIT_TEMPLE, 5, 7,
{
// Vanilla Locations
RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
@ -438,6 +466,21 @@ Dungeons::Dungeons() {
RC_SPIRIT_TEMPLE_GS_LOBBY,
RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM,
RC_SPIRIT_TEMPLE_GS_METAL_FENCE,
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,
},
{
// MQ Locations
@ -466,6 +509,11 @@ Dungeons::Dungeons() {
RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST,
RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH,
RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM,
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,
},
{
// Shared Locations
@ -479,7 +527,16 @@ Dungeons::Dungeons() {
});
dungeonList[SHADOW_TEMPLE] =
DungeonInfo("Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS,
RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6,
RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, {
RG_SHADOW_SCYTHE_SILVER_RUPEE,
RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE,
RG_SHADOW_INVISIBLE_SPIKES_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,
}, RA_SHADOW_TEMPLE, 5, 6,
{
// Vanilla Locations
RC_SHADOW_TEMPLE_MAP_CHEST,
@ -504,6 +561,21 @@ Dungeons::Dungeons() {
RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT,
RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM,
RC_SHADOW_TEMPLE_GS_NEAR_SHIP,
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,
},
{
// MQ Locations
@ -532,6 +604,36 @@ Dungeons::Dungeons() {
RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND,
RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP,
RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS,
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,
},
{},
{
@ -541,7 +643,9 @@ Dungeons::Dungeons() {
});
dungeonList[BOTTOM_OF_THE_WELL] = DungeonInfo(
"Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_COMPASS,
RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2,
RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, {
RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE,
}, {}, RA_BOTTOM_OF_THE_WELL, 3, 2,
{
// Vanilla Locations
RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST,
@ -561,6 +665,11 @@ Dungeons::Dungeons() {
RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE,
RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM,
RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM,
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,
},
{
// MQ Locations
@ -575,7 +684,10 @@ Dungeons::Dungeons() {
},
{}, {});
dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS,
RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0,
RG_NONE, RG_NONE, RG_NONE,{
RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE,
RG_ICE_CAVERN_SLIDING_SILVER_RUPEE,
}, {}, RA_ICE_CAVERN, 0, 0,
{
// Vanilla Locations
RC_ICE_CAVERN_MAP_CHEST,
@ -585,6 +697,16 @@ Dungeons::Dungeons() {
RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM,
RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM,
RC_ICE_CAVERN_GS_HEART_PIECE_ROOM,
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,
},
{
// MQ Locations
@ -603,7 +725,15 @@ Dungeons::Dungeons() {
{});
dungeonList[GERUDO_TRAINING_GROUNDS] =
DungeonInfo("Gerudo Training Grounds", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE,
RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, RG_GERUDO_TRAINING_GROUNDS_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3,
RG_GERUDO_TRAINING_GROUNDS_SMALL_KEY, RG_GERUDO_TRAINING_GROUNDS_KEY_RING, RG_NONE, {
RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE,
RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE,
RG_GERUDO_TRAINING_GROUNDS_TOILET_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,
}, RA_GERUDO_TRAINING_GROUND, 9, 3,
{
// Vanilla Locations
RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST,
@ -628,6 +758,21 @@ Dungeons::Dungeons() {
RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST,
RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST,
RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY,
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,
},
{
// MQ Locations
@ -648,20 +793,58 @@ Dungeons::Dungeons() {
RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST,
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,
},
{}, {});
dungeonList[GANONS_CASTLE] =
DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY,
RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3,
RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, {
RG_FOREST_TRIAL_SILVER_RUPEE,
RG_FIRE_TRIAL_SILVER_RUPEE,
RG_SPIRIT_TRIAL_SILVER_RUPEE,
RG_LIGHT_TRIAL_SILVER_RUPEE,
}, {
RG_FIRE_TRIAL_MQ_SILVER_RUPEE,
RG_WATER_TRIAL_MQ_SILVER_RUPEE,
RG_SHADOW_TRIAL_MQ_SILVER_RUPEE,
}, RA_GANONS_CASTLE, 2, 3,
{
// Vanilla Locations
RC_GANONS_CASTLE_FOREST_TRIAL_CHEST,
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_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST,
RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST,
RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST,
RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST,
RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST,
RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST,
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,
RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST,
@ -670,6 +853,11 @@ Dungeons::Dungeons() {
RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST,
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_GANONS_CASTLE_DEKU_SCRUB_LEFT,
RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT,
RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT,
@ -678,11 +866,26 @@ Dungeons::Dungeons() {
{
// MQ Locations
RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST,
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_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST,
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_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST,
RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST,
RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST,
RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST,
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_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST,
RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST,
RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST,

View File

@ -6,15 +6,17 @@
#include <vector>
#include <string>
#include "nlohmann/json.hpp"
#include <unordered_set>
namespace Rando {
class DungeonInfo {
public:
DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_,
RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_,
uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, std::vector<RandomizerCheck> vanillaLocations_,
std::vector<RandomizerCheck> mqLocations_, std::vector<RandomizerCheck> sharedLocations_,
std::vector<RandomizerCheck> bossRoomLocations_);
RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_,
std::unordered_set<RandomizerGet> vanillaSilverRupees_, std::unordered_set<RandomizerGet> mqSilverRupees_,
RandomizerArea area_, uint8_t vanillaKeyCount_, uint8_t mqKeyCount_,
std::vector<RandomizerCheck> vanillaLocations_, std::vector<RandomizerCheck> mqLocations_,
std::vector<RandomizerCheck> sharedLocations_, std::vector<RandomizerCheck> bossRoomLocations_);
DungeonInfo();
~DungeonInfo();
@ -26,6 +28,8 @@ class DungeonInfo {
void ClearKeyRing();
bool HasKeyRing() const;
bool IsVanilla() const;
bool ContainsSilverRupee(RandomizerGet rg) const;
bool HasSilverRupees() const;
uint8_t GetSmallKeyCount() const;
RandomizerHintTextKey GetHintKey() const;
RandomizerArea GetArea() const;
@ -50,6 +54,8 @@ class DungeonInfo {
RandomizerGet smallKey;
RandomizerGet keyRing;
RandomizerGet bossKey;
std::unordered_set<RandomizerGet> vanillaSilverRupees;
std::unordered_set<RandomizerGet> mqSilverRupees;
uint8_t vanillaKeyCount{};
uint8_t mqKeyCount{};
bool masterQuest = false;

View File

@ -15,6 +15,7 @@ enum ItemType {
ITEMTYPE_COMPASS,
ITEMTYPE_BOSSKEY,
ITEMTYPE_SMALLKEY,
ITEMTYPE_SILVERRUPEE,
ITEMTYPE_TOKEN,
ITEMTYPE_FORTRESS_SMALLKEY,
ITEMTYPE_EVENT,

View File

@ -290,6 +290,66 @@ void Rando::StaticData::InitItemTable() {
itemTable[RG_TRIFORCE] = Item(RG_TRIFORCE, Text{ "Triforce", "Triforce", "Triforce" }, ITEMTYPE_EVENT, RG_TRIFORCE, false, &logic->noVariable, RHT_NONE);
itemTable[RG_HINT] = Item(RG_HINT, Text{ "Hint", "Indice", "Hinweis" }, ITEMTYPE_EVENT, RG_HINT, false, &logic->noVariable, RHT_NONE);
itemTable[RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE] = Item(RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, Text{ "Ice Cavern Spinning Blades Room Silver Rupee", "Ice Cavern Spinning Blades Room Silver Rupee", "Ice Cavern Spinning Blades Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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 Room Silver Rupee", "Ice Cavern Block Sliding Room Silver Rupee", "Ice Cavern Block Sliding Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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 Boudler Maze Silver Rupee", "GTG Boulder Maze Silver Rupee", "GTG Boulder Maze Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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 Toilet Room Silver Rupee", "GTG Whirlpool Room Silver Rupee", "GTG Whirlpool Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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 Room Silver Rupee", "Spirit Temple Child Gate Room Silver Rupee", "Spirit Temple Child Gate Room Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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 Child Block Pushing Room Silver Rupee", "Spirit Temple Child Block Pushing Room Silver Rupee", "Spirit Temple Child Block Pushing Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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->noVariable, 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 Outside Falling Spikes Room Silver Rupee", "Shadow Temple Outside Falling Spikes Room Silver Rupee", "Shadow Temple Outside Falling Spikes Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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{ "Forest Trial Silver Rupee", "Forest Trial Silver Rupee", "Forest Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Fire Trial Silver Rupee", "Fire Trial Silver Rupee", "Fire Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Spirit Trial Silver Rupee", "Spirit Trial Silver Rupee", "Spirit Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Light Trial Silver Rupee", "Light Trial Silver Rupee", "Light Trial Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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->noVariable, 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->noVariable, 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 Outside Falling Spikes Silver Rupee", "Shadow Temple MQ Outside Falling Spikes Silver Rupee", "Shadow Temple MQ Outside Falling Spikes Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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->noVariable, 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->noVariable, 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{ "Gerudo Training Grounds MQ Boulder Maze Silver Rupee", "Gerudo Training Grounds MQ Boulder Maze Silver Rupee", "Gerudo Training Grounds MQ Boulder Maze Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Gerudo Training Grounds MQ Lava Room Silver Rupee", "Gerudo Training Grounds MQ Lava Room Silver Rupee", "Gerudo Training Grounds MQ Lava Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Gerudo Training Grounds MQ Whirlpool Room Silver Rupee", "Gerudo Training Grounds MQ Whirlpool Room Silver Rupee", "Gerudo Training Grounds MQ Whirlpool Room Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Fire Trial MQ Silver Rupee", "Fire Trial MQ Silver Rupee", "Fire Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Water Trial MQ Silver Rupee", "Water Trial MQ Silver Rupee", "Water Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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{ "Shadow Trial MQ Silver Rupee", "Shadow Trial MQ Silver Rupee", "Shadow Trial MQ Silver Rupee"}, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, 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_MAGICAL_SILVER_RUPEE] = Item(RG_MAGICAL_SILVER_RUPEE, Text{ "Magical Silver Rupee", "Magical Silver Rupee", "Magical Silver Rupee" }, ITEMTYPE_SILVERRUPEE, 0, true, &logic->noVariable, RHT_MAGICAL_SILVER_RUPEE, RG_MAGICAL_SILVER_RUPEE, OBJECT_GI_RUPY, GID_RUPEE_GOLD, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_SILVER_RUPEE, MOD_RANDOMIZER);
itemTable[RG_MAGICAL_SILVER_RUPEE].SetCustomDrawFunc(Randomizer_DrawSilverRupee);
// Individual stages of progressive items (only here for GetItemEntry purposes, not for use in seed gen)
itemTable[RG_HOOKSHOT] = Item(RG_HOOKSHOT, Text{ "Hookshot", "Grappin", "Fanghaken" }, ITEMTYPE_ITEM, GI_HOOKSHOT, true, &logic->ProgressiveHookshot, RHT_HOOKSHOT, ITEM_HOOKSHOT, OBJECT_GI_HOOKSHOT, GID_HOOKSHOT, 0x36, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);
itemTable[RG_LONGSHOT] = Item(RG_LONGSHOT, Text{ "Longshot", "Super-Grappin", "Enterhaken" }, ITEMTYPE_ITEM, GI_LONGSHOT, true, &logic->ProgressiveHookshot, RHT_LONGSHOT, ITEM_LONGSHOT, OBJECT_GI_HOOKSHOT, GID_LONGSHOT, 0x4F, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE);

View File

@ -16,10 +16,10 @@ class SpoilerCollectionCheck {
public:
SpoilerCollectionCheckType type = SPOILER_CHK_NONE;
uint8_t scene = 0;
uint8_t flag = 0;
uint16_t flag = 0;
SpoilerCollectionCheck() = default;
SpoilerCollectionCheck(const SpoilerCollectionCheckType type_, const uint8_t scene_, const uint8_t flag_)
SpoilerCollectionCheck(const SpoilerCollectionCheckType type_, const uint8_t scene_, const uint16_t flag_)
: type(type_), scene(scene_), flag(flag_) {
}
@ -95,7 +95,7 @@ class SpoilerCollectionCheck {
return SpoilerCollectionCheck(SPOILER_CHK_MERCHANT, scene, flag);
}
static auto RandomizerInf(const int8_t scene, const uint8_t flag) {
static auto RandomizerInf(const int8_t scene, const uint16_t flag) {
return SpoilerCollectionCheck(SPOILER_CHK_RANDOMIZER_INF, scene, flag);
}
};
@ -108,6 +108,7 @@ enum class LocationType {
GrottoScrub,
Delayed,
TempleReward,
SilverRupee,
HintStone,
OtherHint,
};

View File

@ -1,6 +1,7 @@
#include "static_data.h"
#define TWO_ACTOR_PARAMS(a, b) (abs(a) << 16) | abs(b)
#define THREE_ACTOR_PARAMS(a, b, c) (abs(a) << 32 | abs(b) << 16 | abs(c))
std::array<Rando::Location, RC_MAX> Rando::StaticData::locationTable;
@ -1512,6 +1513,183 @@ void Rando::StaticData::InitLocationTable() {
locationTable[RC_ZD_FISH_4] = Location::Base(RC_ZD_FISH_4, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 3, 0x00, "Fish 4", "ZD Fish 4", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
locationTable[RC_ZD_FISH_5] = Location::Base(RC_ZD_FISH_5, RCQUEST_BOTH, RCTYPE_FISH, RCAREA_ZORAS_DOMAIN, ACTOR_EN_FISH, SCENE_ZORAS_DOMAIN, -1 ^ 4, 0x00, "Fish 5", "ZD Fish 5", RHT_ZD_FISH, RG_FISH, { Category::cFish }, SpoilerCollectionCheck::Fish(0xFF, SCENE_ZORAS_DOMAIN), SpoilerCollectionCheckGroup::GROUP_ZORAS_DOMAIN);
// Silver Rupees
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,0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "Sliding Puzzle Silver Rupee 1", "Ice Cavern Sliding Puzzle Silver Rupee 1", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "Sliding Puzzle Silver Rupee 2", "Ice Cavern Sliding Puzzle Silver Rupee 2", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "Sliding Puzzle Silver Rupee 3", "Ice Cavern Sliding Puzzle Silver Rupee 3", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "Sliding Puzzle Silver Rupee 4", "Ice Cavern Sliding Puzzle Silver Rupee 4", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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,0, 0x0, "Sliding Puzzle Silver Rupee 5", "Ice Cavern Sliding Puzzle Silver Rupee 5", RHT_ICE_CAVERN_SLIDING_SILVER_RUPEE, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_ICE_CAVERN, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_BOTTOM_OF_THE_WELL, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_BOTTOM_OF_THE_WELL, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_BOTTOM_OF_THE_WELL, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_BOTTOM_OF_THE_WELL, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_BOTTOM_OF_THE_WELL, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "Child Gate Silver Rupee 1", "Spirit Temple Child Gate Silver Rupee 1", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Child Gate Silver Rupee 2", "Spirit Temple Child Gate Silver Rupee 2", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Child Gate Silver Rupee 3", "Spirit Temple Child Gate Silver Rupee 3", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Child Gate Silver Rupee 4", "Spirit Temple Child Gate Silver Rupee 4", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Child Gate Silver Rupee 5", "Spirit Temple Child Gate Silver Rupee 5", RHT_SPIRIT_GATE_SILVER_RUPEE, RG_SPIRIT_GATE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Beamos Room Silver Rupee 1", "Spirit Beamos Room Silver Rupee 1", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Beamos Room Silver Rupee 2", "Spirit Beamos Room Silver Rupee 2", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Beamos Room Silver Rupee 3", "Spirit Beamos Room Silver Rupee 3", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Beamos Room Silver Rupee 4", "Spirit Beamos Room Silver Rupee 4", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Beamos Room Silver Rupee 5", "Spirit Beamos Room Silver Rupee 5", RHT_SPIRIT_BEAMOS_SILVER_RUPEE, RG_SPIRIT_BEAMOS_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Boulder Room Silver Rupee 1", "Spirit Boulder Room Silver Rupee 1", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Boulder Room Silver Rupee 2", "Spirit Boulder Room Silver Rupee 2", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Boulder Room Silver Rupee 3", "Spirit Boulder Room Silver Rupee 3", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Boulder Room Silver Rupee 4", "Spirit Boulder Room Silver Rupee 4", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Boulder Room Silver Rupee 5", "Spirit Boulder Room Silver Rupee 5", RHT_SPIRIT_BOULDER_SILVER_RUPEE, RG_SPIRIT_BOULDER_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 1", "Shadow Spinning Scythe Silver Rupee 1", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 2", "Shadow Spinning Scythe Silver Rupee 2", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 3", "Shadow Spinning Scythe Silver Rupee 3", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 4", "Shadow Spinning Scythe Silver Rupee 4", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 5", "Shadow Spinning Scythe Silver Rupee 5", RHT_SHADOW_SPINNING_SCYTHE_SILVER_RUPEE, RG_SHADOW_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Forest Trial Silver Rupee 1", "Inside Ganon's Castle Forest Trial Silver Rupee 1", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Forest Trial Silver Rupee 2", "Inside Ganon's Castle Forest Trial Silver Rupee 2", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Forest Trial Silver Rupee 3", "Inside Ganon's Castle Forest Trial Silver Rupee 3", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Forest Trial Silver Rupee 4", "Inside Ganon's Castle Forest Trial Silver Rupee 4", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Forest Trial Silver Rupee 5", "Inside Ganon's Castle Forest Trial Silver Rupee 5", RHT_FOREST_TRIAL_SILVER_RUPEE, RG_FOREST_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Fire Trial Silver Rupee 1", "Inside Ganon's Castle Fire Trial Silver Rupee 1", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Fire Trial Silver Rupee 2", "Inside Ganon's Castle Fire Trial Silver Rupee 2", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Fire Trial Silver Rupee 3", "Inside Ganon's Castle Fire Trial Silver Rupee 3", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Fire Trial Silver Rupee 4", "Inside Ganon's Castle Fire Trial Silver Rupee 4", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Fire Trial Silver Rupee 5", "Inside Ganon's Castle Fire Trial Silver Rupee 5", RHT_FIRE_TRIAL_SILVER_RUPEE, RG_FIRE_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Spirit Trial Silver Rupee 1", "Inside Ganon's Castle Spirit Trial Silver Rupee 1", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Spirit Trial Silver Rupee 2", "Inside Ganon's Castle Spirit Trial Silver Rupee 2", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Spirit Trial Silver Rupee 3", "Inside Ganon's Castle Spirit Trial Silver Rupee 3", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Spirit Trial Silver Rupee 4", "Inside Ganon's Castle Spirit Trial Silver Rupee 4", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Spirit Trial Silver Rupee 5", "Inside Ganon's Castle Spirit Trial Silver Rupee 5", RHT_SPIRIT_TRIAL_SILVER_RUPEE, RG_SPIRIT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Light Trial Silver Rupee 1", "Inside Ganon's Castle Light Trial Silver Rupee 1", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Light Trial Silver Rupee 2", "Inside Ganon's Castle Light Trial Silver Rupee 2", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Light Trial Silver Rupee 3", "Inside Ganon's Castle Light Trial Silver Rupee 3", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Light Trial Silver Rupee 4", "Inside Ganon's Castle Light Trial Silver Rupee 4", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Light Trial Silver Rupee 5", "Inside Ganon's Castle Light Trial Silver Rupee 5", RHT_LIGHT_TRIAL_SILVER_RUPEE, RG_LIGHT_TRIAL_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "Silver Rupee 1", "Dodongo's Cavern Silver Rupee 1", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_DODONGOS_CAVERN, 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, 0, 0x0, "Silver Rupee 2", "Dodongo's Cavern Silver Rupee 2", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_DODONGOS_CAVERN, 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, 0, 0x0, "Silver Rupee 3", "Dodongo's Cavern Silver Rupee 3", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_DODONGOS_CAVERN, 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, 0, 0x0, "Silver Rupee 4", "Dodongo's Cavern Silver Rupee 4", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_DODONGOS_CAVERN, 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, 0, 0x0, "Silver Rupee 5", "Dodongo's Cavern Silver Rupee 5", RHT_DODONGOS_CAVERN_SILVER_RUPEE, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_DODONGOS_CAVERN, 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, 0, 0x0, "Spinning Scythe Silver Rupee 1", "Shadow Temple MQ Spinning Scythe Silver Rupee 1", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 2", "Shadow Temple MQ Spinning Scythe Silver Rupee 2", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 3", "Shadow Temple MQ Spinning Scythe Silver Rupee 3", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 4", "Shadow Temple MQ Spinning Scythe Silver Rupee 4", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Spinning Scythe Silver Rupee 5", "Shadow Temple MQ Spinning Scythe Silver Rupee 5", RHT_SHADOW_TEMPLE_SILVER_RUPEE, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2));
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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, RAND_INF_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4));
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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SHADOW_TEMPLE, 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, 0, 0x0, "Lobby Silver Rupee 1", "Spirit Temple MQ Lobby Silver Rupee 1", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Lobby Silver Rupee 2", "Spirit Temple MQ Lobby Silver Rupee 2", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Lobby Silver Rupee 3", "Spirit Temple MQ Lobby Silver Rupee 3", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Lobby Silver Rupee 4", "Spirit Temple MQ Lobby Silver Rupee 4", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "Lobby Silver Rupee 5", "Spirit Temple MQ Lobby Silver Rupee 5", RHT_SPIRIT_TEMPLE_SILVER_RUPEE, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_SPIRIT_TEMPLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_GERUDO_TRAINING_GROUND, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, 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, 0, 0x0, "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, {Category::cSilverRupee}, SpoilerCollectionCheck::RandomizerInf(SCENE_INSIDE_GANONS_CASTLE, RAND_INF_SHADOW_TRIAL_MQ_SILVER_RUPEE_5));
// Gossip Stones
// RandomizerCheck Randomizer Check Quest Area Scene Params Flag Short Name Spoiler name Categories
@ -1568,7 +1746,7 @@ void Rando::StaticData::InitLocationTable() {
locationTable[RC_FISHING_POLE_HINT] = Location::OtherHint(RC_FISHING_POLE_HINT,RCQUEST_BOTH, RCTYPE_GOSSIP_STONE, RCAREA_LAKE_HYLIA, ACTOR_FISHING, SCENE_FISHING_POND, "Fishing Pole Hint","Fishing Pole Hint");
locationTable[RC_TRIFORCE_COMPLETED] = Location::Reward(RC_TRIFORCE_COMPLETED, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_MARKET, ACTOR_ID_MAX, SCENE_ID_MAX, 0x00, 0x00, "Completed Triforce", "Completed Triforce", RHT_NONE, RG_NONE, {}, SpoilerCollectionCheck::None(), SpoilerCollectionCheckGroup::GROUP_NO_GROUP);
// clang-format on
// clang-format on
}
Location* Rando::StaticData::GetLocation(RandomizerCheck locKey) {

View File

@ -395,6 +395,17 @@ void Settings::CreateOptionDescriptions() {
"Overworld - Boss Keys can only appear outside of dungeons.\n"
"\n"
"Anywhere - Boss Keys can appear anywhere in the world.";
mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES] = "Vanilla - Silver Rupees will appear in their vanilla locations.\n"
"\n"
"Own dungeon - Silver Rupees can only appear in their respective dungeon.\n"
"\n"
"Any dungeon - Silver Rupees can only appear inside of any dungeon.\n"
"\n"
"Overworld - Silver Rupees can only appear outside of dungeons.\n"
"\n"
"Anywhere - Silver Rupees can appear anywhere in the world.";
mOptionDescriptions[RSK_MAGICAL_SILVER_RUPEE] = "Adds a Magical Silver Rupee that opens all silver rupee puzzles to the item pool."
"It is not considered in logic, so you will not be required to find it to beat the seed, but if you do find it, it is a nice bonus.";
mOptionDescriptions[RSK_GANONS_BOSS_KEY] =
"Vanilla - Ganon's Boss Key will appear in the vanilla location.\n"
"\n"

View File

@ -271,7 +271,7 @@ void Randomizer::LoadHintMessages() {
CustomMessage(ctx->GetHint(RH_GANONDORF_HINT)->GetText()));
CustomMessageManager::Instance->CreateMessage(
Randomizer::hintMessageTableID, TEXT_GANONDORF_NOHINT,
CustomMessage(ctx->GetHint(RH_SARIA)->GetText()));//RANDOTODO: Change to RH_BLANK or remove {{message}} replacment
CustomMessage(ctx->GetHint(RH_GANONDORF_NOHINT)->GetText()));
CustomMessageManager::Instance->CreateMessage(
Randomizer::hintMessageTableID, TEXT_SHEIK_NEED_HOOK,
CustomMessage("{{message}}", "{{message}}", "{{message}}"));
@ -2849,6 +2849,28 @@ void CreateGetItemMessages(const std::array<GetItemMessage, N>* messageEntries)
CustomMessage(messageEntry.english, messageEntry.german, messageEntry.french, TEXTBOX_TYPE_BLUE,
TEXTBOX_POS_BOTTOM));
}
// Special Case for Silver Rupees
//TODO: AI Translated Text, get translation from native speaker.
customMessageManager->CreateMessage(
Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_FIRST,
CustomMessage("You got a %cSilver Rupee%w for the&%g{{location}}%w!&{{count_text}}!",
"Du hast eine %cSilberne Rupie%w für die&%g{{location}}%w!{{count_text}}!",
"Vous avez reçu une %cRoupie d'Argent%w pour le&%g{{location}}%w!{{count_text}}!",
TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM));
// Special Case for Silver Rupee Pouches
// customMessageManager->CreateMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_POUCH_FIRST,
// { TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM,
// "You got a %cSilver Rupee Pouch%w for the&%g{{location}}%w!",
// "Du hast einen %cBeutel mit Silberrupien%g für die für die&%g{{location}}%w!",
// "Vous avez reçu une %cPochette en Roupie d'Argent%w pour le&%g{{location}}%w!" });
customMessageManager->CreateMessage(Randomizer::getItemMessageTableID, RG_MAGICAL_SILVER_RUPEE,
CustomMessage("You found the %cMagical Silver Rupee%w!&This magical silver "
"rupee automatically&completes all Silver Rupee Puzzles!",
"You found the %cMagical Silver Rupee%w!&This magical silver "
"rupee automatically&completes all Silver Rupee Puzzles!",
"You found the %cMagical Silver Rupee%w!&This magical silver "
"rupee automatically&completes all Silver Rupee Puzzles!",
TEXTBOX_TYPE_BLUE, TEXTBOX_POS_BOTTOM));
}
void CreateRupeeMessages() {

View File

@ -1,7 +1,7 @@
#pragma once
#include <stdint.h>
#include "z64item.h"
#include <z64item.h>
#include "randomizer_inf.h"
#define MAX_TRICK_NAME_SIZE 50
@ -114,6 +114,7 @@ typedef enum {
RCTYPE_OCARINA, // Ocarina locations
RCTYPE_BEEHIVE, // Beehives
RCTYPE_FISH,
RCTYPE_SILVER_RUPEE
} RandomizerCheckType;
typedef enum { RCQUEST_VANILLA, RCQUEST_MQ, RCQUEST_BOTH } RandomizerCheckQuest;
@ -1044,6 +1045,11 @@ typedef enum {
RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM,
RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM,
RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA,
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_DODONGOS_CAVERN_BOSS_ROOM_CHEST,
RC_DODONGOS_CAVERN_KING_DODONGO_HEART,
RC_JABU_JABUS_BELLY_BOOMERANG_CHEST,
@ -1088,6 +1094,11 @@ typedef enum {
RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM,
RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM,
RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE,
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_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST,
RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY,
RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST,
@ -1213,6 +1224,21 @@ typedef enum {
RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST,
RC_SHADOW_TEMPLE_BOSS_KEY_CHEST,
RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST,
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_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM,
RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM,
RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT,
@ -1243,6 +1269,36 @@ typedef enum {
RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND,
RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP,
RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS,
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_SHADOW_TEMPLE_BONGO_BONGO_HEART,
RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST,
RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST,
@ -1271,6 +1327,21 @@ typedef enum {
RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST,
RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST,
RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST,
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_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST,
RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST,
RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST,
@ -1283,6 +1354,11 @@ typedef enum {
RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST,
RC_SPIRIT_TEMPLE_TOPMOST_CHEST,
RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST,
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_SPIRIT_TEMPLE_GS_METAL_FENCE,
RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM,
RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM,
@ -1301,6 +1377,16 @@ typedef enum {
RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM,
RC_ICE_CAVERN_GS_HEART_PIECE_ROOM,
RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM,
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_ICE_CAVERN_MQ_MAP_CHEST,
RC_ICE_CAVERN_MQ_COMPASS_CHEST,
RC_ICE_CAVERN_MQ_FREESTANDING_POH,
@ -1330,6 +1416,21 @@ typedef enum {
RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST,
RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST,
RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST,
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_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST,
@ -1347,7 +1448,31 @@ typedef enum {
RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST,
RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST,
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_GANONS_CASTLE_FOREST_TRIAL_CHEST,
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_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST,
RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST,
RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST,
@ -1360,8 +1485,18 @@ typedef enum {
RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST,
RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST,
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_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST,
RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST,
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,
RC_GANONS_CASTLE_DEKU_SCRUB_LEFT,
RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT,
RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT,
@ -1369,9 +1504,24 @@ typedef enum {
RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY,
RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST,
RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST,
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_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST,
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_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST,
RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST,
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_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST,
RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST,
RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST,
@ -1959,6 +2109,37 @@ typedef enum {
RG_OCARINA_C_LEFT_BUTTON,
RG_OCARINA_C_RIGHT_BUTTON,
RG_FISHING_POLE,
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_MAGICAL_SILVER_RUPEE,
RG_HINT,
RG_TYCOON_WALLET,
RG_BRONZE_SCALE,
@ -2968,6 +3149,25 @@ typedef enum {
RHT_BEEHIVE_SCRUB_TRIO_GROTTO,
RHT_BEEHIVE_IN_FRONT_OF_KING_ZORA,
RHT_BEEHIVE_BEHIND_KING_ZORA,
// Silver Rupees
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,
// TODO: MQ Silver Rupees
// Items
RHT_KOKIRI_SWORD,
RHT_MASTER_SWORD,
@ -3207,6 +3407,13 @@ typedef enum {
RHT_OCARINA_C_RIGHT_BUTTON,
RHT_BRONZE_SCALE,
RHT_FISHING_POLE,
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,
// Entrances
RHT_DESERT_COLOSSUS_TO_COLOSSUS_GROTTO,
@ -3662,6 +3869,8 @@ typedef enum {
RSK_FISHSANITY_POND_COUNT,
RSK_FISHSANITY_AGE_SPLIT,
RSK_SHUFFLE_FISHING_POLE,
RSK_SHUFFLE_SILVER_RUPEES,
RSK_MAGICAL_SILVER_RUPEE,
RSK_MAX
} RandomizerSettingKey;
@ -3811,6 +4020,16 @@ typedef enum {
RO_DUNGEON_ITEM_LOC_ANYWHERE,
} RandoOptionDungeonItemLocation;
// Silver Rupees (vanilla, own dungeon, any dungeon, overworld,
// anywhere
typedef enum {
RO_SILVER_SHUFFLE_VANILLA,
RO_SILVER_SHUFFLE_OWN_DUNGEON,
RO_SILVER_SHUFFLE_ANY_DUNGEON,
RO_SILVER_SHUFFLE_OVERWORLD,
RO_SILVER_SHUFFLE_ANYWHERE,
} RandoOptionSilverRupeeLocation;
//Dungeon reward settings
typedef enum {
RO_DUNGEON_REWARDS_END_OF_DUNGEON,

View File

@ -154,7 +154,6 @@ typedef enum {
RAND_INF_GREG_FOUND,
RAND_INF_TOT_MASTER_SWORD,
RAND_INF_CHILD_FISHING,
@ -267,7 +266,162 @@ typedef enum {
RAND_INF_ZD_FISH_4,
RAND_INF_ZD_FISH_5,
// 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;

View File

@ -127,6 +127,8 @@ void Settings::CreateOptions() {
mOptions[RSK_KEYSANITY] = Option::U8("Small Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeKeysanity", mOptionDescriptions[RSK_KEYSANITY], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
mOptions[RSK_GERUDO_KEYS] = Option::U8("Gerudo Fortress Keys", {"Vanilla", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeGerudoKeys", mOptionDescriptions[RSK_GERUDO_KEYS], WidgetType::Combobox, RO_GERUDO_KEYS_VANILLA);
mOptions[RSK_BOSS_KEYSANITY] = Option::U8("Boss Keys", {"Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeBossKeysanity", mOptionDescriptions[RSK_BOSS_KEYSANITY], WidgetType::Combobox, RO_DUNGEON_ITEM_LOC_OWN_DUNGEON);
mOptions[RSK_SHUFFLE_SILVER_RUPEES] = Option::U8("Silver Rupees", {"Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"}, OptionCategory::Setting, "gRandomizeSilverRupeeShuffle", mOptionDescriptions[RSK_SHUFFLE_SILVER_RUPEES], WidgetType::Combobox, RO_SILVER_SHUFFLE_VANILLA);
mOptions[RSK_MAGICAL_SILVER_RUPEE] = Option::Bool("Magical Silver Rupee", "gRandomizeMagicalSilverRupee", mOptionDescriptions[RSK_MAGICAL_SILVER_RUPEE]);
mOptions[RSK_GANONS_BOSS_KEY] = Option::U8("Ganon's Boss Key", {"Vanilla", "Own Dungeon", "Start With", "Any Dungeon", "Overworld", "Anywhere", "LACS-Vanilla", "LACS-Stones", "LACS-Medallions", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens", "Triforce Hunt"}, OptionCategory::Setting, "gRandomizeShuffleGanonBossKey", mOptionDescriptions[RSK_GANONS_BOSS_KEY], WidgetType::Combobox, RO_GANON_BOSS_KEY_VANILLA);
mOptions[RSK_LACS_STONE_COUNT] = Option::U8("Stone Count", {NumOpts(0, 4)}, OptionCategory::Setting, "gRandomizeLacsStoneCount", "", WidgetType::Slider, 3, true);
mOptions[RSK_LACS_MEDALLION_COUNT] = Option::U8("Medallion Count", {NumOpts(0, 7)}, OptionCategory::Setting, "gRandomizeLacsMedallionCount", "", WidgetType::Slider, 6, true);
@ -686,6 +688,8 @@ void Settings::CreateOptions() {
&mOptions[RSK_KEYSANITY],
&mOptions[RSK_GERUDO_KEYS],
&mOptions[RSK_BOSS_KEYSANITY],
&mOptions[RSK_SHUFFLE_SILVER_RUPEES],
&mOptions[RSK_MAGICAL_SILVER_RUPEE],
&mOptions[RSK_GANONS_BOSS_KEY],
&mOptions[RSK_LACS_STONE_COUNT],
&mOptions[RSK_LACS_MEDALLION_COUNT],
@ -892,6 +896,8 @@ void Settings::CreateOptions() {
&mOptions[RSK_KEYSANITY],
&mOptions[RSK_GERUDO_KEYS],
&mOptions[RSK_BOSS_KEYSANITY],
&mOptions[RSK_SHUFFLE_SILVER_RUPEES],
&mOptions[RSK_MAGICAL_SILVER_RUPEE],
&mOptions[RSK_GANONS_BOSS_KEY],
&mOptions[RSK_LACS_STONE_COUNT],
&mOptions[RSK_LACS_MEDALLION_COUNT],
@ -1647,6 +1653,13 @@ void Settings::UpdateOptionProperties() {
} else {
mOptions[RSK_GANONS_BOSS_KEY].Enable();
}
if (CVarGetInteger("gRandomizeSilverRupeeShuffle", RO_SILVER_SHUFFLE_VANILLA) != RO_SILVER_SHUFFLE_VANILLA) {
mOptions[RSK_SHUFFLE_SILVER_RUPEES].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
mOptions[RSK_MAGICAL_SILVER_RUPEE].Unhide();
} else {
mOptions[RSK_SHUFFLE_SILVER_RUPEES].AddFlag(IMFLAG_SEPARATOR_BOTTOM);
mOptions[RSK_MAGICAL_SILVER_RUPEE].Hide();
}
mOptions[RSK_GANONS_BOSS_KEY].RemoveFlag(IMFLAG_SEPARATOR_BOTTOM);
mOptions[RSK_LACS_OPTIONS].Hide();
mOptions[RSK_LACS_STONE_COUNT].Hide();
@ -1771,6 +1784,11 @@ void Settings::FinalizeSettings(const std::set<RandomizerCheck>& excludedLocatio
mOptions[RSK_GANONS_BOSS_KEY].SetSelectedIndex(RO_GANON_BOSS_KEY_TRIFORCE_HUNT);
}
// Force Magical Silver Rupee off if Silver Rupee Shuffle is off.
if (mOptions[RSK_SHUFFLE_SILVER_RUPEES].Is(RO_SILVER_SHUFFLE_VANILLA)) {
mOptions[RSK_MAGICAL_SILVER_RUPEE].SetSelectedIndex(RO_GENERIC_OFF);
}
// Force 100 GS Shuffle if that's where Ganon's Boss Key is
if (mOptions[RSK_GANONS_BOSS_KEY].Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) {
mOptions[RSK_SHUFFLE_100_GS_REWARD].SetSelectedIndex(1);

View File

@ -0,0 +1,321 @@
#include <unordered_map>
#include "silver_rupee.h"
#include "static_data.h"
#include "randomizer.h"
namespace Rando {
std::unordered_map<Identifier, RandomizerGet> 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 },
};
std::unordered_map<Position, RandomizerCheck> StaticData::silverRupeeMap = {
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, {389.0f, 0.0f, -382.0f } }, RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_2 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, {414.0f, 178.0f, -579.0f} }, RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_1 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, {278.0f, 0.0f, -637.0f } }, RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_3 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { 198.0f, 0.0f, -388.0f } }, RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_4 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { 1.0f, 0.0f, -143.0f } }, RC_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE_5 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { -1040.0f, 112.0f, -485.0f } }, RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_1 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { -1120.0f, 119.0f, -1577.0f } }, RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_2 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { -1294.0f, 113.0f, -899.0f } }, RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_3 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { -1558.0f, 41.0f, -951.0f } }, RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_4 },
{ { SCENE_ICE_CAVERN, RCQUEST_VANILLA, { -1676.0f, 112.0f, -552.0f } }, RC_ICE_CAVERN_SLIDING_SILVER_RUPEE_5 },
{ { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, { -259.0f, -708.0f, -234.0f } }, RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_1 },
{ { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, { -402.0f, -701.0f, -401.0f } }, RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_2 },
{ { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, { -560.0f, -720.0f, -291.0f } }, RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_3 },
{ { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, { -614.0f, -465.0f, -297.0f } }, RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_4 },
{ { SCENE_BOTTOM_OF_THE_WELL, RCQUEST_VANILLA, { -796.0f, 0.0f, -150.0f } }, RC_BOTTOM_OF_THE_WELL_SILVER_RUPEE_5 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { -1887.0f, 160.0f, -2134.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { -1627.0f, 182.0f, -1462.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { -1579.0f, 236.0f, -999.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_3 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { -1886.0f, -80.0f, -956.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_4 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { -1332.0f, -80.0f, -992.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 1560.0f, -239.0f, -1861.0f } }, RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 1437.0f, 30.0f, -2193.0f } }, RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 1134.0f, -239.0f, -1841.0f } }, RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_3 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 1558.0f, -239.0f, -1370.0f } }, RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_4 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 1320.0f, -239.0f, -1248.0f } }, RC_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE_5 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 2160.0f, -900.0f, -1315.0f } }, RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 2078.0f, -806.0f, -1458.0f } }, RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 2453.0f, -890.0f, -1612.0f } }, RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_3 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 2497.0f, -605.0f, -1465.0f } }, RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_4 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_VANILLA, { 2308.0f, -961.0f, -1464.0f } }, RC_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE_5 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -335.0f, 30.0f, -1409.0f } }, RC_SPIRIT_GATE_SILVER_RUPEE_1 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -347.0f, 229.0f, -1075.0f } }, RC_SPIRIT_GATE_SILVER_RUPEE_2 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -511.0f, 50.0f, -1075.0f } }, RC_SPIRIT_GATE_SILVER_RUPEE_3 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -672.0f, 50.0f, -1075.0f } }, RC_SPIRIT_GATE_SILVER_RUPEE_4 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -766.0f, 229.0f, -1075.0f } }, RC_SPIRIT_GATE_SILVER_RUPEE_5 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -984.0f, 923.0f, -450.0f } }, RC_SPIRIT_BEAMOS_SILVER_RUPEE_1 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -1123.0f, 923.0f, 428.0f } }, RC_SPIRIT_BEAMOS_SILVER_RUPEE_2 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -1275.0f, 922.0f, -247.0f } }, RC_SPIRIT_BEAMOS_SILVER_RUPEE_3 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -1433.0f, 913.0f, -283.0f } }, RC_SPIRIT_BEAMOS_SILVER_RUPEE_4 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { -1836.0f, 923.0f, -446.0f } }, RC_SPIRIT_BEAMOS_SILVER_RUPEE_5 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { 1573.0f, -33.0f, -920.0f } }, RC_SPIRIT_BOULDER_SILVER_RUPEE_1 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { 1856.0f, -33.0f, -1219.0f } }, RC_SPIRIT_BOULDER_SILVER_RUPEE_2 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { 1856.0f, -33.0f, -944.0f } }, RC_SPIRIT_BOULDER_SILVER_RUPEE_3 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { 1284.0f, -33.0f, -813.0f } }, RC_SPIRIT_BOULDER_SILVER_RUPEE_4 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_VANILLA, { 1284.0f, -33.0f, -1355.0f } }, RC_SPIRIT_BOULDER_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 3399.0f, -543.0f, -838.0f } }, RC_SHADOW_SCYTHE_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2869.0f, -543.0f, -948.0f } }, RC_SHADOW_SCYTHE_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 3554.0f, -543.0f, -1432.0f } }, RC_SHADOW_SCYTHE_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 3007.0f, -423.0f, -1222.0f } }, RC_SHADOW_SCYTHE_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 3243.0f, -543.0f, -1061.0f } }, RC_SHADOW_SCYTHE_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 1998.0f, -1343.0f, 3358.0f } }, RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2243.0f, -1343.0f, 3361.0f } }, RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2110.0f, -1343.0f, 3368.0f } }, RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2115.0f, -1343.0f, 3738.0f } }, RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2131.0f, -1343.0f, 3030.0f } }, RC_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2254.0f, -1197.0f, 988.0f } }, RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2135.0f, -1225.0f, 1297.0f } }, RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2478.0f, -1343.0f, 1208.0f } }, RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2940.0f, -1268.0f, 1069.0f } }, RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_VANILLA, { 2042.0f, -1203.0f, 849.0f } }, RC_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { 1634.0f, 164.0f, 1550.0f } }, RC_FOREST_TRIAL_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { 1651.0f, 30.0f, 2021.0f } }, RC_FOREST_TRIAL_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { 1538.0f, 118.0f, 2225.0f } }, RC_FOREST_TRIAL_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { 1361.0f, 115.0f, 1222.0f } }, RC_FOREST_TRIAL_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { 1247.0f, 59.0f, 1787.0f } }, RC_FOREST_TRIAL_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -1867.0f, 227.0f, -2754.0f } }, RC_FIRE_TRIAL_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -604.0f, 133.0f, -2592.0f } }, RC_FIRE_TRIAL_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -515.0f, 133.0f, -3253.0f } }, RC_FIRE_TRIAL_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -1555.0f, 151.0f, -2317.0f } }, RC_FIRE_TRIAL_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -854.0f, 152.0f, -3679.0f } }, RC_FIRE_TRIAL_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -1142.0f, 165.0f, 639.0f } }, RC_SPIRIT_TRIAL_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -725.0f, 165.0f, 942.0f } }, RC_SPIRIT_TRIAL_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -865.0f, 165.0f, 656.0f } }, RC_SPIRIT_TRIAL_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -940.0f, 165.0f, 270.0f } }, RC_SPIRIT_TRIAL_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -829.0f, 274.0f, 591.0f } }, RC_SPIRIT_TRIAL_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -2674.0f, -240.0f, -777.0f } }, RC_LIGHT_TRIAL_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -2680.0f, -240.0f, -893.0f } }, RC_LIGHT_TRIAL_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -2646.0f, -120.0f, -839.0f } }, RC_LIGHT_TRIAL_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -2649.0f, -240.0f, -545.0f } }, RC_LIGHT_TRIAL_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_VANILLA, { -2509.0f, -240.0f, -1091.0f } }, RC_LIGHT_TRIAL_SILVER_RUPEE_5 },
// MQ
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { -1261.0f, -112.0f, -923.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { -1886.0f, -80.0f, -956.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { -1480.0f, 200.0f, -1000.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_3 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { -1542.0f, 53.0f, -1476.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE_4 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { -1245.0f, 160.0f, -2112.0f } }, RC_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE_5 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1317.0f, -239.0f, -1243.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1083.0f, -239.0f, -1374.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1560.0f, -239.0f, -1380.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_3 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1404.0f, -239.0f, -1653.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_4 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1134.0f, -239.0f, -1841.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_5 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 1560.0f, -239.0f, -1861.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE_6 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 2160.0f, -900.0f, -1315.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_1 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 2302.0f, -797.0f, -1464.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_2 },
{ { SCENE_GERUDO_TRAINING_GROUND, RCQUEST_MQ, { 2453.0f, -890.0f, -1612.0f } }, RC_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE_3 },
{ { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, { -1512.0f, 531.0f, -1083.0f } }, RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_1 },
{ { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, { -1907.0f, 627.0f, -1243.0f } }, RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_2 },
{ { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, { -2411.0f, 380.0f, -1836.0f } }, RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_3 },
{ { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, { -2189.0f, 0.0f, -1834.0f } }, RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_4 },
{ { SCENE_DODONGOS_CAVERN, RCQUEST_MQ, { -2277.0f, 0.0f, -1362.0f } }, RC_DODONGOS_CAVERN_MQ_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 3558.0f, -543.0f, -1490.0f } }, RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 3399.0f, -543.0f, -838.0f } }, RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 3243.0f, -543.0f, -1061.0f } }, RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 3007.0f, -423.0f, -1222.0f } }, RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2810.0f, -543.0f, -961.0f } }, RC_SHADOW_MQ_SCYTHE_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5667.0f, -1043.0f, 2686.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5637.0f, -1143.0f, 2134.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5601.0f, -1143.0f, 1898.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5489.0f, -1143.0f, 2476.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5466.0f, -1143.0f, 2243.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5404.0f, -1143.0f, 1977.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_6 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5270.0f, -1143.0f, 2453.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_7 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5217.0f, -1143.0f, 1852.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_8 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5158.0f, -1143.0f, 2315.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_9 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 5089.0f, -1143.0f, 2049.0f } }, RC_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE_10 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2250.0f, -1343.0f, 3372.0f } }, RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2131.0f, -1343.0f, 3030.0f } }, RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2110.0f, -970.0f, 3372.0f } }, RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2110.0f, -1092.0f, 3372.0f } }, RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 1970.0f, -1343.0f, 3372.0f } }, RC_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2940.0f, -1265.0f, 1069.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_1 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2730.0f, -1203.0f, 876.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_2 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2705.0f, -1329.0f, 1089.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_3 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2478.0f, -1100.0f, 1404.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_4 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2478.0f, -1100.0f, 1200.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_5 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2478.0f, -1343.0f, 1208.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_6 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2478.0f, -975.0f, 893.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_7 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2254.0f, -1203.0f, 988.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_8 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2135.0f, -1225.0f, 1297.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_9 },
{ { SCENE_SHADOW_TEMPLE, RCQUEST_MQ, { 2042.0f, -1203.0f, 849.0f } }, RC_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE_10 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, { 744.0f, -50.0f, 4.0f } }, RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_1 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, { 967.0f, 0.0f, -547.0f } }, RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_2 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, { -160.0f, -150.0f, 270.0f } }, RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_3 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, { 160.0f, -150.0f, 268.0f } }, RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_4 },
{ { SCENE_SPIRIT_TEMPLE, RCQUEST_MQ, { 1016.0f, -50.0f, -73.0f } }, RC_SPIRIT_MQ_LOBBY_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 2905.0f, -320.0f, -1263.0f } }, RC_WATER_TRIAL_MQ_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 3253.0f, -314.0f, -649.0f } }, RC_WATER_TRIAL_MQ_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 2905.0f, -120.0f, -1478.0f } }, RC_WATER_TRIAL_MQ_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 2912.0f, -219.0f, -971.0f } }, RC_WATER_TRIAL_MQ_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 2757.0f, -420.0f, -765.0f } }, RC_WATER_TRIAL_MQ_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 1100.0f, 150.0f, -2554.0f } }, RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 1829.0f, 152.0f, -4071.0f } }, RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 1529.0f, 150.0f, -4117.0f } }, RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 1279.0f, 150.0f, -3111.0f } }, RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { 1322.0f, 150.0f, -2262.0f } }, RC_SHADOW_TRIAL_MQ_SILVER_RUPEE_5 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { -1655.0f, 120.0f, -2133.0f } }, RC_FIRE_TRIAL_MQ_SILVER_RUPEE_1 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { -686.0f, 640.0f, -2945.0f } }, RC_FIRE_TRIAL_MQ_SILVER_RUPEE_2 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { -2044.0f, 244.0f, -3354.0f } }, RC_FIRE_TRIAL_MQ_SILVER_RUPEE_3 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { -1891.0f, 222.0f, -2753.0f } }, RC_FIRE_TRIAL_MQ_SILVER_RUPEE_4 },
{ { SCENE_INSIDE_GANONS_CASTLE, RCQUEST_MQ, { -970.0f, 152.0f, -3747.0f } }, RC_FIRE_TRIAL_MQ_SILVER_RUPEE_5 },
};
std::unordered_map<RandomizerGet, Text> SilverRupees::mSilverRupeeRoomNames = {
// TODO: Translate
// "English" "German" "French"
{ RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE, { "Ice Cavern's Spinning Blades Room", "Ice Cavern's Spinning Blades Room", "Ice Cavern's Spinning Blades Room" } },
{ RG_ICE_CAVERN_SLIDING_SILVER_RUPEE, { "Ice Cavern's Block Sliding Puzzle Room", "Ice Cavern's Block Sliding Puzzle Room", "Ice Cavern's Block Sliding Puzzle Room" } },
{ RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE, { "Bottom of the Well", "Bottom of the Well", "Bottom of the Well" } },
{ RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE, { "Boulder Maze in the Gerudo Training Grounds", "Boulder Maze in the Gerudo Training Grounds", "Boulder Maze in the Gerudo Training Grounds" } },
{ RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE, { "Lava room in the Gerudo Training Grounds", "Lava room in the Gerudo Training Grounds", "Lava room in the Gerudo Training Grounds" } },
{ RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE, { "Whirlpool room in the Gerudo Training Grounds", "Whirlpool room in the Gerudo Training Grounds", "Whirlpool room in the Gerudo Training Grounds" } },
{ RG_SPIRIT_GATE_SILVER_RUPEE, { "Gate room in the Spirit Temple", "Gate room in the Spirit Temple", "Gate room in the Spirit Temple" } },
{ RG_SPIRIT_BEAMOS_SILVER_RUPEE, { "Beamos room in the Spirit Temple", "Beamos room in the Spirit Temple", "Beamos room in the Spirit Temple" } },
{ RG_SPIRIT_BOULDER_SILVER_RUPEE, { "Boulder room in the Spirit Temple", "Boulder room in the Spirit Temple", "Boulder room in the Spirit Temple" } },
{ RG_SHADOW_SCYTHE_SILVER_RUPEE, { "Spinning Scythes room in the Shadow Temple", "Spinning Scythes room in the Shadow Temple", "Spinning Scythes room in the Shadow Temple" } },
{ RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, { "door to the Falling Spikes room in the Shadow Temple", "door to the Falling Spikes room in the Shadow Temple", "door to the Falling Spikes room in the Shadow Temple" } },
{ RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE, { "room with Invisible Spikes in the Shadow Temple", "room with Invisible Spikes in the Shadow Temple", "room with Invisible Spikes in the Shadow Temple" } },
{ RG_FOREST_TRIAL_SILVER_RUPEE, { "Forest Trial in Ganon's Castle", "Forest Trial in Ganon's Castle", "Forest Trial in Ganon's Castle" } },
{ RG_FIRE_TRIAL_SILVER_RUPEE, { "Fire Trial in Ganon's Castle", "Fire Trial in Ganon's Castle", "Fire Trial in Ganon's Castle" } },
{ RG_SPIRIT_TRIAL_SILVER_RUPEE, { "Spirit Trial in Ganon's Castle", "Spirit Trial in Ganon's Castle", "Spirit Trial in Ganon's Castle" } },
{ RG_LIGHT_TRIAL_SILVER_RUPEE, { "Light Trial in Ganon's Castle", "Light Trial in Ganon's Castle", "Light Trial in Ganon's Castle" } },
{ RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE, { "Boulder Maze in the Gerudo Training Grounds", "Boulder Maze in the Gerudo Training Grounds", "Boulder Maze in the Gerudo Training Grounds" } },
{ RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE, { "Lava room in the Gerudo Training Grounds", "Lava room in the Gerudo Training Grounds", "Lava room in the Gerudo Training Grounds" } },
{ RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE, { "Whirlpool room in the Gerudo Training Grounds", "Whirlpool room in the Gerudo Training Grounds", "Whirlpool room in the Gerudo Training Grounds" } },
{ RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE, { "Dodongo's Cavern Staircase Room", "Dodongo's Cavern Staircase Room", "Dodongo's Cavern Staircase Room" } },
{ RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE, { "Spirit Temple Lobby", "Spirit Temple Lobby", "Spirit Temple Lobby" } },
{ RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE, { "Spinning Scythes room in the Shadow Temple", "Spinning Scythes room in the Shadow Temple", "Spinning Scythes room in the Shadow Temple" } },
{ RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE, { "door to the Falling Spikes room in the Shadow Temple", "door to the Falling Spikes room in the Shadow Temple", "door to the Falling Spikes room in the Shadow Temple" } },
{ RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE, { "room with Invisible Spikes in the Shadow Temple", "room with Invisible Spikes in the Shadow Temple", "room with Invisible Spikes in the Shadow Temple" } },
{ RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE, { "Invisible Scythes room in the Shadow Temple", "Invisible Scythes room in the Shadow Temple", "Invisible Scythes room in the Shadow Temple" } },
{ RG_WATER_TRIAL_MQ_SILVER_RUPEE, { "Water Trial in Ganon's Castle", "Water Trial in Ganon's Castle", "Water Trial in Ganon's Castle" } },
{ RG_SHADOW_TRIAL_MQ_SILVER_RUPEE, { "Shadow Trial in Ganon's Castle", "Shadow Trial in Ganon's Castle", "Shadow Trial in Ganon's Castle" } },
{ RG_FIRE_TRIAL_MQ_SILVER_RUPEE, { "Fire Trial in Ganon's Castle", "Fire Trial in Ganon's Castle", "Fire Trial in Ganon's Castle" } },
};
SilverRupees::SilverRupees() {
mSilverRupees = {
// Vanilla
SilverRupeesInfo(5, RG_ICE_CAVERN_SPINNING_BLADES_SILVER_RUPEE),
SilverRupeesInfo(5, RG_ICE_CAVERN_SLIDING_SILVER_RUPEE),
SilverRupeesInfo(5, RG_BOTTOM_OF_THE_WELL_SILVER_RUPEE),
SilverRupeesInfo(5, RG_GERUDO_TRAINING_GROUNDS_BOULDER_SILVER_RUPEE),
SilverRupeesInfo(5, RG_GERUDO_TRAINING_GROUNDS_LAVA_SILVER_RUPEE),
SilverRupeesInfo(5, RG_GERUDO_TRAINING_GROUNDS_TOILET_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SPIRIT_BEAMOS_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SPIRIT_BOULDER_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_SCYTHE_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_INVISIBLE_SPIKES_SILVER_RUPEE),
SilverRupeesInfo(5, RG_FOREST_TRIAL_SILVER_RUPEE),
SilverRupeesInfo(5, RG_FIRE_TRIAL_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SPIRIT_TRIAL_SILVER_RUPEE),
SilverRupeesInfo(5, RG_LIGHT_TRIAL_SILVER_RUPEE),
// MQ
SilverRupeesInfo(5, RG_GERUDO_TRAINING_GROUNDS_MQ_BOULDER_SILVER_RUPEE),
SilverRupeesInfo(6, RG_GERUDO_TRAINING_GROUNDS_MQ_LAVA_SILVER_RUPEE),
SilverRupeesInfo(3, RG_GERUDO_TRAINING_GROUNDS_MQ_TOILET_SILVER_RUPEE),
SilverRupeesInfo(5, RG_DODONGOS_CAVERN_MQ_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SPIRIT_MQ_LOBBY_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_MQ_SCYTHE_SILVER_RUPEE),
SilverRupeesInfo(10, RG_SHADOW_MQ_INVISIBLE_SCYTHE_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_MQ_OUTSIDE_SPIKE_RAIN_SILVER_RUPEE),
SilverRupeesInfo(10, RG_SHADOW_MQ_INVISIBLE_SPIKES_SILVER_RUPEE),
SilverRupeesInfo(5, RG_FIRE_TRIAL_SILVER_RUPEE),
SilverRupeesInfo(5, RG_WATER_TRIAL_MQ_SILVER_RUPEE),
SilverRupeesInfo(5, RG_SHADOW_TRIAL_MQ_SILVER_RUPEE),
};
}
CustomMessage SilverRupees::GetSilverRupeeMessage(u16 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 = Rando::Context::GetInstance();
// Get the collected amount + 1, since the text is retrieved before the count is incremented in `Randomizer_Item_Give`
int srCount = ctx->GetSilverRupees()->GetInfo(static_cast<RandomizerGet>(rgid)).GetCollected() + 1;
bool complete = ctx->GetSilverRupees()->GetInfo(static_cast<RandomizerGet>(rgid)).GetTotal() <= srCount;
if (complete) {
messageEntry.Replace("{{count_text}}", "That's all of them");
} else {
messageEntry.Replace("{{count_text}}", "You have collected %g{{count}}%w of them so far");
messageEntry.Replace("{{count}}", std::to_string(srCount));
}
}/* else if (rgid >= RG_SILVER_RUPEE_POUCH_FIRST && rgid <= RG_SILVER_RUPEE_POUCH_LAST) {
messageEntry =
CustomMessageManager::Instance->RetrieveMessage(Randomizer::getItemMessageTableID, RG_SILVER_RUPEE_POUCH_FIRST);
}*/
u16 roomNameKey =
/*(rgid >= RG_SILVER_RUPEE_POUCH_FIRST) ? (rgid - RG_SILVER_RUPEE_POUCH_FIRST) + RG_SILVER_RUPEE_FIRST :*/ rgid;
Text locationNames = mSilverRupeeRoomNames[(RandomizerGet)roomNameKey];
messageEntry.Replace("{{location}}", locationNames.english.c_str(), locationNames.german.c_str(), locationNames.french.c_str());
return messageEntry;
}
size_t SilverRupees::GetInfoListSize() {
return mSilverRupees.size();
}
void SilverRupees::ResetAll() {
for (auto& silverRupee : mSilverRupees) {
silverRupee.Reset();
}
}
SilverRupeesInfo &SilverRupees::GetInfo(RandomizerGet rgid) {
return mSilverRupees[rgid - RG_SILVER_RUPEE_FIRST];
}
SilverRupeesInfo::SilverRupeesInfo(uint8_t total, RandomizerGet randoGet) : mCollected(0), mTotal(total), mRandoGet(randoGet) {
}
uint8_t SilverRupeesInfo::GetCollected() const {
return mCollected;
}
uint8_t SilverRupeesInfo::GetTotal() const {
return mTotal;
}
SilverRupeesInfo::SilverRupeesInfo() : mCollected(0), mTotal(0), mRandoGet(RG_NONE) {
}
void SilverRupeesInfo::IncrementCollected(uint8_t amount) {
mCollected += amount;
}
void SilverRupeesInfo::Reset() {
mCollected = 0;
}
} // namespace Rando

View File

@ -0,0 +1,43 @@
#ifndef SHIP_SILVER_RUPEE_H
#define SHIP_SILVER_RUPEE_H
#include <cstdint>
#include <array>
#include "randomizerTypes.h"
#include "soh/Enhancements/randomizer/3drando/text.hpp"
#include "soh/Enhancements/custom-message/CustomMessageManager.h"
namespace Rando {
class SilverRupeesInfo {
public:
SilverRupeesInfo();
SilverRupeesInfo(uint8_t total, RandomizerGet randoGet);
uint8_t GetCollected() const;
uint8_t GetTotal() const;
void IncrementCollected(uint8_t amount = 1);
void Reset();
private:
uint8_t mCollected = 0;
uint8_t mTotal;
RandomizerGet mRandoGet;
};
class SilverRupees {
public:
SilverRupees();
SilverRupeesInfo& GetInfo(RandomizerGet rgid);
size_t GetInfoListSize();
void ResetAll();
static CustomMessage GetSilverRupeeMessage(u16 rgid);
private:
std::array<SilverRupeesInfo, RG_SILVER_RUPEE_LAST - RG_SILVER_RUPEE_FIRST + 1> mSilverRupees;
static std::unordered_map<RandomizerGet, Text> mSilverRupeeRoomNames;
};
} // Rando
#endif //SHIP_SILVER_RUPEE_H

View File

@ -7,6 +7,17 @@
#include "location.h"
namespace Rando {
struct Position{
SceneID scene;
RandomizerCheckQuest quest;
Vec3f pos;
};
struct Identifier {
SceneID scene;
RandomizerCheckQuest quest;
int16_t params;
};
/**
* @brief Singleton for storing and accessing static Randomizer-related data
*
@ -37,7 +48,39 @@ class StaticData {
static std::vector<RandomizerCheck> overworldFishLocations;
static std::array<std::pair<RandomizerCheck, RandomizerCheck>, 17> randomizerFishingPondFish;
static std::unordered_map<int8_t, RandomizerCheck> randomizerGrottoFishMap;
static std::unordered_map<Position, RandomizerCheck> silverRupeeMap;
static std::unordered_map<Identifier, RandomizerGet> silverTrackerMap;
StaticData();
~StaticData();
};
}
namespace std {
template<>
struct hash<Rando::Position> {
inline size_t operator()(const Rando::Position& pos) const {
return hash<int>{}(pos.scene) ^ hash<int>{}(pos.quest) ^ hash<float>{}(pos.pos.x) ^ hash<float>{}(pos.pos.y) ^ hash<float>{}(pos.pos.z);
}
};
template<>
struct hash<Rando::Identifier> {
inline size_t operator()(const Rando::Identifier& id) const {
return hash<int>{}(id.scene) ^ hash<int>{}(id.quest) ^ hash<int>{}(id.params);
}
};
template<>
struct equal_to<Rando::Position> {
inline bool operator()(const Rando::Position& a, const Rando::Position& b) const {
return a.scene == b.scene && a.pos.x == b.pos.x && a.pos.y == b.pos.y && a.pos.z == b.pos.z;
}
};
template<>
struct equal_to<Rando::Identifier> {
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;
}
};
}

View File

@ -2458,6 +2458,10 @@ extern "C" void Randomizer_SetPlandoLoaded(bool plandoLoaded) {
OTRGlobals::Instance->gRandoContext->SetPlandoLoaded(plandoLoaded);
}
extern "C" void Randomizer_IncrementSilverRupeeCount(RandomizerGet rgid, uint8_t amount) {
OTRGlobals::Instance->gRandoContext->GetSilverRupees()->GetInfo(rgid).IncrementCollected(amount);
}
CustomMessage Randomizer_GetCustomGetItemMessage(Player* player) {
s16 giid;
if (player->getItemEntry.objectId != OBJECT_INVALID) {
@ -2488,6 +2492,8 @@ extern "C" int CustomMessage_RetrieveIfExists(PlayState* play) {
}
} 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 = OTRGlobals::Instance->gRandoContext->GetSilverRupees()->GetSilverRupeeMessage(player->getItemEntry.getItemId);
} else {
messageEntry = Randomizer_GetCustomGetItemMessage(player);
}

View File

@ -173,6 +173,7 @@ uint8_t Randomizer_IsSpoilerLoaded();
void Randomizer_SetSpoilerLoaded(bool spoilerLoaded);
uint8_t Randomizer_IsPlandoLoaded();
void Randomizer_SetPlandoLoaded(bool plandoLoaded);
void Randomizer_IncrementSilverRupeeCount(RandomizerGet rgid, uint8_t amount);
int CustomMessage_RetrieveIfExists(PlayState* play);
void Overlay_DisplayText(float duration, const char* text);
void Overlay_DisplayText_Seconds(int seconds, const char* text);

View File

@ -429,6 +429,13 @@ void SaveManager::LoadRandomizerVersion3() {
SaveManager::Instance->LoadData("", trialId);
randoContext->GetTrial(trialId)->SetAsRequired();
});
randoContext->GetSilverRupees()->ResetAll();
SaveManager::Instance->LoadArray("silverRupees", randoContext->GetSilverRupees()->GetInfoListSize(), [&](size_t i) {
size_t value;
SaveManager::Instance->LoadData("", value);
randoContext->GetSilverRupees()->GetInfo(static_cast<RandomizerGet>(i + RG_SILVER_RUPEE_FIRST)).IncrementCollected(value);
});
}
void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool fullSave) {
@ -512,6 +519,10 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f
SaveManager::Instance->SaveData("", i);
}
});
SaveManager::Instance->SaveArray("silverRupees", randoContext->GetSilverRupees()->GetInfoListSize(), [&](size_t i) {
SaveManager::Instance->SaveData("", randoContext->GetSilverRupees()->GetInfo(static_cast<RandomizerGet>(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

View File

@ -2694,6 +2694,17 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item >= RG_SILVER_RUPEE_FIRST && item <= RG_SILVER_RUPEE_LAST) {
Randomizer_IncrementSilverRupeeCount(item, 1);
Rupees_ChangeBy(5);
return Return_Item_Entry(giEntry, RG_NONE);
}
if (item == RG_MAGICAL_SILVER_RUPEE) {
Flags_SetRandomizerInf(RAND_INF_MAGICAL_SILVER_RUPEE);
return Return_Item_Entry(giEntry, RG_NONE);
}
temp = gSaveContext.inventory.items[slot];
osSyncPrintf("Item_Register(%d)=%d %d\n", slot, item, temp);
INV_CONTENT(item) = item;

View File

@ -56,6 +56,11 @@ typedef struct EnGSwitch {
/* 0x0178 */ s8 objIndex;
/* 0x017C */ ColliderCylinder collider;
/* 0x01C8 */ EnGSwitchEffect effects[100];
// #region SOH [Randomizer]
/* */ RandomizerCheck rc;
/* */ RandomizerGet rg;
/* */ GetItemEntry* giEntry;
/* */ RandomizerInf randInfFlag;
} EnGSwitch; // size = 0x12F8
#endif