From 28e9ba8e3899887bcff3f006a9bdd92bd992795c Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 7 Jul 2025 01:45:15 +0000 Subject: [PATCH 1/5] wip --- .../vanilla-behavior/GIVanillaBehavior.h | 8 + .../randomizer/3drando/item_pool.cpp | 60 ++++ .../Enhancements/randomizer/ShuffleSilver.cpp | 281 ++++++++++++++++++ soh/soh/Enhancements/randomizer/draw.cpp | 23 ++ soh/soh/Enhancements/randomizer/draw.h | 1 + soh/soh/Enhancements/randomizer/item_list.cpp | 63 +++- .../dungeons/bottom_of_the_well.cpp | 5 + .../dungeons/dodongos_cavern.cpp | 5 + .../dungeons/ganons_castle.cpp | 44 ++- .../dungeons/gerudo_training_ground.cpp | 36 ++- .../location_access/dungeons/ice_cavern.cpp | 10 + .../dungeons/shadow_temple.cpp | 46 +++ .../dungeons/spirit_temple.cpp | 25 ++ .../randomizer/option_descriptions.cpp | 3 + .../Enhancements/randomizer/randomizer.cpp | 172 +++++++++++ soh/soh/Enhancements/randomizer/randomizer.h | 1 + .../Enhancements/randomizer/randomizerTypes.h | 198 ++++++++++++ .../Enhancements/randomizer/randomizer_inf.h | 185 ++++++++++++ soh/soh/Enhancements/randomizer/settings.cpp | 4 + soh/soh/Enhancements/randomizer/static_data.h | 1 + .../actors/ovl_En_G_Switch/z_en_g_switch.c | 5 +- 21 files changed, 1168 insertions(+), 8 deletions(-) create mode 100644 soh/soh/Enhancements/randomizer/ShuffleSilver.cpp diff --git a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h index 186307aed..92d8c5271 100644 --- a/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h +++ b/soh/soh/Enhancements/game-interactor/vanilla-behavior/GIVanillaBehavior.h @@ -1926,6 +1926,14 @@ typedef enum { // - None VB_SHOW_TITLE_CARD, + // #### `result` + // ```c + // Flags_GetSwitch(play, this->switchFlag) + // ``` + // #### `args` + // - *EnGSwitch + VB_SILVER_DESPAWN, + // #### `result` // ```c // (collectible >= 0) && (collectible <= 0x19 diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 3e6588646..66a04597f 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1057,6 +1057,9 @@ void GenerateItemPool() { ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_ALL); PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive); + bool silverActive = ctx->GetOption(RSK_SHUFFLE_SILVER).Get(); + PlaceItemsForType(RCTYPE_SILVER, silverActive, silverActive); + AddItemsToPool(ItemPool, alwaysItems); AddItemsToPool(ItemPool, dungeonRewards); @@ -1198,6 +1201,63 @@ void GenerateItemPool() { AddItemToMainPool(RG_SHADOW_TEMPLE_BOSS_KEY); } + if (ctx->GetOption(RSK_SHUFFLE_SILVER)) { + auto dungeons = ctx->GetDungeons(); + if (dungeons->GetDungeonFromScene(SCENE_DODONGOS_CAVERN)->IsMQ()) { + AddItemToMainPool(RG_DODONGOS_CAVERN_MQ_SILVER); + } + + if (dungeons->GetDungeonFromScene(SCENE_SHADOW_TEMPLE)->IsVanilla()) { + AddItemToMainPool(RG_SHADOW_SILVER_BLADES); + AddItemToMainPool(RG_SHADOW_SILVER_PIT); + AddItemToMainPool(RG_SHADOW_SILVER_SPIKES); + } else { + AddItemToMainPool(RG_SHADOW_MQ_SILVER_BLADES); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_PIT); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_SPIKES); + } + + if (dungeons->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla()) { + AddItemToMainPool(RG_SPIRIT_SILVER_CHILD); + AddItemToMainPool(RG_SPIRIT_SILVER_SUN); + AddItemToMainPool(RG_SPIRIT_SILVER_BOULDERS); + } else { + AddItemToMainPool(RG_SPIRIT_MQ_SILVER_LOBBY); + AddItemToMainPool(RG_SPIRIT_MQ_SILVER_BIG_WALL); + } + + if (dungeons->GetDungeonFromScene(SCENE_BOTTOM_OF_THE_WELL)->IsVanilla()) { + AddItemToMainPool(RG_BOTW_SILVER); + } + + if (dungeons->GetDungeonFromScene(SCENE_ICE_CAVERN)->IsVanilla()) { + AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLADES); + AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLOCK); + } + + if (dungeons->GetDungeonFromScene(SCENE_GERUDO_TRAINING_GROUND)->IsVanilla()) { + AddItemToMainPool(RG_GTG_SILVER_SLOPE); + AddItemToMainPool(RG_GTG_SILVER_LAVA); + AddItemToMainPool(RG_GTG_SILVER_WATER); + } else { + AddItemToMainPool(RG_GTG_MQ_SILVER_SLOPE); + AddItemToMainPool(RG_GTG_MQ_SILVER_LAVA); + AddItemToMainPool(RG_GTG_MQ_SILVER_WATER); + } + + if (dungeons->GetDungeonFromScene(SCENE_INSIDE_GANONS_CASTLE)->IsVanilla()) { + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_LIGHT); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FOREST); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FIRE); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_SPIRIT); + } else { + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_FIRE); + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_WATER); + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_SHADOW); + } + } + if (!ctx->GetOption(RSK_TRIFORCE_HUNT)) { // Don't add GBK to the pool at all for Triforce Hunt. if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_KAK_TOKENS)) { ctx->PlaceItemInLocation(RC_KAK_100_GOLD_SKULLTULA_REWARD, RG_GANONS_CASTLE_BOSS_KEY); diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp new file mode 100644 index 000000000..c66d2493a --- /dev/null +++ b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp @@ -0,0 +1,281 @@ +#include +#include "dungeon.h" +#include "context.h" +#include "draw.h" +#include "static_data.h" +#include "soh/ObjectExtension/ObjectExtension.h" + +extern "C" { +#include "overlays/actors/ovl_En_G_Switch/z_en_g_switch.h" +extern PlayState* gPlayState; +extern SaveContext gSaveContext; +} + +static bool IsSilverCleared(s16 switchFlag) { + bool isMQ = + Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(gPlayState->sceneNum)->IsMQ(); + switch (gPlayState->sceneNum) { + case SCENE_DODONGOS_CAVERN: + return Flags_GetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER); + case SCENE_SHADOW_TEMPLE: + switch (switchFlag) { + case 1: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_SHADOW_MQ_SILVER_BLADES + : RAND_INF_SHADOW_SILVER_BLADES); + case 3: + return Flags_GetRandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES); + case 8: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_SHADOW_MQ_SILVER_SPIKES + : RAND_INF_SHADOW_SILVER_SPIKES); + case 9: + return Flags_GetRandomizerInf(RAND_INF_SHADOW_SILVER_PIT); + case 17: + return Flags_GetRandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT); + } + case SCENE_SPIRIT_TEMPLE: + switch (switchFlag) { + case 0: + return Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL); + case 2: + return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS); + case 5: + return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD); + case 10: + return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_SUN); + case 55: + return Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY); + } + case SCENE_BOTTOM_OF_THE_WELL: + return Flags_GetRandomizerInf(RAND_INF_BOTW_SILVER); + case SCENE_ICE_CAVERN: + switch (switchFlag) { + case 8: + return Flags_GetRandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK); + case 31: + return Flags_GetRandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES); + } + case SCENE_GERUDO_TRAINING_GROUND: + switch (switchFlag) { + case 12: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_LAVA : RAND_INF_GTG_SILVER_LAVA); + case 27: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_WATER : RAND_INF_GTG_SILVER_WATER); + case 28: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_SLOPE : RAND_INF_GTG_SILVER_SLOPE); + } + case SCENE_INSIDE_GANONS_CASTLE: + switch (switchFlag) { + case 1: + return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE); + case 2: + return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER); + case 9: + return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE); + case 11: + return Flags_GetRandomizerInf(isMQ ? RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW + : RAND_INF_GANONS_CASTLE_SILVER_SPIRIT); + case 14: + return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST); + case 18: + return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT); + } + } + return false; +} + +void RegisterShuffleSilver() { + bool shouldRegister = IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_SILVER); + + COND_VB_SHOULD(VB_SILVER_DESPAWN, shouldRegister, { + EnGSwitch* silver = va_arg(args, EnGSwitch*); + if (silver->type == ENGSWITCH_SILVER_RUPEE) { + auto silverIdentity = OTRGlobals::Instance->gRandomizer->IdentifySilver(gPlayState->sceneNum, + (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); + *should = true; + if (silverIdentity.randomizerCheck == RC_UNKNOWN_CHECK || + Flags_GetRandomizerInf(silverIdentity.randomizerInf)) { + return; + } + + auto spawnedActor = (EnItem00*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, + silver->actor.world.pos.x, silver->actor.world.pos.y, silver->actor.world.pos.z, + 0, 0, 0, ITEM00_RUPEE_PURPLE, false); + spawnedActor->randoCheck = silverIdentity.randomizerCheck; + spawnedActor->randoInf = silverIdentity.randomizerInf; + spawnedActor->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( + silverIdentity.randomizerCheck, true, (GetItemID)Rando::StaticData::GetLocation(silverIdentity.randomizerCheck)->GetVanillaItem()); + } else if (silver->type == ENGSWITCH_SILVER_TRACKER) { + if (IsSilverCleared(silver->switchFlag)) { + Flags_SetSwitch(gPlayState, silver->switchFlag); + } + *should = true; + } + }); +} + +void Rando::StaticData::RegisterSilverLocations() { + static bool registered = false; + if (registered) + return; + registered = true; + // clang-format off + locationTable[RC_SHADOW_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_1)); + locationTable[RC_SHADOW_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_2)); + locationTable[RC_SHADOW_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "RC_SHADOW_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_3)); + locationTable[RC_SHADOW_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "RC_SHADOW_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_4)); + locationTable[RC_SHADOW_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "RC_SHADOW_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_5)); + locationTable[RC_SHADOW_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_SILVER_PIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_1)); + locationTable[RC_SHADOW_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_SILVER_PIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "RC_SHADOW_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_2)); + locationTable[RC_SHADOW_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_SILVER_PIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "RC_SHADOW_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_3)); + locationTable[RC_SHADOW_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_SILVER_PIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "RC_SHADOW_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_4)); + locationTable[RC_SHADOW_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_SILVER_PIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "RC_SHADOW_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_5)); + locationTable[RC_SHADOW_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_1)); + locationTable[RC_SHADOW_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_2)); + locationTable[RC_SHADOW_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_3)); + locationTable[RC_SHADOW_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_4)); + locationTable[RC_SHADOW_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_5)); + locationTable[RC_SPIRIT_SILVER_CHILD_1] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "RC_SPIRIT_SILVER_CHILD_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_1)); + locationTable[RC_SPIRIT_SILVER_CHILD_2] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "RC_SPIRIT_SILVER_CHILD_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_2)); + locationTable[RC_SPIRIT_SILVER_CHILD_3] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "RC_SPIRIT_SILVER_CHILD_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_3)); + locationTable[RC_SPIRIT_SILVER_CHILD_4] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "RC_SPIRIT_SILVER_CHILD_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_4)); + locationTable[RC_SPIRIT_SILVER_CHILD_5] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "RC_SPIRIT_SILVER_CHILD_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_5)); + locationTable[RC_SPIRIT_SILVER_SUN_1] = Location::Collectable(RC_SPIRIT_SILVER_SUN_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "RC_SPIRIT_SILVER_SUN_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_1)); + locationTable[RC_SPIRIT_SILVER_SUN_2] = Location::Collectable(RC_SPIRIT_SILVER_SUN_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "RC_SPIRIT_SILVER_SUN_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_2)); + locationTable[RC_SPIRIT_SILVER_SUN_3] = Location::Collectable(RC_SPIRIT_SILVER_SUN_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "RC_SPIRIT_SILVER_SUN_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_3)); + locationTable[RC_SPIRIT_SILVER_SUN_4] = Location::Collectable(RC_SPIRIT_SILVER_SUN_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "RC_SPIRIT_SILVER_SUN_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_4)); + locationTable[RC_SPIRIT_SILVER_SUN_5] = Location::Collectable(RC_SPIRIT_SILVER_SUN_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "RC_SPIRIT_SILVER_SUN_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_5)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_1] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "RC_SPIRIT_SILVER_BOULDERS_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_1)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_2] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "RC_SPIRIT_SILVER_BOULDERS_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_2)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_3] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "RC_SPIRIT_SILVER_BOULDERS_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_3)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_4] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "RC_SPIRIT_SILVER_BOULDERS_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_4)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_5] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "RC_SPIRIT_SILVER_BOULDERS_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_5)); + locationTable[RC_BOTW_SILVER_1] = Location::Collectable(RC_BOTW_SILVER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "RC_BOTW_SILVER_1", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_1)); + locationTable[RC_BOTW_SILVER_2] = Location::Collectable(RC_BOTW_SILVER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "RC_BOTW_SILVER_2", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_2)); + locationTable[RC_BOTW_SILVER_3] = Location::Collectable(RC_BOTW_SILVER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "RC_BOTW_SILVER_3", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_3)); + locationTable[RC_BOTW_SILVER_4] = Location::Collectable(RC_BOTW_SILVER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "RC_BOTW_SILVER_4", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_4)); + locationTable[RC_BOTW_SILVER_5] = Location::Collectable(RC_BOTW_SILVER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "RC_BOTW_SILVER_5", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_5)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "RC_ICE_CAVERN_SILVER_BLADES_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_1)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "RC_ICE_CAVERN_SILVER_BLADES_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_2)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "RC_ICE_CAVERN_SILVER_BLADES_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_3)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "RC_ICE_CAVERN_SILVER_BLADES_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_4)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "RC_ICE_CAVERN_SILVER_BLADES_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_5)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "RC_ICE_CAVERN_SILVER_BLOCK_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_1)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "RC_ICE_CAVERN_SILVER_BLOCK_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_2)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "RC_ICE_CAVERN_SILVER_BLOCK_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_3)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "RC_ICE_CAVERN_SILVER_BLOCK_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_4)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "RC_ICE_CAVERN_SILVER_BLOCK_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_5)); + locationTable[RC_GTG_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_SILVER_SLOPE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "RC_GTG_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_1)); + locationTable[RC_GTG_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_SILVER_SLOPE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_2)); + locationTable[RC_GTG_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_SILVER_SLOPE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "RC_GTG_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_3)); + locationTable[RC_GTG_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_SILVER_SLOPE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "RC_GTG_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_4)); + locationTable[RC_GTG_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_SILVER_SLOPE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "RC_GTG_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_5)); + locationTable[RC_GTG_SILVER_LAVA_1] = Location::Collectable(RC_GTG_SILVER_LAVA_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "RC_GTG_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_1)); + locationTable[RC_GTG_SILVER_LAVA_2] = Location::Collectable(RC_GTG_SILVER_LAVA_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "RC_GTG_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_2)); + locationTable[RC_GTG_SILVER_LAVA_3] = Location::Collectable(RC_GTG_SILVER_LAVA_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_3)); + locationTable[RC_GTG_SILVER_LAVA_4] = Location::Collectable(RC_GTG_SILVER_LAVA_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "RC_GTG_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_4)); + locationTable[RC_GTG_SILVER_LAVA_5] = Location::Collectable(RC_GTG_SILVER_LAVA_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_5)); + locationTable[RC_GTG_SILVER_WATER_1] = Location::Collectable(RC_GTG_SILVER_WATER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "RC_GTG_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_1)); + locationTable[RC_GTG_SILVER_WATER_2] = Location::Collectable(RC_GTG_SILVER_WATER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "RC_GTG_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_2)); + locationTable[RC_GTG_SILVER_WATER_3] = Location::Collectable(RC_GTG_SILVER_WATER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_3)); + locationTable[RC_GTG_SILVER_WATER_4] = Location::Collectable(RC_GTG_SILVER_WATER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "RC_GTG_SILVER_WATER_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_4)); + locationTable[RC_GTG_SILVER_WATER_5] = Location::Collectable(RC_GTG_SILVER_WATER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_SILVER_WATER_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_5)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "RC_GANONS_CASTLE_SILVER_LIGHT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_1)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "RC_GANONS_CASTLE_SILVER_LIGHT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_2)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "RC_GANONS_CASTLE_SILVER_LIGHT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_3)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "RC_GANONS_CASTLE_SILVER_LIGHT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_4)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "RC_GANONS_CASTLE_SILVER_LIGHT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_5)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "RC_GANONS_CASTLE_SILVER_FOREST_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "RC_GANONS_CASTLE_SILVER_FOREST_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "RC_GANONS_CASTLE_SILVER_FOREST_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "RC_GANONS_CASTLE_SILVER_FOREST_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "RC_GANONS_CASTLE_SILVER_FOREST_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "RC_GANONS_CASTLE_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "RC_GANONS_CASTLE_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_2)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "RC_GANONS_CASTLE_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_3)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "RC_GANONS_CASTLE_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_4)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "RC_GANONS_CASTLE_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_5)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "RC_GANONS_CASTLE_SILVER_SPIRIT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_1)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "RC_GANONS_CASTLE_SILVER_SPIRIT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_2)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "RC_GANONS_CASTLE_SILVER_SPIRIT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_3)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "RC_GANONS_CASTLE_SILVER_SPIRIT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_4)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "RC_GANONS_CASTLE_SILVER_SPIRIT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_1] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "RC_DODONGOS_CAVERN_MQ_SILVER_1", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_2] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "RC_DODONGOS_CAVERN_MQ_SILVER_2", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_3] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "RC_DODONGOS_CAVERN_MQ_SILVER_3", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_4] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "RC_DODONGOS_CAVERN_MQ_SILVER_4", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_5] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "RC_DODONGOS_CAVERN_MQ_SILVER_5", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_5)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2810, -961 ), "RC_SHADOW_MQ_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_1)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_MQ_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_2)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_MQ_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_3)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838 ), "RC_SHADOW_MQ_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_4)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "RC_SHADOW_MQ_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_5)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "RC_SHADOW_MQ_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_1)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_2)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_3)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_MQ_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_4)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "RC_SHADOW_MQ_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_5)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_MQ_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_1)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_MQ_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_2)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_MQ_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_3)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "RC_SHADOW_MQ_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_4)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_MQ_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_5)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "RC_SHADOW_MQ_SILVER_SPIKES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_6)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "RC_SHADOW_MQ_SILVER_SPIKES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_7)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "RC_SHADOW_MQ_SILVER_SPIKES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_8)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "RC_SHADOW_MQ_SILVER_SPIKES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_9)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_MQ_SILVER_SPIKES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_10)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "RC_SPIRIT_MQ_SILVER_LOBBY_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_1)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "RC_SPIRIT_MQ_SILVER_LOBBY_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_2)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "RC_SPIRIT_MQ_SILVER_LOBBY_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_3)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -547), "RC_SPIRIT_MQ_SILVER_LOBBY_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_4)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "RC_SPIRIT_MQ_SILVER_LOBBY_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_5)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(723, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_1)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(582, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_2)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(754, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_3)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(644, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_4)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(681, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_5)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "RC_GTG_MQ_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_1)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1467), "RC_GTG_MQ_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_2)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "RC_GTG_MQ_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_3)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_MQ_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_4)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "RC_GTG_MQ_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_5)); + locationTable[RC_GTG_MQ_SILVER_LAVA_1] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_MQ_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_1)); + locationTable[RC_GTG_MQ_SILVER_LAVA_2] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_MQ_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_2)); + locationTable[RC_GTG_MQ_SILVER_LAVA_3] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "RC_GTG_MQ_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_3)); + locationTable[RC_GTG_MQ_SILVER_LAVA_4] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "RC_GTG_MQ_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_4)); + locationTable[RC_GTG_MQ_SILVER_LAVA_5] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "RC_GTG_MQ_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_5)); + locationTable[RC_GTG_MQ_SILVER_LAVA_6] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "RC_GTG_MQ_SILVER_LAVA_6", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_6)); + locationTable[RC_GTG_MQ_SILVER_WATER_1] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_MQ_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_1)); + locationTable[RC_GTG_MQ_SILVER_WATER_2] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "RC_GTG_MQ_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_2)); + locationTable[RC_GTG_MQ_SILVER_WATER_3] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_MQ_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -3354), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_5)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "RC_GANONS_CASTLE_MQ_SILVER_WATER_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "RC_GANONS_CASTLE_MQ_SILVER_WATER_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "RC_GANONS_CASTLE_MQ_SILVER_WATER_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "RC_GANONS_CASTLE_MQ_SILVER_WATER_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "RC_GANONS_CASTLE_MQ_SILVER_WATER_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_5)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5)); + // clang-format on +} + +static ObjectExtension::Register RegisterSilverIdentity; +static RegisterShipInitFunc registerShuffleSilver(RegisterShuffleSilver, { "IS_RANDO" }); +static RegisterShipInitFunc registerShuffleSilverLocations(Rando::StaticData::RegisterSilverLocations); \ No newline at end of file diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index b17718b65..749352afb 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -17,6 +17,7 @@ extern "C" { #include "objects/object_gi_compass/object_gi_compass.h" #include "objects/object_gi_map/object_gi_map.h" #include "objects/object_gi_hearts/object_gi_hearts.h" +#include "objects/object_gi_rupy/object_gi_rupy.h" #include "objects/object_gi_scale/object_gi_scale.h" #include "objects/object_gi_fire/object_gi_fire.h" #include "objects/object_fish/object_fish.h" @@ -34,6 +35,7 @@ extern "C" { #include "overlays/ovl_Boss_Sst/ovl_Boss_Sst.h" #include "objects/object_tw/object_tw.h" #include "objects/object_ganon2/object_ganon2.h" +#include "objects/object_mo/object_mo.h" extern PlayState* gPlayState; extern SaveContext gSaveContext; } @@ -1109,6 +1111,27 @@ extern "C" void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getIte CLOSE_DISPS(play->state.gfxCtx); } +extern "C" void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry) { + OPEN_DISPS(play->state.gfxCtx); + + Gfx_SetupDL_25Opa(play->state.gfxCtx); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), + G_MTX_MODELVIEW | G_MTX_LOAD); + + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255 / 5, 255 / 5, 255 / 5, 255); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiRupeeInnerDL); + + Gfx_SetupDL_25Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 255 * 0.75f, 255 * 0.75f, 255 * 0.75f, 255); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiRupeeOuterDL); + + CLOSE_DISPS(play->state.gfxCtx); +} + extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry) { Vec3f pos; OPEN_DISPS(play->state.gfxCtx); diff --git a/soh/soh/Enhancements/randomizer/draw.h b/soh/soh/Enhancements/randomizer/draw.h index 8483a7bf9..62ae70a40 100644 --- a/soh/soh/Enhancements/randomizer/draw.h +++ b/soh/soh/Enhancements/randomizer/draw.h @@ -21,6 +21,7 @@ void Randomizer_DrawTriforcePiece(PlayState* play, GetItemEntry getItemEntry); void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry); void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getItemEntry); +void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawSkeletonKey(PlayState* play, GetItemEntry* getItemEntry); void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry* getItemEntry); diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 7f22fe83f..99f380d70 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -233,7 +233,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_SHADOW_TEMPLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING] = Item(RG_BOTTOM_OF_THE_WELL_KEY_RING, Text{ "Bottom of the Well Key Ring", "Trousseau du Puits", "Schlüsselbund (Grund des Brunnens)" }, ITEMTYPE_SMALLKEY, 0xDA, true, LOGIC_BOTTOM_OF_THE_WELL_KEYS, RHT_BOTTOM_OF_THE_WELL_KEY_RING, RG_BOTTOM_OF_THE_WELL_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_BOTTOM_OF_THE_WELL_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); - itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUND_KEY_RING, Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund (Gerudo-Trainingsarena)" }, ITEMTYPE_SMALLKEY, 0xDB, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING, RG_GERUDO_TRAINING_GROUND_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING] = Item(RG_GERUDO_TRAINING_GROUND_KEY_RING, Text{ "Training Ground Key Ring", "Trousseau du Gymnase Gerudo", "Schlüsselbund (Gerudo-Trainingsarena)" }, ITEMTYPE_SMALLKEY, 0xDB, true, LOGIC_GERUDO_TRAINING_GROUND_KEYS, RHT_GERUDO_TRAINING_GROUND_KEY_RING, RG_GERUDO_TRAINING_GROUND_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GERUDO_TRAINING_GROUND_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); itemTable[RG_GERUDO_FORTRESS_KEY_RING] = Item(RG_GERUDO_FORTRESS_KEY_RING, Text{ "Gerudo Fortress Key Ring", "Trousseau du Repaire des Voleurs", "Schlüsselbund (Diebesversteck)" }, ITEMTYPE_FORTRESS_SMALLKEY, 0xDC, true, LOGIC_GERUDO_FORTRESS_KEYS, RHT_GERUDO_FORTRESS_KEY_RING, RG_GERUDO_FORTRESS_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GERUDO_FORTRESS_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); @@ -241,6 +241,65 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_GANONS_CASTLE_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); itemTable[RG_TREASURE_GAME_KEY_RING] = Item(RG_TREASURE_GAME_KEY_RING, Text{ "Chest Game Key Ring", "Trousseau du jeu la Chasse-aux-Trésors", "Schlüsselbund (Truhenlotterie)" }, ITEMTYPE_SMALLKEY, 0xDE, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_KEY_RING, RG_TREASURE_GAME_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_TREASURE_GAME_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); + // Silver Rupees + itemTable[RG_SHADOW_SILVER_BLADES] = Item(RG_SHADOW_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_SILVER_PIT] = Item(RG_SHADOW_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_SILVER_SPIKES] = Item(RG_SHADOW_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_SILVER_CHILD] = Item(RG_SPIRIT_SILVER_CHILD, Text{ "Spirit Silver: Child" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_CHILD].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_SILVER_SUN] = Item(RG_SPIRIT_SILVER_SUN, Text{ "Spirit Silver: Sun" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_SUN].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_SILVER_BOULDERS] = Item(RG_SPIRIT_SILVER_BOULDERS, Text{ "Spirit Silver: Boulders" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_BOULDERS].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_BOTW_SILVER] = Item(RG_BOTW_SILVER, Text{ "Bottom of the Well Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_BOTW_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_ICE_CAVERN_SILVER_BLADES] = Item(RG_ICE_CAVERN_SILVER_BLADES, Text{ "Ice Cavern Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_ICE_CAVERN_SILVER_BLOCK] = Item(RG_ICE_CAVERN_SILVER_BLOCK, Text{ "Ice Cavern Silver: Block" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLOCK].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_SILVER_SLOPE] = Item(RG_GTG_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_SILVER_LAVA] = Item(RG_GTG_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_SILVER_WATER] = Item(RG_GTG_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_SILVER_LIGHT] = Item(RG_GANONS_CASTLE_SILVER_LIGHT, Text{ "Ganon's Castle Silver: Light" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_LIGHT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_SILVER_FOREST] = Item(RG_GANONS_CASTLE_SILVER_FOREST, Text{ "Ganon's Castle Silver: Forest" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FOREST].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_SILVER_FIRE] = Item(RG_GANONS_CASTLE_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT] = Item(RG_GANONS_CASTLE_SILVER_SPIRIT, Text{ "Ganon's Castle Silver: Spirit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER] = Item(RG_DODONGOS_CAVERN_MQ_SILVER, Text{ "Dodongo's Cavern Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SILVER_BLADES] = Item(RG_SHADOW_MQ_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SILVER_PIT] = Item(RG_SHADOW_MQ_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES] = Item(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, Text{ "Shadow Silver: Invisible Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SHADOW_MQ_SILVER_SPIKES] = Item(RG_SHADOW_MQ_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_MQ_SILVER_LOBBY] = Item(RG_SPIRIT_MQ_SILVER_LOBBY, Text{ "Spirit Silver: Lobby" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_LOBBY].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL] = Item(RG_SPIRIT_MQ_SILVER_BIG_WALL, Text{ "Spirit Silver: Big Wall" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_MQ_SILVER_SLOPE] = Item(RG_GTG_MQ_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_MQ_SILVER_LAVA] = Item(RG_GTG_MQ_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GTG_MQ_SILVER_WATER] = Item(RG_GTG_MQ_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE] = Item(RG_GANONS_CASTLE_MQ_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER] = Item(RG_GANONS_CASTLE_MQ_SILVER_WATER, Text{ "Ganon's Castle Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW] = Item(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, Text{ "Ganon's Castle Silver: Shadow" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW].SetCustomDrawFunc(Randomizer_DrawSilverRupee); // Dungeon Rewards itemTable[RG_KOKIRI_EMERALD] = Item(RG_KOKIRI_EMERALD, Text{ "Kokiri's Emerald", "Émeraude Kokiri", "Kokiri-Smaragd" }, ITEMTYPE_DUNGEONREWARD, 0xCB, true, LOGIC_KOKIRI_EMERALD, RHT_KOKIRI_EMERALD, ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); itemTable[RG_GORON_RUBY] = Item(RG_GORON_RUBY, Text{ "Goron's Ruby", "Rubis Goron", "Goronen-Rubin" }, ITEMTYPE_DUNGEONREWARD, 0xCC, true, LOGIC_GORON_RUBY, RHT_GORON_RUBY, ITEM_GORON_RUBY, OBJECT_GI_JEWEL, GID_GORON_RUBY, 0x81, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); @@ -349,7 +408,7 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_OCARINA_C_RIGHT_BUTTON] = Item(RG_OCARINA_C_RIGHT_BUTTON, Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "C-Rechts-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, RG_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton); - itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_WALLET, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); + itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_NONE, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale); itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER); diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp index 001ad5d81..5dd3e1dd0 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/bottom_of_the_well.cpp @@ -156,6 +156,11 @@ void RegionTable_Init_BottomOfTheWell() { LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_7, logic->CanCutShrubs() && logic->BlastOrSmash()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_8, logic->CanCutShrubs() && logic->BlastOrSmash()), LOCATION(RC_BOTTOM_OF_THE_WELL_BASEMENT_BEHIND_ROCKS_GRASS_9, logic->CanCutShrubs() && logic->BlastOrSmash()), + LOCATION(RC_BOTW_SILVER_1, true), + LOCATION(RC_BOTW_SILVER_2, true), + LOCATION(RC_BOTW_SILVER_3, true), + LOCATION(RC_BOTW_SILVER_4, true), + LOCATION(RC_BOTW_SILVER_5, true), }, { //Exits Entrance(RR_BOTTOM_OF_THE_WELL_SOUTHWEST_ROOM, []{return logic->IsChild && logic->CanPassEnemy(RE_BIG_SKULLTULA);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp index d8e64f996..7402a844d 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/dodongos_cavern.cpp @@ -313,6 +313,11 @@ void RegionTable_Init_DodongosCavern() { LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, logic->CanBreakPots()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_1, logic->CanBreakCrates()), LOCATION(RC_DODONGOS_CAVERN_MQ_STAIRCASE_LOWER_CRATE_2, logic->CanBreakCrates()), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_1, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_2, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_3, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_4, true), + LOCATION(RC_DODONGOS_CAVERN_MQ_SILVER_5, true), }, { //Exits Entrance(RR_DODONGOS_CAVERN_MQ_LOBBY, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp index 8571ba384..68e2b67eb 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp @@ -60,6 +60,11 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, logic->CanKillEnemy(RE_WOLFOS)), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT))))), LOCATION(RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, logic->CanBreakPots() && (logic->CanUse(RG_FIRE_ARROWS) || (logic->CanUse(RG_DINS_FIRE) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT))))), + LOCATION(RC_GANONS_CASTLE_SILVER_FOREST_1, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FOREST_2, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FOREST_3, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FOREST_4, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FOREST_5, true), }, {}); areaTable[RR_GANONS_CASTLE_FIRE_TRIAL] = Region("Ganon's Castle Fire Trial", SCENE_INSIDE_GANONS_CASTLE, { @@ -70,6 +75,11 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_GORON_TUNIC) && logic->CanUse(RG_GOLDEN_GAUNTLETS) && logic->CanUse(RG_LONGSHOT)), LOCATION(RC_GANONS_CASTLE_FIRE_TRIAL_HEART, logic->CanUse(RG_GORON_TUNIC)), + LOCATION(RC_GANONS_CASTLE_SILVER_FIRE_1, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FIRE_2, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FIRE_3, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FIRE_4, true), + LOCATION(RC_GANONS_CASTLE_SILVER_FIRE_5, true), }, {}); areaTable[RR_GANONS_CASTLE_WATER_TRIAL] = Region("Ganon's Castle Water Trial", SCENE_INSIDE_GANONS_CASTLE, { @@ -114,6 +124,11 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, ((ctx->GetTrickOption(RT_GANON_SPIRIT_TRIAL_HOOKSHOT) && logic->CanJumpslashExceptHammer()) || logic->CanUse(RG_HOOKSHOT)) && logic->CanUse(RG_BOMBCHU_5) && logic->CanUse(RG_FAIRY_BOW) && (logic->CanUse(RG_MIRROR_SHIELD) || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS)))), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG)), LOCATION(RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, true), + LOCATION(RC_GANONS_CASTLE_SILVER_SPIRIT_1, true), + LOCATION(RC_GANONS_CASTLE_SILVER_SPIRIT_2, true), + LOCATION(RC_GANONS_CASTLE_SILVER_SPIRIT_3, true), + LOCATION(RC_GANONS_CASTLE_SILVER_SPIRIT_4, true), + LOCATION(RC_GANONS_CASTLE_SILVER_SPIRIT_5, true), }, {}); areaTable[RR_GANONS_CASTLE_LIGHT_TRIAL] = Region("Ganon's Castle Light Trial", SCENE_INSIDE_GANONS_CASTLE, { @@ -132,6 +147,11 @@ void RegionTable_Init_GanonsCastle() { LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, logic->CanBreakPots() && logic->SmallKeys(RR_GANONS_CASTLE, 2)), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, logic->CanBreakPots() && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_GANONS_CASTLE, 2) && (ctx->GetTrickOption(RT_LENS_GANON) || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_GANONS_CASTLE_SILVER_LIGHT_1, true), + LOCATION(RC_GANONS_CASTLE_SILVER_LIGHT_2, true), + LOCATION(RC_GANONS_CASTLE_SILVER_LIGHT_3, true), + LOCATION(RC_GANONS_CASTLE_SILVER_LIGHT_4, true), + LOCATION(RC_GANONS_CASTLE_SILVER_LIGHT_5, true), }, {}); #pragma endregion @@ -216,7 +236,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_FOREST_TRIAL_BEAMOS_ROOM, []{return true;}), }); - areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_FIRE_TRIAL_MAIN_ROOM] = Region("Ganon's Castle MQ Fire Trial Main Room", SCENE_INSIDE_GANONS_CASTLE, {}, { + //Locations + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_MAIN, []{return true;}), //2 checks, 1 for the rupees, 1 for actually making it, as the rupees are permanent but throwing a pillar is not @@ -246,7 +273,14 @@ void RegionTable_Init_GanonsCastle() { Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3) && Here(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->BlueFire();});}), }); - areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", SCENE_INSIDE_GANONS_CASTLE, {}, {}, { + areaTable[RR_GANONS_CASTLE_MQ_WATER_TRIAL_BLOCK_ROOM] = Region("Ganon's Castle MQ Water Trial Block Room", SCENE_INSIDE_GANONS_CASTLE, {}, { + //Locations + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_WATER_1, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_WATER_2, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_WATER_3, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_WATER_4, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_WATER_5, true), + }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_WATER_TRIAL_GEYSER_ROOM, []{return logic->SmallKeys(RR_GANONS_CASTLE, 3);}), //This assumes there's no way for child to have blue fire and not adult. @@ -310,6 +344,12 @@ void RegionTable_Init_GanonsCastle() { areaTable[RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_FAR_SIDE] = Region("Ganon's Castle MQ Shadow Trial Far Side", SCENE_INSIDE_GANONS_CASTLE, {}, { //Locations LOCATION(RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, logic->CanHitEyeTargets()), + // TODO move these to their proper region + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, true), + LOCATION(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, true), }, { //Exits Entrance(RR_GANONS_CASTLE_MQ_SHADOW_TRIAL_BEAMOS_TORCH, []{return logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_HOVER_BOOTS);}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp index 6c891abc0..479a98f31 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/gerudo_training_ground.cpp @@ -25,6 +25,11 @@ void RegionTable_Init_GerudoTrainingGround() { LOCATION(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, true), LOCATION(RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, true), + LOCATION(RC_GTG_SILVER_SLOPE_1, true), + LOCATION(RC_GTG_SILVER_SLOPE_2, true), + LOCATION(RC_GTG_SILVER_SLOPE_3, true), + LOCATION(RC_GTG_SILVER_SLOPE_4, true), + LOCATION(RC_GTG_SILVER_SLOPE_5, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_ENTRYWAY, []{return true;}), @@ -59,6 +64,16 @@ void RegionTable_Init_GerudoTrainingGround() { areaTable[RR_GERUDO_TRAINING_GROUND_LAVA_ROOM] = Region("Gerudo Training Ground Lava Room", SCENE_GERUDO_TRAINING_GROUND, {}, { //Locations LOCATION(RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + LOCATION(RC_GTG_SILVER_LAVA_1, true), + LOCATION(RC_GTG_SILVER_LAVA_2, true), + LOCATION(RC_GTG_SILVER_LAVA_3, true), + LOCATION(RC_GTG_SILVER_LAVA_4, true), + LOCATION(RC_GTG_SILVER_LAVA_5, true), + LOCATION(RC_GTG_SILVER_WATER_1, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + LOCATION(RC_GTG_SILVER_WATER_2, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + LOCATION(RC_GTG_SILVER_WATER_3, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + LOCATION(RC_GTG_SILVER_WATER_4, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), + LOCATION(RC_GTG_SILVER_WATER_5, logic->CanUse(RG_HOOKSHOT) && logic->CanUse(RG_SONG_OF_TIME) && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_CENTRAL_MAZE_RIGHT, []{return logic->CanUse(RG_SONG_OF_TIME) || logic->IsChild;}), @@ -170,7 +185,14 @@ void RegionTable_Init_GerudoTrainingGround() { Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return logic->CanKillEnemy(RE_IRON_KNUCKLE);});}), }); - areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, {}, {}, { + areaTable[RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE] = Region("Gerudo Training Ground MQ Left Side", SCENE_GERUDO_TRAINING_GROUND, {}, { + //Locations + LOCATION(RC_GTG_MQ_SILVER_SLOPE_1, true), + LOCATION(RC_GTG_MQ_SILVER_SLOPE_2, true), + LOCATION(RC_GTG_MQ_SILVER_SLOPE_3, true), + LOCATION(RC_GTG_MQ_SILVER_SLOPE_4, true), + LOCATION(RC_GTG_MQ_SILVER_SLOPE_5, true), + }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_SAND_ROOM, []{return true;}), Entrance(RR_GERUDO_TRAINING_GROUND_MQ_STALFOS_ROOM, []{return Here(RR_GERUDO_TRAINING_GROUND_MQ_LEFT_SIDE, []{return logic->CanUse(RG_LONGSHOT) || ctx->GetTrickOption(RT_GTG_MQ_WITHOUT_HOOKSHOT) || (ctx->GetTrickOption(RT_GTG_MQ_WITH_HOOKSHOT) && logic->IsAdult && logic->CanJumpslash() && logic->CanUse(RG_HOOKSHOT));});}), @@ -276,7 +298,14 @@ void RegionTable_Init_GerudoTrainingGround() { //Events //this torch shot is possible as child but tight and obtuse enough to be a trick EventAccess(&logic->GTGPlatformSilverRupees, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS);}), - }, {}, { + }, { + LOCATION(RC_GTG_MQ_SILVER_LAVA_1, logic->GTGPlatformSilverRupees), + LOCATION(RC_GTG_MQ_SILVER_LAVA_2, logic->GTGPlatformSilverRupees), + LOCATION(RC_GTG_MQ_SILVER_LAVA_3, logic->GTGPlatformSilverRupees), + LOCATION(RC_GTG_MQ_SILVER_LAVA_4, logic->GTGPlatformSilverRupees), + LOCATION(RC_GTG_MQ_SILVER_LAVA_5, logic->GTGPlatformSilverRupees), + LOCATION(RC_GTG_MQ_SILVER_LAVA_6, logic->GTGPlatformSilverRupees), + }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_LEDGE_SIDE_PLATFORMS, []{return ((logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS)) && logic->CanUse(RG_HOVER_BOOTS);}), Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return (logic->CanUse(RG_FAIRY_BOW) && logic->IsAdult) || logic->CanUse(RG_FIRE_ARROWS) || logic->CanUse(RG_LONGSHOT);}), @@ -288,6 +317,9 @@ void RegionTable_Init_GerudoTrainingGround() { //Locations //it is possible to snipe the stingers with bow or sling before dropping in, or just get really lucky, and avoid needing to take damage, but that might be trick worthy LOCATION(RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, logic->HasFireSource() && logic->CanUse(RG_IRON_BOOTS) && logic->WaterTimer() >= 24 && logic->HasItem(RG_BRONZE_SCALE) && logic->TakeDamage()), + LOCATION(RC_GTG_MQ_SILVER_WATER_1, true), + LOCATION(RC_GTG_MQ_SILVER_WATER_2, true), + LOCATION(RC_GTG_MQ_SILVER_WATER_3, true), }, { //Exits Entrance(RR_GERUDO_TRAINING_GROUND_MQ_PLATFORMS_UNLIT_TORCH, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp index 5151377ce..07db385e6 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ice_cavern.cpp @@ -53,6 +53,16 @@ void RegionTable_Init_IceCavern() { LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), LOCATION(RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, logic->BlueFire() && (logic->CanUse(RG_SONG_OF_TIME) || logic->CanUse(RG_BOOMERANG))), + LOCATION(RC_ICE_CAVERN_SILVER_BLADES_1, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLADES_2, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLADES_3, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLADES_4, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLADES_5, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLOCK_1, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLOCK_2, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLOCK_3, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLOCK_4, true), + LOCATION(RC_ICE_CAVERN_SILVER_BLOCK_5, true), }, {}); #pragma endregion diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp index d276fc418..e8e8db84f 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/shadow_temple.cpp @@ -46,6 +46,12 @@ void RegionTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, logic->CanUse(RG_HOVER_BOOTS) || logic->CanUse(RG_HOOKSHOT)), LOCATION(RC_SHADOW_TEMPLE_GS_NEAR_SHIP, false), LOCATION(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + // TODO which of these require hoverboots/hookshot? + LOCATION(RC_SHADOW_SILVER_BLADES_1, true), + LOCATION(RC_SHADOW_SILVER_BLADES_2, true), + LOCATION(RC_SHADOW_SILVER_BLADES_3, true), + LOCATION(RC_SHADOW_SILVER_BLADES_4, true), + LOCATION(RC_SHADOW_SILVER_BLADES_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_HUGE_PIT, []{return logic->HasExplosives() && logic->IsAdult && logic->SmallKeys(RR_SHADOW_TEMPLE, 1, 2);}), @@ -72,6 +78,16 @@ void RegionTable_Init_ShadowTemple() { LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, logic->CanUse(RG_SONG_OF_STORMS)), + LOCATION(RC_SHADOW_SILVER_PIT_1, true), + LOCATION(RC_SHADOW_SILVER_PIT_2, true), + LOCATION(RC_SHADOW_SILVER_PIT_3, true), + LOCATION(RC_SHADOW_SILVER_PIT_4, true), + LOCATION(RC_SHADOW_SILVER_PIT_5, true), + LOCATION(RC_SHADOW_SILVER_SPIKES_1, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_SHADOW_SILVER_SPIKES_2, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_SHADOW_SILVER_SPIKES_3, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_SHADOW_SILVER_SPIKES_4, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_SHADOW_SILVER_SPIKES_5, logic->SmallKeys(RR_SHADOW_TEMPLE, 2, 3) && ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH))), }, { //Exits Entrance(RR_SHADOW_TEMPLE_WIND_TUNNEL, []{return ((ctx->GetTrickOption(RT_LENS_SHADOW_PLATFORM) && ctx->GetTrickOption(RT_LENS_SHADOW)) || logic->CanUse(RG_LENS_OF_TRUTH)) && logic->CanUse(RG_HOOKSHOT) && logic->SmallKeys(RR_SHADOW_TEMPLE, 3, 4);}), @@ -171,6 +187,11 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM] = Region("Shadow Temple MQ B2 Spinning Blade Room", SCENE_SHADOW_TEMPLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_MAP_CHEST, logic->CanPassEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)))), + LOCATION(RC_SHADOW_MQ_SILVER_BLADES_1, true), + LOCATION(RC_SHADOW_MQ_SILVER_BLADES_2, true), + LOCATION(RC_SHADOW_MQ_SILVER_BLADES_3, true), + LOCATION(RC_SHADOW_MQ_SILVER_BLADES_4, true), + LOCATION(RC_SHADOW_MQ_SILVER_BLADES_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_FIRST_BEAMOS, []{return Here(RR_SHADOW_TEMPLE_MQ_B2_SPINNING_BLADE_ROOM, []{return logic->CanKillEnemy(RE_BIG_SKULLTULA) && (logic->CanUse(RG_HOOKSHOT) || (logic->IsAdult && logic->CanUse(RG_HOVER_BOOTS)));});}), @@ -215,6 +236,16 @@ void RegionTable_Init_ShadowTemple() { ((ctx->GetTrickOption(RT_LENS_SHADOW_MQ) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ_INVISIBLE_BLADES) || logic->IsChild || logic->CanUse(RG_NAYRUS_LOVE))) || logic->CanUse(RG_LENS_OF_TRUTH))), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, (logic->CanUse(RG_SONG_OF_TIME) && logic->IsAdult) || (ctx->GetTrickOption(RT_SHADOW_MQ_INVISIBLE_BLADES) && logic->EffectiveHealth() > 1) || logic->CanUse(RG_BOOMERANG)), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, true), + LOCATION(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_UPPER_HUGE_PIT, []{return true;}), @@ -223,6 +254,11 @@ void RegionTable_Init_ShadowTemple() { areaTable[RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT] = Region("Shadow Temple MQ Lower Huge Pit", SCENE_SHADOW_TEMPLE, {}, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, logic->CanUse(RG_LONGSHOT)), + LOCATION(RC_SHADOW_MQ_SILVER_PIT_1, true), + LOCATION(RC_SHADOW_MQ_SILVER_PIT_2, true), + LOCATION(RC_SHADOW_MQ_SILVER_PIT_3, true), + LOCATION(RC_SHADOW_MQ_SILVER_PIT_4, true), + LOCATION(RC_SHADOW_MQ_SILVER_PIT_5, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STONE_UMBRELLA_ROOM, []{return Here(RR_SHADOW_TEMPLE_MQ_LOWER_HUGE_PIT, []{return logic->CanJumpslash() || logic->HasExplosives();});}), @@ -270,6 +306,16 @@ void RegionTable_Init_ShadowTemple() { }, { //Locations LOCATION(RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, logic->CanKillEnemy(RE_REDEAD) && (ctx->GetTrickOption(RT_LENS_SHADOW_MQ) || logic->TakeDamage() || logic->CanUse(RG_LENS_OF_TRUTH))), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_1, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_2, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_3, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_4, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_5, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_6, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_7, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_8, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_9, true), + LOCATION(RC_SHADOW_MQ_SILVER_SPIKES_10, true), }, { //Exits Entrance(RR_SHADOW_TEMPLE_MQ_STALFOS_ROOM, []{return logic->MQShadowFloorSpikeRupees;}), diff --git a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp index e2a13ecc1..8c0349f78 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/spirit_temple.cpp @@ -41,6 +41,11 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_ANUBIS_POT_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU))) && (logic->HasExplosives() || ((logic->CanUse(RG_NUTS) || logic->CanUse(RG_BOOMERANG)) && (logic->CanUse(RG_STICKS) || logic->CanUse(RG_KOKIRI_SWORD) || logic->CanUse(RG_FAIRY_SLINGSHOT))))), LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_1, logic->CanBreakSmallCrates()), LOCATION(RC_SPIRIT_TEMPLE_BEFORE_CHILD_CLIMB_SMALL_CRATE_2, logic->CanBreakSmallCrates()), + LOCATION(RC_SPIRIT_SILVER_CHILD_1, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))), + LOCATION(RC_SPIRIT_SILVER_CHILD_2, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))), + LOCATION(RC_SPIRIT_SILVER_CHILD_3, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))), + LOCATION(RC_SPIRIT_SILVER_CHILD_4, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))), + LOCATION(RC_SPIRIT_SILVER_CHILD_5, (logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_FAIRY_SLINGSHOT) || (logic->CanUse(RG_BOMBCHU_5) && ctx->GetTrickOption(RT_SPIRIT_CHILD_CHU)))), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CHILD_CLIMB, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -55,6 +60,11 @@ void RegionTable_Init_SpiritTemple() { (logic->IsChild && logic->SmallKeys(RR_SPIRIT_TEMPLE, 5) && logic->HasProjectile(HasProjectileAge::Child)) || (logic->SmallKeys(RR_SPIRIT_TEMPLE, 2) && logic->CanUse(RG_SILVER_GAUNTLETS) && (logic->HasProjectile(HasProjectileAge::Adult) || (logic->TakeDamage() && logic->CanJumpslashExceptHammer())))), LOCATION(RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_SILVER_SUN_1, true), + LOCATION(RC_SPIRIT_SILVER_SUN_2, true), + LOCATION(RC_SPIRIT_SILVER_SUN_3, true), + LOCATION(RC_SPIRIT_SILVER_SUN_4, true), + LOCATION(RC_SPIRIT_SILVER_SUN_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->HasExplosives() || (ctx->GetOption(RSK_SUNLIGHT_ARROWS) && logic->CanUse(RG_LIGHT_ARROWS));}), @@ -68,6 +78,11 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, logic->SmallKeys(RR_SPIRIT_TEMPLE, 3)), LOCATION(RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, logic->CanUse(RG_SONG_OF_TIME) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH)))), LOCATION(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, logic->CanUse(RG_SUNS_SONG) && (logic->CanUse(RG_FAIRY_BOW) || logic->CanUse(RG_HOOKSHOT) || logic->CanUse(RG_FAIRY_SLINGSHOT) || logic->CanUse(RG_BOOMERANG) || logic->CanUse(RG_BOMBCHU_5) || (logic->CanUse(RG_BOMB_BAG) && logic->IsAdult && ctx->GetTrickOption(RT_SPIRIT_LOWER_ADULT_SWITCH))) && (logic->CanUse(RG_HOVER_BOOTS) || logic->CanJumpslash())), + LOCATION(RC_SPIRIT_SILVER_BOULDERS_1, true), + LOCATION(RC_SPIRIT_SILVER_BOULDERS_2, true), + LOCATION(RC_SPIRIT_SILVER_BOULDERS_3, true), + LOCATION(RC_SPIRIT_SILVER_BOULDERS_4, true), + LOCATION(RC_SPIRIT_SILVER_BOULDERS_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_CENTRAL_CHAMBER, []{return logic->SmallKeys(RR_SPIRIT_TEMPLE, 1);}), @@ -161,6 +176,11 @@ void RegionTable_Init_SpiritTemple() { LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_MQ_SILVER_LOBBY_1, true), + LOCATION(RC_SPIRIT_MQ_SILVER_LOBBY_2, true), + LOCATION(RC_SPIRIT_MQ_SILVER_LOBBY_3, true), + LOCATION(RC_SPIRIT_MQ_SILVER_LOBBY_4, true), + LOCATION(RC_SPIRIT_MQ_SILVER_LOBBY_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_ENTRYWAY, []{return true;}), @@ -482,6 +502,11 @@ void RegionTable_Init_SpiritTemple() { //Locations LOCATION(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, logic->CanBreakPots()), LOCATION(RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, logic->CanBreakPots()), + LOCATION(RC_SPIRIT_MQ_SILVER_BIG_WALL_1, true), + LOCATION(RC_SPIRIT_MQ_SILVER_BIG_WALL_2, true), + LOCATION(RC_SPIRIT_MQ_SILVER_BIG_WALL_3, true), + LOCATION(RC_SPIRIT_MQ_SILVER_BIG_WALL_4, true), + LOCATION(RC_SPIRIT_MQ_SILVER_BIG_WALL_5, true), }, { //Exits Entrance(RR_SPIRIT_TEMPLE_MQ_FOUR_BEAMOS_ROOM, []{return true;}), diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index 50d11d9b2..c6c4ef1d2 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -476,6 +476,9 @@ void Settings::CreateOptionDescriptions() { "Overworld - Only freestanding rupees & hearts that are outside of dungeons.\n" "\n" "All Items - Shuffle all freestanding rupees & hearts."; + mOptionDescriptions[RSK_SHUFFLE_SILVER] = "Silver rupees will be shuffled.\n" + "Items will be added to pool which completes the silver rupee puzzles,\n" + "while silver rupee locations will be random items."; mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = "Shuffle fairy locations."; mOptionDescriptions[RSK_SHUFFLE_GRASS] = "Grass/Bushes will drop a randomized item the first time they're cut and collected. " diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 2a2acd5c7..87ad5fee7 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -3304,6 +3304,160 @@ std::map rcToRandomizerInf = { RC_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE, }, + { RC_SHADOW_SILVER_BLADES_1, RAND_INF_SHADOW_SILVER_BLADES_1 }, + { RC_SHADOW_SILVER_BLADES_2, RAND_INF_SHADOW_SILVER_BLADES_2 }, + { RC_SHADOW_SILVER_BLADES_3, RAND_INF_SHADOW_SILVER_BLADES_3 }, + { RC_SHADOW_SILVER_BLADES_4, RAND_INF_SHADOW_SILVER_BLADES_4 }, + { RC_SHADOW_SILVER_BLADES_5, RAND_INF_SHADOW_SILVER_BLADES_5 }, + { RC_SHADOW_SILVER_PIT_1, RAND_INF_SHADOW_SILVER_PIT_1 }, + { RC_SHADOW_SILVER_PIT_2, RAND_INF_SHADOW_SILVER_PIT_2 }, + { RC_SHADOW_SILVER_PIT_3, RAND_INF_SHADOW_SILVER_PIT_3 }, + { RC_SHADOW_SILVER_PIT_4, RAND_INF_SHADOW_SILVER_PIT_4 }, + { RC_SHADOW_SILVER_PIT_5, RAND_INF_SHADOW_SILVER_PIT_5 }, + { RC_SHADOW_SILVER_SPIKES_1, RAND_INF_SHADOW_SILVER_SPIKES_1 }, + { RC_SHADOW_SILVER_SPIKES_2, RAND_INF_SHADOW_SILVER_SPIKES_2 }, + { RC_SHADOW_SILVER_SPIKES_3, RAND_INF_SHADOW_SILVER_SPIKES_3 }, + { RC_SHADOW_SILVER_SPIKES_4, RAND_INF_SHADOW_SILVER_SPIKES_4 }, + { RC_SHADOW_SILVER_SPIKES_5, RAND_INF_SHADOW_SILVER_SPIKES_5 }, + { RC_SPIRIT_SILVER_CHILD_1, RAND_INF_SPIRIT_SILVER_CHILD_1 }, + { RC_SPIRIT_SILVER_CHILD_2, RAND_INF_SPIRIT_SILVER_CHILD_2 }, + { RC_SPIRIT_SILVER_CHILD_3, RAND_INF_SPIRIT_SILVER_CHILD_3 }, + { RC_SPIRIT_SILVER_CHILD_4, RAND_INF_SPIRIT_SILVER_CHILD_4 }, + { RC_SPIRIT_SILVER_CHILD_5, RAND_INF_SPIRIT_SILVER_CHILD_5 }, + { RC_SPIRIT_SILVER_SUN_1, RAND_INF_SPIRIT_SILVER_SUN_1 }, + { RC_SPIRIT_SILVER_SUN_2, RAND_INF_SPIRIT_SILVER_SUN_2 }, + { RC_SPIRIT_SILVER_SUN_3, RAND_INF_SPIRIT_SILVER_SUN_3 }, + { RC_SPIRIT_SILVER_SUN_4, RAND_INF_SPIRIT_SILVER_SUN_4 }, + { RC_SPIRIT_SILVER_SUN_5, RAND_INF_SPIRIT_SILVER_SUN_5 }, + { RC_SPIRIT_SILVER_BOULDERS_1, RAND_INF_SPIRIT_SILVER_BOULDERS_1 }, + { RC_SPIRIT_SILVER_BOULDERS_2, RAND_INF_SPIRIT_SILVER_BOULDERS_2 }, + { RC_SPIRIT_SILVER_BOULDERS_3, RAND_INF_SPIRIT_SILVER_BOULDERS_3 }, + { RC_SPIRIT_SILVER_BOULDERS_4, RAND_INF_SPIRIT_SILVER_BOULDERS_4 }, + { RC_SPIRIT_SILVER_BOULDERS_5, RAND_INF_SPIRIT_SILVER_BOULDERS_5 }, + { RC_BOTW_SILVER_1, RAND_INF_BOTW_SILVER_1 }, + { RC_BOTW_SILVER_2, RAND_INF_BOTW_SILVER_2 }, + { RC_BOTW_SILVER_3, RAND_INF_BOTW_SILVER_3 }, + { RC_BOTW_SILVER_4, RAND_INF_BOTW_SILVER_4 }, + { RC_BOTW_SILVER_5, RAND_INF_BOTW_SILVER_5 }, + { RC_ICE_CAVERN_SILVER_BLADES_1, RAND_INF_ICE_CAVERN_SILVER_BLADES_1 }, + { RC_ICE_CAVERN_SILVER_BLADES_2, RAND_INF_ICE_CAVERN_SILVER_BLADES_2 }, + { RC_ICE_CAVERN_SILVER_BLADES_3, RAND_INF_ICE_CAVERN_SILVER_BLADES_3 }, + { RC_ICE_CAVERN_SILVER_BLADES_4, RAND_INF_ICE_CAVERN_SILVER_BLADES_4 }, + { RC_ICE_CAVERN_SILVER_BLADES_5, RAND_INF_ICE_CAVERN_SILVER_BLADES_5 }, + { RC_ICE_CAVERN_SILVER_BLOCK_1, RAND_INF_ICE_CAVERN_SILVER_BLOCK_1 }, + { RC_ICE_CAVERN_SILVER_BLOCK_2, RAND_INF_ICE_CAVERN_SILVER_BLOCK_2 }, + { RC_ICE_CAVERN_SILVER_BLOCK_3, RAND_INF_ICE_CAVERN_SILVER_BLOCK_3 }, + { RC_ICE_CAVERN_SILVER_BLOCK_4, RAND_INF_ICE_CAVERN_SILVER_BLOCK_4 }, + { RC_ICE_CAVERN_SILVER_BLOCK_5, RAND_INF_ICE_CAVERN_SILVER_BLOCK_5 }, + { RC_GTG_SILVER_SLOPE_1, RAND_INF_GTG_SILVER_SLOPE_1 }, + { RC_GTG_SILVER_SLOPE_2, RAND_INF_GTG_SILVER_SLOPE_2 }, + { RC_GTG_SILVER_SLOPE_3, RAND_INF_GTG_SILVER_SLOPE_3 }, + { RC_GTG_SILVER_SLOPE_4, RAND_INF_GTG_SILVER_SLOPE_4 }, + { RC_GTG_SILVER_SLOPE_5, RAND_INF_GTG_SILVER_SLOPE_5 }, + { RC_GTG_SILVER_LAVA_1, RAND_INF_GTG_SILVER_LAVA_1 }, + { RC_GTG_SILVER_LAVA_2, RAND_INF_GTG_SILVER_LAVA_2 }, + { RC_GTG_SILVER_LAVA_3, RAND_INF_GTG_SILVER_LAVA_3 }, + { RC_GTG_SILVER_LAVA_4, RAND_INF_GTG_SILVER_LAVA_4 }, + { RC_GTG_SILVER_LAVA_5, RAND_INF_GTG_SILVER_LAVA_5 }, + { RC_GTG_SILVER_WATER_1, RAND_INF_GTG_SILVER_WATER_1 }, + { RC_GTG_SILVER_WATER_2, RAND_INF_GTG_SILVER_WATER_2 }, + { RC_GTG_SILVER_WATER_3, RAND_INF_GTG_SILVER_WATER_3 }, + { RC_GTG_SILVER_WATER_4, RAND_INF_GTG_SILVER_WATER_4 }, + { RC_GTG_SILVER_WATER_5, RAND_INF_GTG_SILVER_WATER_5 }, + { RC_GANONS_CASTLE_SILVER_LIGHT_1, RAND_INF_GANONS_CASTLE_SILVER_LIGHT_1 }, + { RC_GANONS_CASTLE_SILVER_LIGHT_2, RAND_INF_GANONS_CASTLE_SILVER_LIGHT_2 }, + { RC_GANONS_CASTLE_SILVER_LIGHT_3, RAND_INF_GANONS_CASTLE_SILVER_LIGHT_3 }, + { RC_GANONS_CASTLE_SILVER_LIGHT_4, RAND_INF_GANONS_CASTLE_SILVER_LIGHT_4 }, + { RC_GANONS_CASTLE_SILVER_LIGHT_5, RAND_INF_GANONS_CASTLE_SILVER_LIGHT_5 }, + { RC_GANONS_CASTLE_SILVER_FOREST_1, RAND_INF_GANONS_CASTLE_SILVER_FOREST_1 }, + { RC_GANONS_CASTLE_SILVER_FOREST_2, RAND_INF_GANONS_CASTLE_SILVER_FOREST_2 }, + { RC_GANONS_CASTLE_SILVER_FOREST_3, RAND_INF_GANONS_CASTLE_SILVER_FOREST_3 }, + { RC_GANONS_CASTLE_SILVER_FOREST_4, RAND_INF_GANONS_CASTLE_SILVER_FOREST_4 }, + { RC_GANONS_CASTLE_SILVER_FOREST_5, RAND_INF_GANONS_CASTLE_SILVER_FOREST_5 }, + { RC_GANONS_CASTLE_SILVER_FIRE_1, RAND_INF_GANONS_CASTLE_SILVER_FIRE_1 }, + { RC_GANONS_CASTLE_SILVER_FIRE_2, RAND_INF_GANONS_CASTLE_SILVER_FIRE_2 }, + { RC_GANONS_CASTLE_SILVER_FIRE_3, RAND_INF_GANONS_CASTLE_SILVER_FIRE_3 }, + { RC_GANONS_CASTLE_SILVER_FIRE_4, RAND_INF_GANONS_CASTLE_SILVER_FIRE_4 }, + { RC_GANONS_CASTLE_SILVER_FIRE_5, RAND_INF_GANONS_CASTLE_SILVER_FIRE_5 }, + { RC_GANONS_CASTLE_SILVER_SPIRIT_1, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_1 }, + { RC_GANONS_CASTLE_SILVER_SPIRIT_2, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_2 }, + { RC_GANONS_CASTLE_SILVER_SPIRIT_3, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_3 }, + { RC_GANONS_CASTLE_SILVER_SPIRIT_4, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_4 }, + { RC_GANONS_CASTLE_SILVER_SPIRIT_5, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_5 }, + { RC_DODONGOS_CAVERN_MQ_SILVER_1, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_1 }, + { RC_DODONGOS_CAVERN_MQ_SILVER_2, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_2 }, + { RC_DODONGOS_CAVERN_MQ_SILVER_3, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_3 }, + { RC_DODONGOS_CAVERN_MQ_SILVER_4, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_4 }, + { RC_DODONGOS_CAVERN_MQ_SILVER_5, RAND_INF_DODONGOS_CAVERN_MQ_SILVER_5 }, + { RC_SHADOW_MQ_SILVER_BLADES_1, RAND_INF_SHADOW_MQ_SILVER_BLADES_1 }, + { RC_SHADOW_MQ_SILVER_BLADES_2, RAND_INF_SHADOW_MQ_SILVER_BLADES_2 }, + { RC_SHADOW_MQ_SILVER_BLADES_3, RAND_INF_SHADOW_MQ_SILVER_BLADES_3 }, + { RC_SHADOW_MQ_SILVER_BLADES_4, RAND_INF_SHADOW_MQ_SILVER_BLADES_4 }, + { RC_SHADOW_MQ_SILVER_BLADES_5, RAND_INF_SHADOW_MQ_SILVER_BLADES_5 }, + { RC_SHADOW_MQ_SILVER_PIT_1, RAND_INF_SHADOW_MQ_SILVER_PIT_1 }, + { RC_SHADOW_MQ_SILVER_PIT_2, RAND_INF_SHADOW_MQ_SILVER_PIT_2 }, + { RC_SHADOW_MQ_SILVER_PIT_3, RAND_INF_SHADOW_MQ_SILVER_PIT_3 }, + { RC_SHADOW_MQ_SILVER_PIT_4, RAND_INF_SHADOW_MQ_SILVER_PIT_4 }, + { RC_SHADOW_MQ_SILVER_PIT_5, RAND_INF_SHADOW_MQ_SILVER_PIT_5 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9 }, + { RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10 }, + { RC_SHADOW_MQ_SILVER_SPIKES_1, RAND_INF_SHADOW_MQ_SILVER_SPIKES_1 }, + { RC_SHADOW_MQ_SILVER_SPIKES_2, RAND_INF_SHADOW_MQ_SILVER_SPIKES_2 }, + { RC_SHADOW_MQ_SILVER_SPIKES_3, RAND_INF_SHADOW_MQ_SILVER_SPIKES_3 }, + { RC_SHADOW_MQ_SILVER_SPIKES_4, RAND_INF_SHADOW_MQ_SILVER_SPIKES_4 }, + { RC_SHADOW_MQ_SILVER_SPIKES_5, RAND_INF_SHADOW_MQ_SILVER_SPIKES_5 }, + { RC_SHADOW_MQ_SILVER_SPIKES_6, RAND_INF_SHADOW_MQ_SILVER_SPIKES_6 }, + { RC_SHADOW_MQ_SILVER_SPIKES_7, RAND_INF_SHADOW_MQ_SILVER_SPIKES_7 }, + { RC_SHADOW_MQ_SILVER_SPIKES_8, RAND_INF_SHADOW_MQ_SILVER_SPIKES_8 }, + { RC_SHADOW_MQ_SILVER_SPIKES_9, RAND_INF_SHADOW_MQ_SILVER_SPIKES_9 }, + { RC_SHADOW_MQ_SILVER_SPIKES_10, RAND_INF_SHADOW_MQ_SILVER_SPIKES_10 }, + { RC_SPIRIT_MQ_SILVER_LOBBY_1, RAND_INF_SPIRIT_MQ_SILVER_LOBBY_1 }, + { RC_SPIRIT_MQ_SILVER_LOBBY_2, RAND_INF_SPIRIT_MQ_SILVER_LOBBY_2 }, + { RC_SPIRIT_MQ_SILVER_LOBBY_3, RAND_INF_SPIRIT_MQ_SILVER_LOBBY_3 }, + { RC_SPIRIT_MQ_SILVER_LOBBY_4, RAND_INF_SPIRIT_MQ_SILVER_LOBBY_4 }, + { RC_SPIRIT_MQ_SILVER_LOBBY_5, RAND_INF_SPIRIT_MQ_SILVER_LOBBY_5 }, + { RC_SPIRIT_MQ_SILVER_BIG_WALL_1, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_1 }, + { RC_SPIRIT_MQ_SILVER_BIG_WALL_2, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_2 }, + { RC_SPIRIT_MQ_SILVER_BIG_WALL_3, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_3 }, + { RC_SPIRIT_MQ_SILVER_BIG_WALL_4, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_4 }, + { RC_SPIRIT_MQ_SILVER_BIG_WALL_5, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_5 }, + { RC_GTG_MQ_SILVER_SLOPE_1, RAND_INF_GTG_MQ_SILVER_SLOPE_1 }, + { RC_GTG_MQ_SILVER_SLOPE_2, RAND_INF_GTG_MQ_SILVER_SLOPE_2 }, + { RC_GTG_MQ_SILVER_SLOPE_3, RAND_INF_GTG_MQ_SILVER_SLOPE_3 }, + { RC_GTG_MQ_SILVER_SLOPE_4, RAND_INF_GTG_MQ_SILVER_SLOPE_4 }, + { RC_GTG_MQ_SILVER_SLOPE_5, RAND_INF_GTG_MQ_SILVER_SLOPE_5 }, + { RC_GTG_MQ_SILVER_LAVA_1, RAND_INF_GTG_MQ_SILVER_LAVA_1 }, + { RC_GTG_MQ_SILVER_LAVA_2, RAND_INF_GTG_MQ_SILVER_LAVA_2 }, + { RC_GTG_MQ_SILVER_LAVA_3, RAND_INF_GTG_MQ_SILVER_LAVA_3 }, + { RC_GTG_MQ_SILVER_LAVA_4, RAND_INF_GTG_MQ_SILVER_LAVA_4 }, + { RC_GTG_MQ_SILVER_LAVA_5, RAND_INF_GTG_MQ_SILVER_LAVA_5 }, + { RC_GTG_MQ_SILVER_LAVA_6, RAND_INF_GTG_MQ_SILVER_LAVA_6 }, + { RC_GTG_MQ_SILVER_WATER_1, RAND_INF_GTG_MQ_SILVER_WATER_1 }, + { RC_GTG_MQ_SILVER_WATER_2, RAND_INF_GTG_MQ_SILVER_WATER_2 }, + { RC_GTG_MQ_SILVER_WATER_3, RAND_INF_GTG_MQ_SILVER_WATER_3 }, + { RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_1 }, + { RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_2 }, + { RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_3 }, + { RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_4 }, + { RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_5 }, + { RC_GANONS_CASTLE_MQ_SILVER_WATER_1, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_1 }, + { RC_GANONS_CASTLE_MQ_SILVER_WATER_2, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_2 }, + { RC_GANONS_CASTLE_MQ_SILVER_WATER_3, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_3 }, + { RC_GANONS_CASTLE_MQ_SILVER_WATER_4, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_4 }, + { RC_GANONS_CASTLE_MQ_SILVER_WATER_5, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_5 }, + { RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_1 }, + { RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_2 }, + { RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3 }, + { RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4 }, + { RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5 }, }; BeehiveIdentity Randomizer::IdentifyBeehive(s32 sceneNum, s16 xPosition, s32 respawnData) { @@ -3725,6 +3879,24 @@ SmallCrateIdentity Randomizer::IdentifySmallCrate(s32 sceneNum, s32 posX, s32 po return smallCrateIdentity; } +SilverIdentity Randomizer::IdentifySilver(s32 sceneNum, s32 posX, s32 posZ) { + struct SilverIdentity silverIdentity; + + silverIdentity.randomizerInf = RAND_INF_MAX; + silverIdentity.randomizerCheck = RC_UNKNOWN_CHECK; + + s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); + + Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_TSUBO, sceneNum, actorParams); + + if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { + silverIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; + silverIdentity.randomizerCheck = location->GetRandomizerCheck(); + } + + return silverIdentity; +} + u8 Randomizer::GetRandoSettingValue(RandomizerSettingKey randoSettingKey) { return Rando::Context::GetInstance()->GetOption(randoSettingKey).Get(); } diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index 78f48b01c..c2f7f63e4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -57,6 +57,7 @@ class Randomizer { GrassIdentity IdentifyGrass(s32 sceneNum, s32 posX, s32 posZ, s32 respawnData, s32 linkAge); CrateIdentity IdentifyCrate(s32 sceneNum, s32 posX, s32 posZ); SmallCrateIdentity IdentifySmallCrate(s32 sceneNum, s32 posX, s32 posZ); + SilverIdentity IdentifySilver(s32 sceneNum, s32 posX, s32 posZ); GetItemEntry GetItemFromKnownCheck(RandomizerCheck randomizerCheck, GetItemID ogItemId, bool checkObtainability = true); GetItemEntry GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 15a2fbd37..c4f98fac1 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -304,6 +304,7 @@ typedef enum { RCTYPE_BEEHIVE, // Beehives RCTYPE_FISH, // Fishes RCTYPE_FREESTANDING, // Freestanding rupees and hearts + RCTYPE_SILVER, // Silver rupees RCTYPE_FAIRY, // Fairies RCTYPE_GRASS, // Grass } RandomizerCheckType; @@ -2949,6 +2950,160 @@ typedef enum { RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, + RC_SHADOW_SILVER_BLADES_1, + RC_SHADOW_SILVER_BLADES_2, + RC_SHADOW_SILVER_BLADES_3, + RC_SHADOW_SILVER_BLADES_4, + RC_SHADOW_SILVER_BLADES_5, + RC_SHADOW_SILVER_PIT_1, + RC_SHADOW_SILVER_PIT_2, + RC_SHADOW_SILVER_PIT_3, + RC_SHADOW_SILVER_PIT_4, + RC_SHADOW_SILVER_PIT_5, + RC_SHADOW_SILVER_SPIKES_1, + RC_SHADOW_SILVER_SPIKES_2, + RC_SHADOW_SILVER_SPIKES_3, + RC_SHADOW_SILVER_SPIKES_4, + RC_SHADOW_SILVER_SPIKES_5, + RC_SPIRIT_SILVER_CHILD_1, + RC_SPIRIT_SILVER_CHILD_2, + RC_SPIRIT_SILVER_CHILD_3, + RC_SPIRIT_SILVER_CHILD_4, + RC_SPIRIT_SILVER_CHILD_5, + RC_SPIRIT_SILVER_SUN_1, + RC_SPIRIT_SILVER_SUN_2, + RC_SPIRIT_SILVER_SUN_3, + RC_SPIRIT_SILVER_SUN_4, + RC_SPIRIT_SILVER_SUN_5, + RC_SPIRIT_SILVER_BOULDERS_1, + RC_SPIRIT_SILVER_BOULDERS_2, + RC_SPIRIT_SILVER_BOULDERS_3, + RC_SPIRIT_SILVER_BOULDERS_4, + RC_SPIRIT_SILVER_BOULDERS_5, + RC_BOTW_SILVER_1, + RC_BOTW_SILVER_2, + RC_BOTW_SILVER_3, + RC_BOTW_SILVER_4, + RC_BOTW_SILVER_5, + RC_ICE_CAVERN_SILVER_BLADES_1, + RC_ICE_CAVERN_SILVER_BLADES_2, + RC_ICE_CAVERN_SILVER_BLADES_3, + RC_ICE_CAVERN_SILVER_BLADES_4, + RC_ICE_CAVERN_SILVER_BLADES_5, + RC_ICE_CAVERN_SILVER_BLOCK_1, + RC_ICE_CAVERN_SILVER_BLOCK_2, + RC_ICE_CAVERN_SILVER_BLOCK_3, + RC_ICE_CAVERN_SILVER_BLOCK_4, + RC_ICE_CAVERN_SILVER_BLOCK_5, + RC_GTG_SILVER_SLOPE_1, + RC_GTG_SILVER_SLOPE_2, + RC_GTG_SILVER_SLOPE_3, + RC_GTG_SILVER_SLOPE_4, + RC_GTG_SILVER_SLOPE_5, + RC_GTG_SILVER_LAVA_1, + RC_GTG_SILVER_LAVA_2, + RC_GTG_SILVER_LAVA_3, + RC_GTG_SILVER_LAVA_4, + RC_GTG_SILVER_LAVA_5, + RC_GTG_SILVER_WATER_1, + RC_GTG_SILVER_WATER_2, + RC_GTG_SILVER_WATER_3, + RC_GTG_SILVER_WATER_4, + RC_GTG_SILVER_WATER_5, + RC_GANONS_CASTLE_SILVER_LIGHT_1, + RC_GANONS_CASTLE_SILVER_LIGHT_2, + RC_GANONS_CASTLE_SILVER_LIGHT_3, + RC_GANONS_CASTLE_SILVER_LIGHT_4, + RC_GANONS_CASTLE_SILVER_LIGHT_5, + RC_GANONS_CASTLE_SILVER_FOREST_1, + RC_GANONS_CASTLE_SILVER_FOREST_2, + RC_GANONS_CASTLE_SILVER_FOREST_3, + RC_GANONS_CASTLE_SILVER_FOREST_4, + RC_GANONS_CASTLE_SILVER_FOREST_5, + RC_GANONS_CASTLE_SILVER_FIRE_1, + RC_GANONS_CASTLE_SILVER_FIRE_2, + RC_GANONS_CASTLE_SILVER_FIRE_3, + RC_GANONS_CASTLE_SILVER_FIRE_4, + RC_GANONS_CASTLE_SILVER_FIRE_5, + RC_GANONS_CASTLE_SILVER_SPIRIT_1, + RC_GANONS_CASTLE_SILVER_SPIRIT_2, + RC_GANONS_CASTLE_SILVER_SPIRIT_3, + RC_GANONS_CASTLE_SILVER_SPIRIT_4, + RC_GANONS_CASTLE_SILVER_SPIRIT_5, + RC_DODONGOS_CAVERN_MQ_SILVER_1, + RC_DODONGOS_CAVERN_MQ_SILVER_2, + RC_DODONGOS_CAVERN_MQ_SILVER_3, + RC_DODONGOS_CAVERN_MQ_SILVER_4, + RC_DODONGOS_CAVERN_MQ_SILVER_5, + RC_SHADOW_MQ_SILVER_BLADES_1, + RC_SHADOW_MQ_SILVER_BLADES_2, + RC_SHADOW_MQ_SILVER_BLADES_3, + RC_SHADOW_MQ_SILVER_BLADES_4, + RC_SHADOW_MQ_SILVER_BLADES_5, + RC_SHADOW_MQ_SILVER_PIT_1, + RC_SHADOW_MQ_SILVER_PIT_2, + RC_SHADOW_MQ_SILVER_PIT_3, + RC_SHADOW_MQ_SILVER_PIT_4, + RC_SHADOW_MQ_SILVER_PIT_5, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, + RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, + RC_SHADOW_MQ_SILVER_SPIKES_1, + RC_SHADOW_MQ_SILVER_SPIKES_2, + RC_SHADOW_MQ_SILVER_SPIKES_3, + RC_SHADOW_MQ_SILVER_SPIKES_4, + RC_SHADOW_MQ_SILVER_SPIKES_5, + RC_SHADOW_MQ_SILVER_SPIKES_6, + RC_SHADOW_MQ_SILVER_SPIKES_7, + RC_SHADOW_MQ_SILVER_SPIKES_8, + RC_SHADOW_MQ_SILVER_SPIKES_9, + RC_SHADOW_MQ_SILVER_SPIKES_10, + RC_SPIRIT_MQ_SILVER_LOBBY_1, + RC_SPIRIT_MQ_SILVER_LOBBY_2, + RC_SPIRIT_MQ_SILVER_LOBBY_3, + RC_SPIRIT_MQ_SILVER_LOBBY_4, + RC_SPIRIT_MQ_SILVER_LOBBY_5, + RC_SPIRIT_MQ_SILVER_BIG_WALL_1, + RC_SPIRIT_MQ_SILVER_BIG_WALL_2, + RC_SPIRIT_MQ_SILVER_BIG_WALL_3, + RC_SPIRIT_MQ_SILVER_BIG_WALL_4, + RC_SPIRIT_MQ_SILVER_BIG_WALL_5, + RC_GTG_MQ_SILVER_SLOPE_1, + RC_GTG_MQ_SILVER_SLOPE_2, + RC_GTG_MQ_SILVER_SLOPE_3, + RC_GTG_MQ_SILVER_SLOPE_4, + RC_GTG_MQ_SILVER_SLOPE_5, + RC_GTG_MQ_SILVER_LAVA_1, + RC_GTG_MQ_SILVER_LAVA_2, + RC_GTG_MQ_SILVER_LAVA_3, + RC_GTG_MQ_SILVER_LAVA_4, + RC_GTG_MQ_SILVER_LAVA_5, + RC_GTG_MQ_SILVER_LAVA_6, + RC_GTG_MQ_SILVER_WATER_1, + RC_GTG_MQ_SILVER_WATER_2, + RC_GTG_MQ_SILVER_WATER_3, + RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, + RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, + RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, + RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, + RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, + RC_GANONS_CASTLE_MQ_SILVER_WATER_1, + RC_GANONS_CASTLE_MQ_SILVER_WATER_2, + RC_GANONS_CASTLE_MQ_SILVER_WATER_3, + RC_GANONS_CASTLE_MQ_SILVER_WATER_4, + RC_GANONS_CASTLE_MQ_SILVER_WATER_5, + RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, + RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, + RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, + RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, + RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, RC_SFM_FAIRY_GROTTO_FAIRY_1, RC_SFM_FAIRY_GROTTO_FAIRY_2, RC_SFM_FAIRY_GROTTO_FAIRY_3, @@ -3916,6 +4071,35 @@ typedef enum { RG_GERUDO_FORTRESS_KEY_RING, RG_GANONS_CASTLE_KEY_RING, RG_TREASURE_GAME_KEY_RING, + RG_SHADOW_SILVER_BLADES, + RG_SHADOW_SILVER_PIT, + RG_SHADOW_SILVER_SPIKES, + RG_SPIRIT_SILVER_CHILD, + RG_SPIRIT_SILVER_SUN, + RG_SPIRIT_SILVER_BOULDERS, + RG_BOTW_SILVER, + RG_ICE_CAVERN_SILVER_BLADES, + RG_ICE_CAVERN_SILVER_BLOCK, + RG_GTG_SILVER_SLOPE, + RG_GTG_SILVER_LAVA, + RG_GTG_SILVER_WATER, + RG_GANONS_CASTLE_SILVER_LIGHT, + RG_GANONS_CASTLE_SILVER_FOREST, + RG_GANONS_CASTLE_SILVER_FIRE, + RG_GANONS_CASTLE_SILVER_SPIRIT, + RG_DODONGOS_CAVERN_MQ_SILVER, + RG_SHADOW_MQ_SILVER_BLADES, + RG_SHADOW_MQ_SILVER_PIT, + RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, + RG_SHADOW_MQ_SILVER_SPIKES, + RG_SPIRIT_MQ_SILVER_LOBBY, + RG_SPIRIT_MQ_SILVER_BIG_WALL, + RG_GTG_MQ_SILVER_SLOPE, + RG_GTG_MQ_SILVER_LAVA, + RG_GTG_MQ_SILVER_WATER, + RG_GANONS_CASTLE_MQ_SILVER_FIRE, + RG_GANONS_CASTLE_MQ_SILVER_WATER, + RG_GANONS_CASTLE_MQ_SILVER_SHADOW, RG_KOKIRI_EMERALD, RG_GORON_RUBY, RG_ZORA_SAPPHIRE, @@ -5534,6 +5718,14 @@ typedef enum { RHT_ICE_CAVERN_RUPEE, RHT_GERUDO_TRAINING_GROUNDS_HEART, RHT_GANONS_CASTLE_HEART, + // Silver Shuffle + RHT_DODONGOS_CAVERN_SILVER, + RHT_SHADOW_TEMPLE_SILVER, + RHT_SPIRIT_TEMPLE_SILVER, + RHT_BOTW_SILVER, + RHT_ICE_CAVERN_SILVER, + RHT_GTG_SILVER, + RHT_GANONS_CASTLE_SILVER, // Fairy Shuffle RHT_SFM_FAIRY_GROTTO_FAIRY, RHT_ZR_FAIRY_GROTTO_FAIRY, @@ -5954,6 +6146,7 @@ typedef enum { RSK_SHUFFLE_DEKU_STICK_BAG, RSK_SHUFFLE_DEKU_NUT_BAG, RSK_SHUFFLE_FREESTANDING, + RSK_SHUFFLE_SILVER, RSK_SHUFFLE_FAIRIES, RSK_LOCK_OVERWORLD_DOORS, RSK_SHUFFLE_GRASS, @@ -6441,6 +6634,11 @@ typedef struct SmallCrateIdentity { RandomizerCheck randomizerCheck; } SmallCrateIdentity; +typedef struct SilverIdentity { + RandomizerInf randomizerInf; + RandomizerCheck randomizerCheck; +} SilverIdentity; + typedef enum { TRACKER_WINDOW_FLOATING, TRACKER_WINDOW_WINDOW, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index d42e14cb1..3863b796f 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1313,6 +1313,191 @@ DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_WATER_TRIAL_HEART) DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART) DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES_5) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD_1) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD_2) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD_3) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD_4) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD_5) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN_1) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN_2) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN_3) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN_4) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN_5) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS_1) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS_2) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS_3) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS_4) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS_5) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER_1) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER_2) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER_3) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER_4) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER_5) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES_1) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES_2) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES_3) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES_4) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES_5) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK_1) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK_2) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK_3) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK_4) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK_5) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE_1) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE_2) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE_3) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE_4) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE_5) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA_1) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA_2) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA_3) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA_4) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA_5) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER_1) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER_2) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER_3) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER_4) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_5) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_1) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_2) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_3) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_4) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_1) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_2) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_3) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_4) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_5) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_6) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_7) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_8) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_9) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES_10) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_1) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_2) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_3) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_4) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_5) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_1) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_2) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_3) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_4) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_5) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE_1) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE_2) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE_3) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE_4) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE_5) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_1) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_2) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_3) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_4) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_5) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA_6) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_WATER_1) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_WATER_2) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_WATER_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_5) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_1) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_2) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5) + +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT) +DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN) +DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS) +DEFINE_RAND_INF(RAND_INF_BOTW_SILVER) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES) +DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA) +DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT) +DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES) +DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY) +DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA) +DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_WATER) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER) +DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW) + DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1) DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2) DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3) diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index 5f8c60ac0..de70af537 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -237,6 +237,8 @@ void Settings::CreateOptions() { OPT_BOOL(RSK_SHUFFLE_DEKU_STICK_BAG, "Shuffle Deku Stick Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_STICK_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); OPT_BOOL(RSK_SHUFFLE_DEKU_NUT_BAG, "Shuffle Deku Nut Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_NUT_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); OPT_U8(RSK_SHUFFLE_FREESTANDING, "Shuffle Freestanding Items", {"Off", "Dungeons", "Overworld", "All Items"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), mOptionDescriptions[RSK_SHUFFLE_FREESTANDING], WidgetType::Combobox, RO_SHUFFLE_FREESTANDING_OFF); + // OPT_U8(RSK_SHUFFLE_SILVER, "Shuffle Silver Rupees", {"Off", "On", "Start With"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSilver"), mOptionDescriptions[RSK_SHUFFLE_SILVER], WidgetType::Combobox, RO_SHUFFLE_SILVER_OFF); + OPT_BOOL(RSK_SHUFFLE_SILVER, "Shuffle Silver Rupees", CVAR_RANDOMIZER_SETTING("ShuffleSilver"), mOptionDescriptions[RSK_SHUFFLE_SILVER]); OPT_U8(RSK_FISHSANITY, "Fishsanity", {"Off", "Shuffle only Hyrule Loach", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Fishsanity"), mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF); OPT_U8(RSK_FISHSANITY_POND_COUNT, "Pond Fish Count", {NumOpts(0,17,1)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), mOptionDescriptions[RSK_FISHSANITY_POND_COUNT], WidgetType::Slider, 0, true, IMFLAG_NONE); OPT_BOOL(RSK_FISHSANITY_AGE_SPLIT, "Pond Age Split", CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT]); @@ -1247,6 +1249,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], &mOptions[RSK_SHUFFLE_FREESTANDING], + &mOptions[RSK_SHUFFLE_SILVER], }, WidgetContainerType::COLUMN); mOptionGroups[RSG_SHUFFLE_NPCS_IMGUI] = @@ -1540,6 +1543,7 @@ void Settings::CreateOptions() { &mOptions[RSK_SHUFFLE_DEKU_STICK_BAG], &mOptions[RSK_SHUFFLE_DEKU_NUT_BAG], &mOptions[RSK_SHUFFLE_FREESTANDING], + &mOptions[RSK_SHUFFLE_SILVER], &mOptions[RSK_SHUFFLE_FAIRIES], }); mOptionGroups[RSG_SHUFFLE_DUNGEON_ITEMS] = diff --git a/soh/soh/Enhancements/randomizer/static_data.h b/soh/soh/Enhancements/randomizer/static_data.h index 7bdec17c1..f1d48ddc4 100644 --- a/soh/soh/Enhancements/randomizer/static_data.h +++ b/soh/soh/Enhancements/randomizer/static_data.h @@ -56,6 +56,7 @@ class StaticData { static void RegisterFairyLocations(); static void RegisterPotLocations(); static void RegisterFreestandingLocations(); + static void RegisterSilverLocations(); static void RegisterGrassLocations(); static void RegisterCrateLocations(); static void InitHashMaps(); diff --git a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c index 5337a61bc..5918516ce 100644 --- a/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c +++ b/soh/src/overlays/actors/ovl_En_G_Switch/z_en_g_switch.c @@ -12,6 +12,7 @@ #include "objects/gameplay_keep/gameplay_keep.h" #include "objects/object_tsubo/object_tsubo.h" #include "objects/object_gi_rupy/object_gi_rupy.h" +#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h" #include "soh/frame_interpolation.h" #define FLAGS (ACTOR_FLAG_UPDATE_CULLING_DISABLED | ACTOR_FLAG_DRAW_CULLING_DISABLED) @@ -101,7 +102,7 @@ void EnGSwitch_Init(Actor* thisx, PlayState* play) { // "maximum number of checks" osSyncPrintf(VT_FGCOL(PURPLE) "☆☆☆☆☆ 最大チェック数 ☆☆☆☆☆ %d\n" VT_RST, this->silverCount); osSyncPrintf("\n\n"); - if (Flags_GetSwitch(play, this->switchFlag)) { + if (GameInteractor_Should(VB_SILVER_DESPAWN, Flags_GetSwitch(play, this->switchFlag), this)) { // This is a reference to Hokuto no Ken osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ You are Shock! ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); Actor_Kill(&this->actor); @@ -119,7 +120,7 @@ void EnGSwitch_Init(Actor* thisx, PlayState* play) { Collider_SetCylinder(play, &this->collider, &this->actor, &sCylinderInit); this->actor.draw = EnGSwitch_DrawRupee; this->actor.shape.yOffset = 700.0f; - if (Flags_GetSwitch(play, this->switchFlag)) { + if (GameInteractor_Should(VB_SILVER_DESPAWN, Flags_GetSwitch(play, this->switchFlag), this)) { osSyncPrintf(VT_FGCOL(GREEN) "☆☆☆☆☆ You are Shock! ☆☆☆☆☆ %d\n" VT_RST, this->switchFlag); Actor_Kill(&this->actor); } else { From 4b27c42e554541dfbeb89f7219d55c03b7ab2c2b Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Mon, 7 Jul 2025 16:51:04 +0000 Subject: [PATCH 2/5] tracker etc --- soh/soh/Enhancements/randomizer/context.cpp | 1 + soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp | 2 ++ soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index 2ee39006d..74ee2f0d0 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -194,6 +194,7 @@ void Context::GenerateLocationPool() { (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || (location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || + (location.GetRCType() == RCTYPE_SILVER && !mOptions[RSK_SHUFFLE_SILVER]) || (location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES])) { continue; } diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp index da05ee508..2446a814c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_objects.cpp @@ -175,6 +175,8 @@ void RandomizerCheckObjects::UpdateImGuiVisibility() { ((CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), RO_SHUFFLE_FREESTANDING_OFF) == RO_SHUFFLE_FREESTANDING_DUNGEONS) && RandomizerCheckObjects::AreaIsDungeon(location.GetArea()))) && + (location.GetRCType() != RCTYPE_SILVER || + CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleSilver"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_BEEHIVE || CVarGetInteger(CVAR_RANDOMIZER_SETTING("ShuffleBeehives"), RO_GENERIC_NO)) && (location.GetRCType() != RCTYPE_COW || diff --git a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp index d6334b6a0..02438e9f4 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer_check_tracker.cpp @@ -56,6 +56,7 @@ bool showBeehives; bool showCows; bool showOverworldFreestanding; bool showDungeonFreestanding; +bool showSilver; bool showAdultTrade; bool showKokiriSword; bool showMasterSword; @@ -1505,6 +1506,8 @@ void LoadSettings() { showDungeonFreestanding = false; break; } + + showSilver = OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SILVER); } else { // Vanilla showOverworldFreestanding = false; showDungeonFreestanding = true; @@ -1583,6 +1586,7 @@ bool IsCheckShuffled(RandomizerCheck rc) { (loc->GetRCType() != RCTYPE_FREESTANDING || (showOverworldFreestanding && RandomizerCheckObjects::AreaIsOverworld(loc->GetArea())) || (showDungeonFreestanding && RandomizerCheckObjects::AreaIsDungeon(loc->GetArea()))) && + (loc->GetRCType() != RCTYPE_SILVER || showSilver) && (loc->GetRCType() != RCTYPE_ADULT_TRADE || showAdultTrade || rc == RC_KAK_ANJU_AS_ADULT || // adult trade checks that are always shuffled rc == RC_DMT_TRADE_CLAIM_CHECK // even when shuffle adult trade is off From 687a69335181b03ed40ec997aaae886fff6d508b Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Tue, 8 Jul 2025 01:40:22 +0000 Subject: [PATCH 3/5] fix --- .../Enhancements/randomizer/ShuffleSilver.cpp | 313 +++++++++--------- .../Enhancements/randomizer/randomizer.cpp | 62 +++- 2 files changed, 218 insertions(+), 157 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp index c66d2493a..ea06df914 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp @@ -92,6 +92,8 @@ void RegisterShuffleSilver() { auto silverIdentity = OTRGlobals::Instance->gRandomizer->IdentifySilver(gPlayState->sceneNum, (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); *should = true; + LUSLOG_WARN("!!%d %d %d %d", silver->type, silverIdentity.randomizerCheck, + (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); if (silverIdentity.randomizerCheck == RC_UNKNOWN_CHECK || Flags_GetRandomizerInf(silverIdentity.randomizerInf)) { return; @@ -99,7 +101,8 @@ void RegisterShuffleSilver() { auto spawnedActor = (EnItem00*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, silver->actor.world.pos.x, silver->actor.world.pos.y, silver->actor.world.pos.z, - 0, 0, 0, ITEM00_RUPEE_PURPLE, false); + 0, 0, 0, ITEM00_SOH_GIVE_ITEM_ENTRY, false); + LUSLOG_WARN("!!%p", spawnedActor); spawnedActor->randoCheck = silverIdentity.randomizerCheck; spawnedActor->randoInf = silverIdentity.randomizerInf; spawnedActor->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( @@ -119,160 +122,160 @@ void Rando::StaticData::RegisterSilverLocations() { return; registered = true; // clang-format off - locationTable[RC_SHADOW_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_1)); - locationTable[RC_SHADOW_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_2)); - locationTable[RC_SHADOW_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "RC_SHADOW_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_3)); - locationTable[RC_SHADOW_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "RC_SHADOW_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_4)); - locationTable[RC_SHADOW_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "RC_SHADOW_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_5)); - locationTable[RC_SHADOW_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_SILVER_PIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_1)); - locationTable[RC_SHADOW_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_SILVER_PIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "RC_SHADOW_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_2)); - locationTable[RC_SHADOW_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_SILVER_PIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "RC_SHADOW_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_3)); - locationTable[RC_SHADOW_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_SILVER_PIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "RC_SHADOW_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_4)); - locationTable[RC_SHADOW_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_SILVER_PIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "RC_SHADOW_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_5)); - locationTable[RC_SHADOW_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_1)); - locationTable[RC_SHADOW_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_2)); - locationTable[RC_SHADOW_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_3)); - locationTable[RC_SHADOW_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_4)); - locationTable[RC_SHADOW_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_5)); - locationTable[RC_SPIRIT_SILVER_CHILD_1] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "RC_SPIRIT_SILVER_CHILD_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_1)); - locationTable[RC_SPIRIT_SILVER_CHILD_2] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "RC_SPIRIT_SILVER_CHILD_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_2)); - locationTable[RC_SPIRIT_SILVER_CHILD_3] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "RC_SPIRIT_SILVER_CHILD_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_3)); - locationTable[RC_SPIRIT_SILVER_CHILD_4] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "RC_SPIRIT_SILVER_CHILD_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_4)); - locationTable[RC_SPIRIT_SILVER_CHILD_5] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "RC_SPIRIT_SILVER_CHILD_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_5)); - locationTable[RC_SPIRIT_SILVER_SUN_1] = Location::Collectable(RC_SPIRIT_SILVER_SUN_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "RC_SPIRIT_SILVER_SUN_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_1)); - locationTable[RC_SPIRIT_SILVER_SUN_2] = Location::Collectable(RC_SPIRIT_SILVER_SUN_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "RC_SPIRIT_SILVER_SUN_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_2)); - locationTable[RC_SPIRIT_SILVER_SUN_3] = Location::Collectable(RC_SPIRIT_SILVER_SUN_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "RC_SPIRIT_SILVER_SUN_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_3)); - locationTable[RC_SPIRIT_SILVER_SUN_4] = Location::Collectable(RC_SPIRIT_SILVER_SUN_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "RC_SPIRIT_SILVER_SUN_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_4)); - locationTable[RC_SPIRIT_SILVER_SUN_5] = Location::Collectable(RC_SPIRIT_SILVER_SUN_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "RC_SPIRIT_SILVER_SUN_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_5)); - locationTable[RC_SPIRIT_SILVER_BOULDERS_1] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "RC_SPIRIT_SILVER_BOULDERS_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_1)); - locationTable[RC_SPIRIT_SILVER_BOULDERS_2] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "RC_SPIRIT_SILVER_BOULDERS_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_2)); - locationTable[RC_SPIRIT_SILVER_BOULDERS_3] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "RC_SPIRIT_SILVER_BOULDERS_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_3)); - locationTable[RC_SPIRIT_SILVER_BOULDERS_4] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "RC_SPIRIT_SILVER_BOULDERS_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_4)); - locationTable[RC_SPIRIT_SILVER_BOULDERS_5] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "RC_SPIRIT_SILVER_BOULDERS_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_5)); - locationTable[RC_BOTW_SILVER_1] = Location::Collectable(RC_BOTW_SILVER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "RC_BOTW_SILVER_1", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_1)); - locationTable[RC_BOTW_SILVER_2] = Location::Collectable(RC_BOTW_SILVER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "RC_BOTW_SILVER_2", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_2)); - locationTable[RC_BOTW_SILVER_3] = Location::Collectable(RC_BOTW_SILVER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "RC_BOTW_SILVER_3", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_3)); - locationTable[RC_BOTW_SILVER_4] = Location::Collectable(RC_BOTW_SILVER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "RC_BOTW_SILVER_4", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_4)); - locationTable[RC_BOTW_SILVER_5] = Location::Collectable(RC_BOTW_SILVER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "RC_BOTW_SILVER_5", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_5)); - locationTable[RC_ICE_CAVERN_SILVER_BLADES_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "RC_ICE_CAVERN_SILVER_BLADES_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_1)); - locationTable[RC_ICE_CAVERN_SILVER_BLADES_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "RC_ICE_CAVERN_SILVER_BLADES_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_2)); - locationTable[RC_ICE_CAVERN_SILVER_BLADES_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "RC_ICE_CAVERN_SILVER_BLADES_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_3)); - locationTable[RC_ICE_CAVERN_SILVER_BLADES_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "RC_ICE_CAVERN_SILVER_BLADES_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_4)); - locationTable[RC_ICE_CAVERN_SILVER_BLADES_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "RC_ICE_CAVERN_SILVER_BLADES_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_5)); - locationTable[RC_ICE_CAVERN_SILVER_BLOCK_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "RC_ICE_CAVERN_SILVER_BLOCK_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_1)); - locationTable[RC_ICE_CAVERN_SILVER_BLOCK_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "RC_ICE_CAVERN_SILVER_BLOCK_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_2)); - locationTable[RC_ICE_CAVERN_SILVER_BLOCK_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "RC_ICE_CAVERN_SILVER_BLOCK_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_3)); - locationTable[RC_ICE_CAVERN_SILVER_BLOCK_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "RC_ICE_CAVERN_SILVER_BLOCK_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_4)); - locationTable[RC_ICE_CAVERN_SILVER_BLOCK_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "RC_ICE_CAVERN_SILVER_BLOCK_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_5)); - locationTable[RC_GTG_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_SILVER_SLOPE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "RC_GTG_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_1)); - locationTable[RC_GTG_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_SILVER_SLOPE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_2)); - locationTable[RC_GTG_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_SILVER_SLOPE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "RC_GTG_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_3)); - locationTable[RC_GTG_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_SILVER_SLOPE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "RC_GTG_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_4)); - locationTable[RC_GTG_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_SILVER_SLOPE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "RC_GTG_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_5)); - locationTable[RC_GTG_SILVER_LAVA_1] = Location::Collectable(RC_GTG_SILVER_LAVA_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "RC_GTG_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_1)); - locationTable[RC_GTG_SILVER_LAVA_2] = Location::Collectable(RC_GTG_SILVER_LAVA_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "RC_GTG_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_2)); - locationTable[RC_GTG_SILVER_LAVA_3] = Location::Collectable(RC_GTG_SILVER_LAVA_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_3)); - locationTable[RC_GTG_SILVER_LAVA_4] = Location::Collectable(RC_GTG_SILVER_LAVA_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "RC_GTG_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_4)); - locationTable[RC_GTG_SILVER_LAVA_5] = Location::Collectable(RC_GTG_SILVER_LAVA_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_5)); - locationTable[RC_GTG_SILVER_WATER_1] = Location::Collectable(RC_GTG_SILVER_WATER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "RC_GTG_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_1)); - locationTable[RC_GTG_SILVER_WATER_2] = Location::Collectable(RC_GTG_SILVER_WATER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "RC_GTG_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_2)); - locationTable[RC_GTG_SILVER_WATER_3] = Location::Collectable(RC_GTG_SILVER_WATER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_3)); - locationTable[RC_GTG_SILVER_WATER_4] = Location::Collectable(RC_GTG_SILVER_WATER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "RC_GTG_SILVER_WATER_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_4)); - locationTable[RC_GTG_SILVER_WATER_5] = Location::Collectable(RC_GTG_SILVER_WATER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_SILVER_WATER_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_5)); - locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "RC_GANONS_CASTLE_SILVER_LIGHT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_1)); - locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "RC_GANONS_CASTLE_SILVER_LIGHT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_2)); - locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "RC_GANONS_CASTLE_SILVER_LIGHT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_3)); - locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "RC_GANONS_CASTLE_SILVER_LIGHT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_4)); - locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "RC_GANONS_CASTLE_SILVER_LIGHT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_5)); - locationTable[RC_GANONS_CASTLE_SILVER_FOREST_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "RC_GANONS_CASTLE_SILVER_FOREST_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FOREST_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "RC_GANONS_CASTLE_SILVER_FOREST_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FOREST_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "RC_GANONS_CASTLE_SILVER_FOREST_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FOREST_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "RC_GANONS_CASTLE_SILVER_FOREST_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FOREST_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "RC_GANONS_CASTLE_SILVER_FOREST_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "RC_GANONS_CASTLE_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_1)); - locationTable[RC_GANONS_CASTLE_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "RC_GANONS_CASTLE_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_2)); - locationTable[RC_GANONS_CASTLE_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "RC_GANONS_CASTLE_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_3)); - locationTable[RC_GANONS_CASTLE_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "RC_GANONS_CASTLE_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_4)); - locationTable[RC_GANONS_CASTLE_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "RC_GANONS_CASTLE_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_5)); - locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "RC_GANONS_CASTLE_SILVER_SPIRIT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_1)); - locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "RC_GANONS_CASTLE_SILVER_SPIRIT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_2)); - locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "RC_GANONS_CASTLE_SILVER_SPIRIT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_3)); - locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "RC_GANONS_CASTLE_SILVER_SPIRIT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_4)); - locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "RC_GANONS_CASTLE_SILVER_SPIRIT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_5)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_1] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "RC_DODONGOS_CAVERN_MQ_SILVER_1", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_1)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_2] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "RC_DODONGOS_CAVERN_MQ_SILVER_2", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_2)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_3] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "RC_DODONGOS_CAVERN_MQ_SILVER_3", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_3)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_4] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "RC_DODONGOS_CAVERN_MQ_SILVER_4", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_4)); - locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_5] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "RC_DODONGOS_CAVERN_MQ_SILVER_5", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_5)); - locationTable[RC_SHADOW_MQ_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2810, -961 ), "RC_SHADOW_MQ_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_1)); - locationTable[RC_SHADOW_MQ_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_MQ_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_2)); - locationTable[RC_SHADOW_MQ_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_MQ_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_3)); - locationTable[RC_SHADOW_MQ_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838 ), "RC_SHADOW_MQ_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_4)); - locationTable[RC_SHADOW_MQ_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "RC_SHADOW_MQ_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_5)); - locationTable[RC_SHADOW_MQ_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "RC_SHADOW_MQ_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_1)); - locationTable[RC_SHADOW_MQ_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_2)); - locationTable[RC_SHADOW_MQ_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_3)); - locationTable[RC_SHADOW_MQ_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_MQ_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_4)); - locationTable[RC_SHADOW_MQ_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "RC_SHADOW_MQ_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_5)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9)); - locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_MQ_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_1)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_MQ_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_2)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_MQ_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_3)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "RC_SHADOW_MQ_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_4)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_MQ_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_5)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "RC_SHADOW_MQ_SILVER_SPIKES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_6)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "RC_SHADOW_MQ_SILVER_SPIKES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_7)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "RC_SHADOW_MQ_SILVER_SPIKES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_8)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "RC_SHADOW_MQ_SILVER_SPIKES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_9)); - locationTable[RC_SHADOW_MQ_SILVER_SPIKES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_MQ_SILVER_SPIKES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_10)); - locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "RC_SPIRIT_MQ_SILVER_LOBBY_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_1)); - locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "RC_SPIRIT_MQ_SILVER_LOBBY_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_2)); - locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "RC_SPIRIT_MQ_SILVER_LOBBY_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_3)); - locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -547), "RC_SPIRIT_MQ_SILVER_LOBBY_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_4)); - locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "RC_SPIRIT_MQ_SILVER_LOBBY_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_5)); - locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(723, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_1)); - locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(582, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_2)); - locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(754, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_3)); - locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(644, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_4)); - locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(681, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_5)); - locationTable[RC_GTG_MQ_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "RC_GTG_MQ_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_1)); - locationTable[RC_GTG_MQ_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1467), "RC_GTG_MQ_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_2)); - locationTable[RC_GTG_MQ_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "RC_GTG_MQ_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_3)); - locationTable[RC_GTG_MQ_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_MQ_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_4)); - locationTable[RC_GTG_MQ_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "RC_GTG_MQ_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_5)); - locationTable[RC_GTG_MQ_SILVER_LAVA_1] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_MQ_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_1)); - locationTable[RC_GTG_MQ_SILVER_LAVA_2] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_MQ_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_2)); - locationTable[RC_GTG_MQ_SILVER_LAVA_3] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "RC_GTG_MQ_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_3)); - locationTable[RC_GTG_MQ_SILVER_LAVA_4] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "RC_GTG_MQ_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_4)); - locationTable[RC_GTG_MQ_SILVER_LAVA_5] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "RC_GTG_MQ_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_5)); - locationTable[RC_GTG_MQ_SILVER_LAVA_6] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "RC_GTG_MQ_SILVER_LAVA_6", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_6)); - locationTable[RC_GTG_MQ_SILVER_WATER_1] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_MQ_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_1)); - locationTable[RC_GTG_MQ_SILVER_WATER_2] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "RC_GTG_MQ_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_2)); - locationTable[RC_GTG_MQ_SILVER_WATER_3] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_MQ_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_3)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_1)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_2)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -3354), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_3)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_4)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_5)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "RC_GANONS_CASTLE_MQ_SILVER_WATER_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_1)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "RC_GANONS_CASTLE_MQ_SILVER_WATER_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_2)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "RC_GANONS_CASTLE_MQ_SILVER_WATER_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_3)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "RC_GANONS_CASTLE_MQ_SILVER_WATER_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_4)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "RC_GANONS_CASTLE_MQ_SILVER_WATER_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_5)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_1)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_2)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4)); - locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_ITEM00, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5)); + locationTable[RC_SHADOW_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_1)); + locationTable[RC_SHADOW_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_2)); + locationTable[RC_SHADOW_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3554, -1432), "RC_SHADOW_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_3)); + locationTable[RC_SHADOW_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2869, -948), "RC_SHADOW_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_4)); + locationTable[RC_SHADOW_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838), "RC_SHADOW_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_BLADES_5)); + locationTable[RC_SHADOW_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_SILVER_PIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_1)); + locationTable[RC_SHADOW_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_SILVER_PIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2115, 3738), "RC_SHADOW_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_2)); + locationTable[RC_SHADOW_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_SILVER_PIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3368), "RC_SHADOW_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_3)); + locationTable[RC_SHADOW_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_SILVER_PIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2243, 3361), "RC_SHADOW_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_4)); + locationTable[RC_SHADOW_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_SILVER_PIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1998, 3358), "RC_SHADOW_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_PIT_5)); + locationTable[RC_SHADOW_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_1)); + locationTable[RC_SHADOW_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_2)); + locationTable[RC_SHADOW_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_3)); + locationTable[RC_SHADOW_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_4)); + locationTable[RC_SHADOW_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_SILVER_SPIKES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_SILVER_SPIKES_5)); + locationTable[RC_SPIRIT_SILVER_CHILD_1] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-766, -1075), "RC_SPIRIT_SILVER_CHILD_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_1)); + locationTable[RC_SPIRIT_SILVER_CHILD_2] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-672, -1075), "RC_SPIRIT_SILVER_CHILD_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_2)); + locationTable[RC_SPIRIT_SILVER_CHILD_3] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-511, -1075), "RC_SPIRIT_SILVER_CHILD_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_3)); + locationTable[RC_SPIRIT_SILVER_CHILD_4] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-347, -1075), "RC_SPIRIT_SILVER_CHILD_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_4)); + locationTable[RC_SPIRIT_SILVER_CHILD_5] = Location::Collectable(RC_SPIRIT_SILVER_CHILD_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-335, -1409), "RC_SPIRIT_SILVER_CHILD_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD_5)); + locationTable[RC_SPIRIT_SILVER_SUN_1] = Location::Collectable(RC_SPIRIT_SILVER_SUN_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1836, -446), "RC_SPIRIT_SILVER_SUN_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_1)); + locationTable[RC_SPIRIT_SILVER_SUN_2] = Location::Collectable(RC_SPIRIT_SILVER_SUN_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1433, -283), "RC_SPIRIT_SILVER_SUN_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_2)); + locationTable[RC_SPIRIT_SILVER_SUN_3] = Location::Collectable(RC_SPIRIT_SILVER_SUN_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1275, -247), "RC_SPIRIT_SILVER_SUN_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_3)); + locationTable[RC_SPIRIT_SILVER_SUN_4] = Location::Collectable(RC_SPIRIT_SILVER_SUN_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-1123, 428), "RC_SPIRIT_SILVER_SUN_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_4)); + locationTable[RC_SPIRIT_SILVER_SUN_5] = Location::Collectable(RC_SPIRIT_SILVER_SUN_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-984, -450), "RC_SPIRIT_SILVER_SUN_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_SUN_5)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_1] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -1355), "RC_SPIRIT_SILVER_BOULDERS_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_1)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_2] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1284, -813), "RC_SPIRIT_SILVER_BOULDERS_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_2)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_3] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -944), "RC_SPIRIT_SILVER_BOULDERS_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_3)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_4] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1856, -1219), "RC_SPIRIT_SILVER_BOULDERS_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_4)); + locationTable[RC_SPIRIT_SILVER_BOULDERS_5] = Location::Collectable(RC_SPIRIT_SILVER_BOULDERS_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1573, -920), "RC_SPIRIT_SILVER_BOULDERS_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS_5)); + locationTable[RC_BOTW_SILVER_1] = Location::Collectable(RC_BOTW_SILVER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-796, -150), "RC_BOTW_SILVER_1", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_1)); + locationTable[RC_BOTW_SILVER_2] = Location::Collectable(RC_BOTW_SILVER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-614, -297), "RC_BOTW_SILVER_2", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_2)); + locationTable[RC_BOTW_SILVER_3] = Location::Collectable(RC_BOTW_SILVER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-560, -291), "RC_BOTW_SILVER_3", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_3)); + locationTable[RC_BOTW_SILVER_4] = Location::Collectable(RC_BOTW_SILVER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-402, -401), "RC_BOTW_SILVER_4", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_4)); + locationTable[RC_BOTW_SILVER_5] = Location::Collectable(RC_BOTW_SILVER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_BOTTOM_OF_THE_WELL, TWO_ACTOR_PARAMS(-259, -234), "RC_BOTW_SILVER_5", RHT_BOTW_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_BOTW_SILVER_5)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(1, -143), "RC_ICE_CAVERN_SILVER_BLADES_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_1)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(198, -388), "RC_ICE_CAVERN_SILVER_BLADES_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_2)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(278, -637), "RC_ICE_CAVERN_SILVER_BLADES_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_3)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(389, -382), "RC_ICE_CAVERN_SILVER_BLADES_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_4)); + locationTable[RC_ICE_CAVERN_SILVER_BLADES_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLADES_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(414, -579), "RC_ICE_CAVERN_SILVER_BLADES_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES_5)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_1] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1676, -552), "RC_ICE_CAVERN_SILVER_BLOCK_1", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_1)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_2] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1558, -951), "RC_ICE_CAVERN_SILVER_BLOCK_2", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_2)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_3] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1294, -899), "RC_ICE_CAVERN_SILVER_BLOCK_3", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_3)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_4] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1120, -1577), "RC_ICE_CAVERN_SILVER_BLOCK_4", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_4)); + locationTable[RC_ICE_CAVERN_SILVER_BLOCK_5] = Location::Collectable(RC_ICE_CAVERN_SILVER_BLOCK_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_ICE_CAVERN, TWO_ACTOR_PARAMS(-1040, -485), "RC_ICE_CAVERN_SILVER_BLOCK_5", RHT_ICE_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK_5)); + locationTable[RC_GTG_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_SILVER_SLOPE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1332, -992), "RC_GTG_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_1)); + locationTable[RC_GTG_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_SILVER_SLOPE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_2)); + locationTable[RC_GTG_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_SILVER_SLOPE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1579, -999), "RC_GTG_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_3)); + locationTable[RC_GTG_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_SILVER_SLOPE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1627, -1462), "RC_GTG_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_4)); + locationTable[RC_GTG_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_SILVER_SLOPE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1887, -2134), "RC_GTG_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_SLOPE_5)); + locationTable[RC_GTG_SILVER_LAVA_1] = Location::Collectable(RC_GTG_SILVER_LAVA_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1320, -1248), "RC_GTG_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_1)); + locationTable[RC_GTG_SILVER_LAVA_2] = Location::Collectable(RC_GTG_SILVER_LAVA_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1558, -1370), "RC_GTG_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_2)); + locationTable[RC_GTG_SILVER_LAVA_3] = Location::Collectable(RC_GTG_SILVER_LAVA_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_3)); + locationTable[RC_GTG_SILVER_LAVA_4] = Location::Collectable(RC_GTG_SILVER_LAVA_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1437, -2193), "RC_GTG_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_4)); + locationTable[RC_GTG_SILVER_LAVA_5] = Location::Collectable(RC_GTG_SILVER_LAVA_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_LAVA_5)); + locationTable[RC_GTG_SILVER_WATER_1] = Location::Collectable(RC_GTG_SILVER_WATER_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2308, -1464), "RC_GTG_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_1)); + locationTable[RC_GTG_SILVER_WATER_2] = Location::Collectable(RC_GTG_SILVER_WATER_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2497, -1465), "RC_GTG_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_2)); + locationTable[RC_GTG_SILVER_WATER_3] = Location::Collectable(RC_GTG_SILVER_WATER_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_3)); + locationTable[RC_GTG_SILVER_WATER_4] = Location::Collectable(RC_GTG_SILVER_WATER_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2078, -1458), "RC_GTG_SILVER_WATER_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_4)); + locationTable[RC_GTG_SILVER_WATER_5] = Location::Collectable(RC_GTG_SILVER_WATER_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_SILVER_WATER_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_SILVER_WATER_5)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2509, -1091), "RC_GANONS_CASTLE_SILVER_LIGHT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_1)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2649, -545), "RC_GANONS_CASTLE_SILVER_LIGHT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_2)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2646, -839), "RC_GANONS_CASTLE_SILVER_LIGHT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_3)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2680, -893), "RC_GANONS_CASTLE_SILVER_LIGHT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_4)); + locationTable[RC_GANONS_CASTLE_SILVER_LIGHT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_LIGHT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2674, -777), "RC_GANONS_CASTLE_SILVER_LIGHT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT_5)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1247, 1787), "RC_GANONS_CASTLE_SILVER_FOREST_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1361, 1222), "RC_GANONS_CASTLE_SILVER_FOREST_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1538, 2225), "RC_GANONS_CASTLE_SILVER_FOREST_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1651, 2021), "RC_GANONS_CASTLE_SILVER_FOREST_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FOREST_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FOREST_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1634, 1550), "RC_GANONS_CASTLE_SILVER_FOREST_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-854, -3679), "RC_GANONS_CASTLE_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_1)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1555, -2317), "RC_GANONS_CASTLE_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_2)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-515, -3253), "RC_GANONS_CASTLE_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_3)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-604, -2592), "RC_GANONS_CASTLE_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_4)); + locationTable[RC_GANONS_CASTLE_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_FIRE_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1867, -2754), "RC_GANONS_CASTLE_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE_5)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_1] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_1, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-829, 591), "RC_GANONS_CASTLE_SILVER_SPIRIT_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_1)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_2] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_2, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-940, 270), "RC_GANONS_CASTLE_SILVER_SPIRIT_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_2)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_3] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_3, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-865, 656), "RC_GANONS_CASTLE_SILVER_SPIRIT_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_3)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_4] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_4, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-725, 942), "RC_GANONS_CASTLE_SILVER_SPIRIT_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_4)); + locationTable[RC_GANONS_CASTLE_SILVER_SPIRIT_5] = Location::Collectable(RC_GANONS_CASTLE_SILVER_SPIRIT_5, RCQUEST_VANILLA, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1142, 639), "RC_GANONS_CASTLE_SILVER_SPIRIT_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT_5)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_1] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2277, -1362), "RC_DODONGOS_CAVERN_MQ_SILVER_1", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_1)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_2] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2189, -1834), "RC_DODONGOS_CAVERN_MQ_SILVER_2", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_2)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_3] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-2411, -1836), "RC_DODONGOS_CAVERN_MQ_SILVER_3", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_3)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_4] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1907, -1243), "RC_DODONGOS_CAVERN_MQ_SILVER_4", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_4)); + locationTable[RC_DODONGOS_CAVERN_MQ_SILVER_5] = Location::Collectable(RC_DODONGOS_CAVERN_MQ_SILVER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_DODONGOS_CAVERN, TWO_ACTOR_PARAMS(-1512, -1083), "RC_DODONGOS_CAVERN_MQ_SILVER_5", RHT_DODONGOS_CAVERN_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER_5)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2810, -961 ), "RC_SHADOW_MQ_SILVER_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_1)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3007, -1222), "RC_SHADOW_MQ_SILVER_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_2)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3243, -1061), "RC_SHADOW_MQ_SILVER_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_3)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3399, -838 ), "RC_SHADOW_MQ_SILVER_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_4)); + locationTable[RC_SHADOW_MQ_SILVER_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(3558, -1490), "RC_SHADOW_MQ_SILVER_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_BLADES_5)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(1970, 3372), "RC_SHADOW_MQ_SILVER_PIT_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_1)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_2)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2110, 3372), "RC_SHADOW_MQ_SILVER_PIT_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_3)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2131, 3030), "RC_SHADOW_MQ_SILVER_PIT_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_4)); + locationTable[RC_SHADOW_MQ_SILVER_PIT_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_PIT_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2250, 3372), "RC_SHADOW_MQ_SILVER_PIT_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT_5)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5089, 2049), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_1)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5158, 2315), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_2)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5217, 1852), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_3)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5270, 2453), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_4)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5404, 1977), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_5)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5466, 2243), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_6)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5489, 2476), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_7)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5601, 1898), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_8)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5637, 2134), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_9)); + locationTable[RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(5667, 2686), "RC_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES_10)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_1] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2042, 849), "RC_SHADOW_MQ_SILVER_SPIKES_1", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_1)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_2] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2135, 1297), "RC_SHADOW_MQ_SILVER_SPIKES_2", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_2)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_3] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2254, 988), "RC_SHADOW_MQ_SILVER_SPIKES_3", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_3)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_4] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 893), "RC_SHADOW_MQ_SILVER_SPIKES_4", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_4)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_5] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1208), "RC_SHADOW_MQ_SILVER_SPIKES_5", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_5)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_6] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1200), "RC_SHADOW_MQ_SILVER_SPIKES_6", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_6)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_7] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_7, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2478, 1404), "RC_SHADOW_MQ_SILVER_SPIKES_7", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_7)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_8] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_8, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2705, 1089), "RC_SHADOW_MQ_SILVER_SPIKES_8", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_8)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_9] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_9, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2730, 876), "RC_SHADOW_MQ_SILVER_SPIKES_9", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_9)); + locationTable[RC_SHADOW_MQ_SILVER_SPIKES_10] = Location::Collectable(RC_SHADOW_MQ_SILVER_SPIKES_10, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SHADOW_TEMPLE, TWO_ACTOR_PARAMS(2940, 1069), "RC_SHADOW_MQ_SILVER_SPIKES_10", RHT_SHADOW_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SHADOW_MQ_SILVER_SPIKES_10)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(1016, -73), "RC_SPIRIT_MQ_SILVER_LOBBY_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_1)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(160, 268), "RC_SPIRIT_MQ_SILVER_LOBBY_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_2)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(-160, 270), "RC_SPIRIT_MQ_SILVER_LOBBY_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_3)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(967, -547), "RC_SPIRIT_MQ_SILVER_LOBBY_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_4)); + locationTable[RC_SPIRIT_MQ_SILVER_LOBBY_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_LOBBY_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(744, 4), "RC_SPIRIT_MQ_SILVER_LOBBY_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY_5)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_1] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(723, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_1", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_1)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_2] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(582, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_2", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_2)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_3] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(754, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_3", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_3)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_4] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(644, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_4", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_4)); + locationTable[RC_SPIRIT_MQ_SILVER_BIG_WALL_5] = Location::Collectable(RC_SPIRIT_MQ_SILVER_BIG_WALL_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_SPIRIT_TEMPLE, TWO_ACTOR_PARAMS(681, -75), "RC_SPIRIT_MQ_SILVER_BIG_WALL_5", RHT_SPIRIT_TEMPLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL_5)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_1] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1245, -2112), "RC_GTG_MQ_SILVER_SLOPE_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_1)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_2] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1542, -1467), "RC_GTG_MQ_SILVER_SLOPE_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_2)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_3] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1480, -1000), "RC_GTG_MQ_SILVER_SLOPE_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_3)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_4] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1886, -956), "RC_GTG_MQ_SILVER_SLOPE_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_4)); + locationTable[RC_GTG_MQ_SILVER_SLOPE_5] = Location::Collectable(RC_GTG_MQ_SILVER_SLOPE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(-1261, -923), "RC_GTG_MQ_SILVER_SLOPE_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_SLOPE_5)); + locationTable[RC_GTG_MQ_SILVER_LAVA_1] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1861), "RC_GTG_MQ_SILVER_LAVA_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_1)); + locationTable[RC_GTG_MQ_SILVER_LAVA_2] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1134, -1841), "RC_GTG_MQ_SILVER_LAVA_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_2)); + locationTable[RC_GTG_MQ_SILVER_LAVA_3] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1404, -1653), "RC_GTG_MQ_SILVER_LAVA_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_3)); + locationTable[RC_GTG_MQ_SILVER_LAVA_4] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1560, -1380), "RC_GTG_MQ_SILVER_LAVA_4", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_4)); + locationTable[RC_GTG_MQ_SILVER_LAVA_5] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1083, -1374), "RC_GTG_MQ_SILVER_LAVA_5", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_5)); + locationTable[RC_GTG_MQ_SILVER_LAVA_6] = Location::Collectable(RC_GTG_MQ_SILVER_LAVA_6, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(1317, -1243), "RC_GTG_MQ_SILVER_LAVA_6", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_LAVA_6)); + locationTable[RC_GTG_MQ_SILVER_WATER_1] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2453, -1612), "RC_GTG_MQ_SILVER_WATER_1", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_1)); + locationTable[RC_GTG_MQ_SILVER_WATER_2] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2302, -1464), "RC_GTG_MQ_SILVER_WATER_2", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_2)); + locationTable[RC_GTG_MQ_SILVER_WATER_3] = Location::Collectable(RC_GTG_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_GERUDO_TRAINING_GROUND, TWO_ACTOR_PARAMS(2160, -1315), "RC_GTG_MQ_SILVER_WATER_3", RHT_GTG_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GTG_MQ_SILVER_WATER_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-970, -3747), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1891, -2753), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-2044, -3354), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-686, -2945), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_FIRE_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_FIRE_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(-1655, -2133), "RC_GANONS_CASTLE_MQ_SILVER_FIRE_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE_5)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2757, -765), "RC_GANONS_CASTLE_MQ_SILVER_WATER_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2912, -971), "RC_GANONS_CASTLE_MQ_SILVER_WATER_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1478), "RC_GANONS_CASTLE_MQ_SILVER_WATER_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(3253, -649), "RC_GANONS_CASTLE_MQ_SILVER_WATER_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_WATER_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_WATER_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(2905, -1263), "RC_GANONS_CASTLE_MQ_SILVER_WATER_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER_5)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1322, -2262), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_1", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_1)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1279, -3111), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_2", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_2)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1529, -4117), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_3", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1829, -4071), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_4", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4)); + locationTable[RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5] = Location::Collectable(RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5, RCQUEST_MQ, RCTYPE_SILVER, ACTOR_EN_G_SWITCH, SCENE_INSIDE_GANONS_CASTLE, TWO_ACTOR_PARAMS(1100, -2554), "RC_GANONS_CASTLE_MQ_SILVER_SHADOW_5", RHT_GANONS_CASTLE_SILVER, RG_BLUE_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5)); // clang-format on } diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 87ad5fee7..48c36f706 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -3887,7 +3887,7 @@ SilverIdentity Randomizer::IdentifySilver(s32 sceneNum, s32 posX, s32 posZ) { s32 actorParams = TWO_ACTOR_PARAMS(posX, posZ); - Rando::Location* location = GetCheckObjectFromActor(ACTOR_OBJ_TSUBO, sceneNum, actorParams); + Rando::Location* location = GetCheckObjectFromActor(ACTOR_EN_G_SWITCH, sceneNum, actorParams); if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { silverIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; @@ -5561,7 +5561,7 @@ CustomMessage Randomizer::GetGoronMessage(u16 index) { void Randomizer::CreateCustomMessages() { // RANDTODO: Translate into french and german and replace GIMESSAGE_UNTRANSLATED // with GIMESSAGE(getItemID, itemID, english, german, french). - const std::array getItemMessages = { { + const std::array getItemMessages = { { GIMESSAGE(RG_GREG_RUPEE, ITEM_MASK_GORON, "You found %gGreg%w!", "%gGreg%w! Du hast ihn&wirklich gefunden!", "Félicitation! Vous avez trouvé %gGreg%w!"), GIMESSAGE(RG_MASTER_SWORD, ITEM_SWORD_MASTER, "You found the %gMaster Sword%w!", @@ -5925,6 +5925,35 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_DEKU_NUT_BAG, ITEM_NUT, "You found the %rDeku Nut Bag%w!&You can now hold Deku Nuts!", "Du hast eine %rDeku-Nuß-Tasche%w&gefunden! Nun kannst Du &%yDeku-Nüsse%w verwenden!", "Vous avez trouvé le %rSac de Noix& Mojo%w!&Vous pouvez maintenant porter des&Noix Mojo!"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes"), + GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_CHILD, ITEM_KEY_SMALL, "You found Spirit Silver: Child"), + GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_SUN, ITEM_KEY_SMALL, "You found Spirit Silver: Sun"), + GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_BOULDERS, ITEM_KEY_SMALL, "You found Spirit Silver: Boulders"), + GIMESSAGE_UNTRANSLATED(RG_BOTW_SILVER, ITEM_KEY_SMALL, "You found Bottom of the Well Silver"), + GIMESSAGE_UNTRANSLATED(RG_ICE_CAVERN_SILVER_BLADES, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Blades"), + GIMESSAGE_UNTRANSLATED(RG_ICE_CAVERN_SILVER_BLOCK, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Block"), + GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope"), + GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), + GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_LIGHT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Light"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FOREST, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Forest"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_SPIRIT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Spirit"), + GIMESSAGE_UNTRANSLATED(RG_DODONGOS_CAVERN_MQ_SILVER, ITEM_KEY_SMALL, "You found Dodongo's Cavern Silver"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Invisible Blades"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes"), + GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_LOBBY, ITEM_KEY_SMALL, "You found Spirit Silver: Lobby"), + GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_BIG_WALL, ITEM_KEY_SMALL, "You found Spirit Silver: Big Wall"), + GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope"), + GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), + GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Water"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Shadow"), } }; CreateGetItemMessages(getItemMessages); CreateRupeeMessages(); @@ -6020,6 +6049,35 @@ std::map randomizerGetToRandInf = { { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, + { RG_SHADOW_SILVER_BLADES, RAND_INF_SHADOW_SILVER_BLADES }, + { RG_SHADOW_SILVER_PIT, RAND_INF_SHADOW_SILVER_PIT }, + { RG_SHADOW_SILVER_SPIKES, RAND_INF_SHADOW_SILVER_SPIKES }, + { RG_SPIRIT_SILVER_CHILD, RAND_INF_SPIRIT_SILVER_CHILD }, + { RG_SPIRIT_SILVER_SUN, RAND_INF_SPIRIT_SILVER_SUN }, + { RG_SPIRIT_SILVER_BOULDERS, RAND_INF_SPIRIT_SILVER_BOULDERS }, + { RG_BOTW_SILVER, RAND_INF_BOTW_SILVER }, + { RG_ICE_CAVERN_SILVER_BLADES, RAND_INF_ICE_CAVERN_SILVER_BLADES }, + { RG_ICE_CAVERN_SILVER_BLOCK, RAND_INF_ICE_CAVERN_SILVER_BLOCK }, + { RG_GTG_SILVER_SLOPE, RAND_INF_GTG_SILVER_SLOPE }, + { RG_GTG_SILVER_LAVA, RAND_INF_GTG_SILVER_LAVA }, + { RG_GTG_SILVER_WATER, RAND_INF_GTG_SILVER_WATER }, + { RG_GANONS_CASTLE_SILVER_LIGHT, RAND_INF_GANONS_CASTLE_SILVER_LIGHT }, + { RG_GANONS_CASTLE_SILVER_FOREST, RAND_INF_GANONS_CASTLE_SILVER_FOREST }, + { RG_GANONS_CASTLE_SILVER_FIRE, RAND_INF_GANONS_CASTLE_SILVER_FIRE }, + { RG_GANONS_CASTLE_SILVER_SPIRIT, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT }, + { RG_DODONGOS_CAVERN_MQ_SILVER, RAND_INF_DODONGOS_CAVERN_MQ_SILVER }, + { RG_SHADOW_MQ_SILVER_BLADES, RAND_INF_SHADOW_MQ_SILVER_BLADES }, + { RG_SHADOW_MQ_SILVER_PIT, RAND_INF_SHADOW_MQ_SILVER_PIT }, + { RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES }, + { RG_SHADOW_MQ_SILVER_SPIKES, RAND_INF_SHADOW_MQ_SILVER_SPIKES }, + { RG_SPIRIT_MQ_SILVER_LOBBY, RAND_INF_SPIRIT_MQ_SILVER_LOBBY }, + { RG_SPIRIT_MQ_SILVER_BIG_WALL, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL }, + { RG_GTG_MQ_SILVER_SLOPE, RAND_INF_GTG_MQ_SILVER_SLOPE }, + { RG_GTG_MQ_SILVER_LAVA, RAND_INF_GTG_MQ_SILVER_LAVA }, + { RG_GTG_MQ_SILVER_WATER, RAND_INF_GTG_MQ_SILVER_WATER }, + { RG_GANONS_CASTLE_MQ_SILVER_FIRE, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE }, + { RG_GANONS_CASTLE_MQ_SILVER_WATER, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER }, + { RG_GANONS_CASTLE_MQ_SILVER_SHADOW, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW }, }; extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { From fb7e9ea516aec1afc2980e21cd9c6f5f2c7a260c Mon Sep 17 00:00:00 2001 From: Demur Rumed Date: Wed, 9 Jul 2025 02:28:58 +0000 Subject: [PATCH 4/5] implement requiring multiple rupees & starting with silver rupees --- soh/include/z64save.h | 29 ++++ .../hint_list/hint_list_exclude_dungeon.cpp | 9 ++ .../3drando/hint_list/hint_list_item.cpp | 2 + .../randomizer/3drando/item_pool.cpp | 62 ++++---- .../randomizer/3drando/starting_inventory.cpp | 6 + .../Enhancements/randomizer/ShuffleSilver.cpp | 76 ++++----- soh/soh/Enhancements/randomizer/draw.cpp | 16 +- soh/soh/Enhancements/randomizer/item_list.cpp | 58 +++---- soh/soh/Enhancements/randomizer/logic.cpp | 40 +++-- .../randomizer/option_descriptions.cpp | 4 +- .../Enhancements/randomizer/randomizer.cpp | 149 ++++++++++++++---- soh/soh/Enhancements/randomizer/randomizer.h | 1 + .../Enhancements/randomizer/randomizerTypes.h | 9 ++ .../Enhancements/randomizer/randomizer_inf.h | 30 ---- soh/soh/Enhancements/randomizer/savefile.cpp | 6 + soh/soh/Enhancements/randomizer/settings.cpp | 3 +- soh/soh/SaveManager.cpp | 74 +++++++++ 17 files changed, 391 insertions(+), 183 deletions(-) diff --git a/soh/include/z64save.h b/soh/include/z64save.h index 63a9b1d10..163cd8d60 100644 --- a/soh/include/z64save.h +++ b/soh/include/z64save.h @@ -160,6 +160,35 @@ typedef struct { typedef struct ShipRandomizerSaveContextData { u8 triforcePiecesCollected; + s8 silverShadowBlades; + s8 silverShadowPit; + s8 silverShadowSpikes; + s8 silverSpiritChild; + s8 silverSpiritSun; + s8 silverSpiritBoulders; + s8 silverBotw; + s8 silverIceCavernBlades; + s8 silverIceCavernBlock; + s8 silverGtgSlope; + s8 silverGtgLava; + s8 silverGtgWater; + s8 silverGanonLight; + s8 silverGanonForest; + s8 silverGanonFire; + s8 silverGanonSpirit; + s8 silverMqDodongosCavern; + s8 silverMqShadowBlades; + s8 silverMqShadowPit; + s8 silverMqShadowInvisibleBlades; + s8 silverMqShadowSpikes; + s8 silverMqSpiritLobby; + s8 silverMqSpiritBigWall; + s8 silverMqGtgSlope; + s8 silverMqGtgLava; + s8 silverMqGtgWater; + s8 silverMqGanonFire; + s8 silverMqGanonWater; + s8 silverMqGanonShadow; } ShipRandomizerSaveContextData; typedef struct ShipBossRushSaveContextData { diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index aa375716f..11014378b 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -6,6 +6,15 @@ namespace Rando { void StaticData::HintTable_Init_Exclude_Dungeon() { // clang-format off + // TODO move these to region specific sections when hint text stable + hintTextTable[RHT_DODONGOS_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Dodongo's Cavern# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Shadow Temple# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Spirit Temple# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTW_SILVER] = HintText(CustomMessage("They say that silver in #Bottom of the Well# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_ICE_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Ice Cavern# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_GTG_SILVER] = HintText(CustomMessage("They say that silver in #Gerudo Training Ground# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_GANONS_CASTLE_SILVER] = HintText(CustomMessage("They say that silver in #Ganon's Castle# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + /*-------------------------- | DEKU TREE | ---------------------------*/ diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index f5195c91d..b6666a0d8 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -2091,6 +2091,8 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("sack of mice", /*german*/"ein Sack Mäuse", /*french*/"un Sac rempli de souris")}); + hintTextTable[RHT_SILVER] = HintText(CustomMessage("a Silver Rupee", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE)); + hintTextTable[RHT_SKELETON_KEY] = HintText(CustomMessage("a Skeleton Key", /*german*/ "der Skelettschlüssel", /*french*/ "une Clé Squelette"), // /*spanish*/una Llave Maestra { diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index 66a04597f..93bc166dc 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -1201,60 +1201,62 @@ void GenerateItemPool() { AddItemToMainPool(RG_SHADOW_TEMPLE_BOSS_KEY); } - if (ctx->GetOption(RSK_SHUFFLE_SILVER)) { + if (ctx->GetOption(RSK_SHUFFLE_SILVER).Is(RO_SHUFFLE_SILVER_ON) || + ctx->GetOption(RSK_SHUFFLE_SILVER).Is(RO_SHUFFLE_SILVER_WALLET)) { + bool isWallet = ctx->GetOption(RSK_SHUFFLE_SILVER).Is(RO_SHUFFLE_SILVER_WALLET); auto dungeons = ctx->GetDungeons(); if (dungeons->GetDungeonFromScene(SCENE_DODONGOS_CAVERN)->IsMQ()) { - AddItemToMainPool(RG_DODONGOS_CAVERN_MQ_SILVER); + AddItemToMainPool(RG_DODONGOS_CAVERN_MQ_SILVER, isWallet ? 1 : 5); } if (dungeons->GetDungeonFromScene(SCENE_SHADOW_TEMPLE)->IsVanilla()) { - AddItemToMainPool(RG_SHADOW_SILVER_BLADES); - AddItemToMainPool(RG_SHADOW_SILVER_PIT); - AddItemToMainPool(RG_SHADOW_SILVER_SPIKES); + AddItemToMainPool(RG_SHADOW_SILVER_BLADES, isWallet ? 1 : 5); + AddItemToMainPool(RG_SHADOW_SILVER_PIT, isWallet ? 1 : 5); + AddItemToMainPool(RG_SHADOW_SILVER_SPIKES, isWallet ? 1 : 5); } else { - AddItemToMainPool(RG_SHADOW_MQ_SILVER_BLADES); - AddItemToMainPool(RG_SHADOW_MQ_SILVER_PIT); - AddItemToMainPool(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES); - AddItemToMainPool(RG_SHADOW_MQ_SILVER_SPIKES); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_BLADES, isWallet ? 1 : 5); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_PIT, isWallet ? 1 : 5); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, isWallet ? 1 : 10); + AddItemToMainPool(RG_SHADOW_MQ_SILVER_SPIKES, isWallet ? 1 : 10); } if (dungeons->GetDungeonFromScene(SCENE_SPIRIT_TEMPLE)->IsVanilla()) { - AddItemToMainPool(RG_SPIRIT_SILVER_CHILD); - AddItemToMainPool(RG_SPIRIT_SILVER_SUN); - AddItemToMainPool(RG_SPIRIT_SILVER_BOULDERS); + AddItemToMainPool(RG_SPIRIT_SILVER_CHILD, isWallet ? 1 : 5); + AddItemToMainPool(RG_SPIRIT_SILVER_SUN, isWallet ? 1 : 5); + AddItemToMainPool(RG_SPIRIT_SILVER_BOULDERS, isWallet ? 1 : 5); } else { - AddItemToMainPool(RG_SPIRIT_MQ_SILVER_LOBBY); - AddItemToMainPool(RG_SPIRIT_MQ_SILVER_BIG_WALL); + AddItemToMainPool(RG_SPIRIT_MQ_SILVER_LOBBY, isWallet ? 1 : 5); + AddItemToMainPool(RG_SPIRIT_MQ_SILVER_BIG_WALL, isWallet ? 1 : 5); } if (dungeons->GetDungeonFromScene(SCENE_BOTTOM_OF_THE_WELL)->IsVanilla()) { - AddItemToMainPool(RG_BOTW_SILVER); + AddItemToMainPool(RG_BOTW_SILVER, isWallet ? 1 : 5); } if (dungeons->GetDungeonFromScene(SCENE_ICE_CAVERN)->IsVanilla()) { - AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLADES); - AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLOCK); + AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLADES, isWallet ? 1 : 5); + AddItemToMainPool(RG_ICE_CAVERN_SILVER_BLOCK, isWallet ? 1 : 5); } if (dungeons->GetDungeonFromScene(SCENE_GERUDO_TRAINING_GROUND)->IsVanilla()) { - AddItemToMainPool(RG_GTG_SILVER_SLOPE); - AddItemToMainPool(RG_GTG_SILVER_LAVA); - AddItemToMainPool(RG_GTG_SILVER_WATER); + AddItemToMainPool(RG_GTG_SILVER_SLOPE, isWallet ? 1 : 5); + AddItemToMainPool(RG_GTG_SILVER_LAVA, isWallet ? 1 : 5); + AddItemToMainPool(RG_GTG_SILVER_WATER, isWallet ? 1 : 5); } else { - AddItemToMainPool(RG_GTG_MQ_SILVER_SLOPE); - AddItemToMainPool(RG_GTG_MQ_SILVER_LAVA); - AddItemToMainPool(RG_GTG_MQ_SILVER_WATER); + AddItemToMainPool(RG_GTG_MQ_SILVER_SLOPE, isWallet ? 1 : 5); + AddItemToMainPool(RG_GTG_MQ_SILVER_LAVA, isWallet ? 1 : 6); + AddItemToMainPool(RG_GTG_MQ_SILVER_WATER, isWallet ? 1 : 3); } if (dungeons->GetDungeonFromScene(SCENE_INSIDE_GANONS_CASTLE)->IsVanilla()) { - AddItemToMainPool(RG_GANONS_CASTLE_SILVER_LIGHT); - AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FOREST); - AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FIRE); - AddItemToMainPool(RG_GANONS_CASTLE_SILVER_SPIRIT); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_LIGHT, isWallet ? 1 : 5); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FOREST, isWallet ? 1 : 5); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_FIRE, isWallet ? 1 : 5); + AddItemToMainPool(RG_GANONS_CASTLE_SILVER_SPIRIT, isWallet ? 1 : 5); } else { - AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_FIRE); - AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_WATER); - AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_SHADOW); + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_FIRE, isWallet ? 1 : 5); + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_WATER, isWallet ? 1 : 5); + AddItemToMainPool(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, isWallet ? 1 : 5); } } diff --git a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp index dda37b18a..0d15f73e6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/starting_inventory.cpp @@ -54,6 +54,12 @@ void GenerateStartingInventory() { AddItemToInventory(RG_SHADOW_TEMPLE_BOSS_KEY); } + if (ctx->GetOption(RSK_SHUFFLE_SILVER).Is(RO_SHUFFLE_SILVER_STARTWITH)) { + for (int rg = (int)RG_SHADOW_SILVER_BLADES; rg <= (int)RG_GANONS_CASTLE_MQ_SILVER_SHADOW; rg++) { + AddItemToInventory((RandomizerGet)rg); + } + } + // Add Ganon's Boss key with Triforce Hunt so the game thinks it's obtainable from the start. // During save init, the boss key isn't actually given and it's instead given when completing the triforce. if (ctx->GetOption(RSK_GANONS_BOSS_KEY).Is(RO_GANON_BOSS_KEY_STARTWITH) || ctx->GetOption(RSK_TRIFORCE_HUNT)) { diff --git a/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp index ea06df914..68d0bb321 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSilver.cpp @@ -12,72 +12,75 @@ extern SaveContext gSaveContext; } static bool IsSilverCleared(s16 switchFlag) { - bool isMQ = - Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(gPlayState->sceneNum)->IsMQ(); + bool isMQ = Rando::Context::GetInstance()->GetDungeons()->GetDungeonFromScene(gPlayState->sceneNum)->IsMQ(); switch (gPlayState->sceneNum) { case SCENE_DODONGOS_CAVERN: - return Flags_GetRandomizerInf(RAND_INF_DODONGOS_CAVERN_MQ_SILVER); + return gSaveContext.ship.quest.data.randomizer.silverMqDodongosCavern >= 5; case SCENE_SHADOW_TEMPLE: switch (switchFlag) { case 1: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_SHADOW_MQ_SILVER_BLADES - : RAND_INF_SHADOW_SILVER_BLADES); + + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqShadowBlades >= 5 + : gSaveContext.ship.quest.data.randomizer.silverShadowBlades >= 5; case 3: - return Flags_GetRandomizerInf(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES); + return gSaveContext.ship.quest.data.randomizer.silverMqShadowInvisibleBlades >= 10; case 8: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_SHADOW_MQ_SILVER_SPIKES - : RAND_INF_SHADOW_SILVER_SPIKES); + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqShadowSpikes >= 10 + : gSaveContext.ship.quest.data.randomizer.silverShadowSpikes >= 5; case 9: - return Flags_GetRandomizerInf(RAND_INF_SHADOW_SILVER_PIT); + return gSaveContext.ship.quest.data.randomizer.silverShadowPit >= 5; case 17: - return Flags_GetRandomizerInf(RAND_INF_SHADOW_MQ_SILVER_PIT); + return gSaveContext.ship.quest.data.randomizer.silverMqShadowPit >= 5; } case SCENE_SPIRIT_TEMPLE: switch (switchFlag) { case 0: - return Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL); + return gSaveContext.ship.quest.data.randomizer.silverMqSpiritBigWall; case 2: - return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_BOULDERS); + return gSaveContext.ship.quest.data.randomizer.silverSpiritBoulders; case 5: - return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_CHILD); + return gSaveContext.ship.quest.data.randomizer.silverSpiritChild; case 10: - return Flags_GetRandomizerInf(RAND_INF_SPIRIT_SILVER_SUN); + return gSaveContext.ship.quest.data.randomizer.silverSpiritSun; case 55: - return Flags_GetRandomizerInf(RAND_INF_SPIRIT_MQ_SILVER_LOBBY); + return gSaveContext.ship.quest.data.randomizer.silverMqSpiritLobby; } case SCENE_BOTTOM_OF_THE_WELL: - return Flags_GetRandomizerInf(RAND_INF_BOTW_SILVER); + return gSaveContext.ship.quest.data.randomizer.silverBotw >= 5; case SCENE_ICE_CAVERN: switch (switchFlag) { case 8: - return Flags_GetRandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLOCK); + return gSaveContext.ship.quest.data.randomizer.silverIceCavernBlock >= 5; case 31: - return Flags_GetRandomizerInf(RAND_INF_ICE_CAVERN_SILVER_BLADES); + return gSaveContext.ship.quest.data.randomizer.silverIceCavernBlades >= 5; } case SCENE_GERUDO_TRAINING_GROUND: switch (switchFlag) { case 12: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_LAVA : RAND_INF_GTG_SILVER_LAVA); + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqGtgLava >= 6 + : gSaveContext.ship.quest.data.randomizer.silverGtgLava >= 5; case 27: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_WATER : RAND_INF_GTG_SILVER_WATER); + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqGtgWater >= 3 + : gSaveContext.ship.quest.data.randomizer.silverGtgWater >= 5; case 28: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_GTG_MQ_SILVER_SLOPE : RAND_INF_GTG_SILVER_SLOPE); + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqGtgSlope >= 5 + : gSaveContext.ship.quest.data.randomizer.silverGtgSlope >= 5; } case SCENE_INSIDE_GANONS_CASTLE: switch (switchFlag) { case 1: - return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE); + return gSaveContext.ship.quest.data.randomizer.silverMqGanonFire >= 5; case 2: - return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER); + return gSaveContext.ship.quest.data.randomizer.silverMqGanonWater >= 5; case 9: - return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FIRE); + return gSaveContext.ship.quest.data.randomizer.silverGanonFire >= 5; case 11: - return Flags_GetRandomizerInf(isMQ ? RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW - : RAND_INF_GANONS_CASTLE_SILVER_SPIRIT); + return isMQ ? gSaveContext.ship.quest.data.randomizer.silverMqGanonShadow >= 5 + : gSaveContext.ship.quest.data.randomizer.silverGanonSpirit >= 5; case 14: - return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_FOREST); + return gSaveContext.ship.quest.data.randomizer.silverGanonForest >= 5; case 18: - return Flags_GetRandomizerInf(RAND_INF_GANONS_CASTLE_SILVER_LIGHT); + return gSaveContext.ship.quest.data.randomizer.silverGanonLight >= 5; } } return false; @@ -89,24 +92,25 @@ void RegisterShuffleSilver() { COND_VB_SHOULD(VB_SILVER_DESPAWN, shouldRegister, { EnGSwitch* silver = va_arg(args, EnGSwitch*); if (silver->type == ENGSWITCH_SILVER_RUPEE) { - auto silverIdentity = OTRGlobals::Instance->gRandomizer->IdentifySilver(gPlayState->sceneNum, - (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); + auto silverIdentity = OTRGlobals::Instance->gRandomizer->IdentifySilver( + gPlayState->sceneNum, (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); *should = true; - LUSLOG_WARN("!!%d %d %d %d", silver->type, silverIdentity.randomizerCheck, - (s16)silver->actor.world.pos.x, (s16)silver->actor.world.pos.z); + LUSLOG_WARN("!!%d %d %d %d", silver->type, silverIdentity.randomizerCheck, (s16)silver->actor.world.pos.x, + (s16)silver->actor.world.pos.z); if (silverIdentity.randomizerCheck == RC_UNKNOWN_CHECK || Flags_GetRandomizerInf(silverIdentity.randomizerInf)) { return; } - auto spawnedActor = (EnItem00*)Actor_Spawn(&gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, - silver->actor.world.pos.x, silver->actor.world.pos.y, silver->actor.world.pos.z, - 0, 0, 0, ITEM00_SOH_GIVE_ITEM_ENTRY, false); + auto spawnedActor = (EnItem00*)Actor_Spawn( + &gPlayState->actorCtx, gPlayState, ACTOR_EN_ITEM00, silver->actor.world.pos.x, + silver->actor.world.pos.y, silver->actor.world.pos.z, 0, 0, 0, ITEM00_SOH_GIVE_ITEM_ENTRY, false); LUSLOG_WARN("!!%p", spawnedActor); spawnedActor->randoCheck = silverIdentity.randomizerCheck; spawnedActor->randoInf = silverIdentity.randomizerInf; spawnedActor->itemEntry = Rando::Context::GetInstance()->GetFinalGIEntry( - silverIdentity.randomizerCheck, true, (GetItemID)Rando::StaticData::GetLocation(silverIdentity.randomizerCheck)->GetVanillaItem()); + silverIdentity.randomizerCheck, true, + (GetItemID)Rando::StaticData::GetLocation(silverIdentity.randomizerCheck)->GetVanillaItem()); } else if (silver->type == ENGSWITCH_SILVER_TRACKER) { if (IsSilverCleared(silver->switchFlag)) { Flags_SetSwitch(gPlayState, silver->switchFlag); diff --git a/soh/soh/Enhancements/randomizer/draw.cpp b/soh/soh/Enhancements/randomizer/draw.cpp index 749352afb..3c36b91af 100644 --- a/soh/soh/Enhancements/randomizer/draw.cpp +++ b/soh/soh/Enhancements/randomizer/draw.cpp @@ -1119,15 +1119,15 @@ extern "C" void Randomizer_DrawSilverRupee(PlayState* play, GetItemEntry* getIte gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__), G_MTX_MODELVIEW | G_MTX_LOAD); - gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); - gDPSetEnvColor(POLY_OPA_DISP++, 255 / 5, 255 / 5, 255 / 5, 255); - gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiRupeeInnerDL); + gDPSetPrimColor(POLY_OPA_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_OPA_DISP++, 255 / 5, 255 / 5, 255 / 5, 255); + gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiRupeeInnerDL); - Gfx_SetupDL_25Xlu(play->state.gfxCtx); - gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); - gDPSetEnvColor(POLY_XLU_DISP++, 255 * 0.75f, 255 * 0.75f, 255 * 0.75f, 255); - gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiRupeeOuterDL); + Gfx_SetupDL_25Xlu(play->state.gfxCtx); + gSPMatrix(POLY_XLU_DISP++, MATRIX_NEWMTX(play->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 255, 255, 255, 255); + gDPSetEnvColor(POLY_XLU_DISP++, 255 * 0.75f, 255 * 0.75f, 255 * 0.75f, 255); + gSPDisplayList(POLY_XLU_DISP++, (Gfx*)gGiRupeeOuterDL); CLOSE_DISPS(play->state.gfxCtx); } diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index 99f380d70..cc99047ee 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -242,63 +242,63 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_TREASURE_GAME_KEY_RING] = Item(RG_TREASURE_GAME_KEY_RING, Text{ "Chest Game Key Ring", "Trousseau du jeu la Chasse-aux-Trésors", "Schlüsselbund (Truhenlotterie)" }, ITEMTYPE_SMALLKEY, 0xDE, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_KEY_RING, RG_TREASURE_GAME_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_TREASURE_GAME_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); // Silver Rupees - itemTable[RG_SHADOW_SILVER_BLADES] = Item(RG_SHADOW_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_BLADES] = Item(RG_SHADOW_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_SILVER_PIT] = Item(RG_SHADOW_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_PIT] = Item(RG_SHADOW_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_SILVER_SPIKES] = Item(RG_SHADOW_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_SPIKES] = Item(RG_SHADOW_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_CHILD] = Item(RG_SPIRIT_SILVER_CHILD, Text{ "Spirit Silver: Child" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_CHILD] = Item(RG_SPIRIT_SILVER_CHILD, Text{ "Spirit Silver: Child" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_CHILD].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_SUN] = Item(RG_SPIRIT_SILVER_SUN, Text{ "Spirit Silver: Sun" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_SUN] = Item(RG_SPIRIT_SILVER_SUN, Text{ "Spirit Silver: Sun" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_SUN].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_BOULDERS] = Item(RG_SPIRIT_SILVER_BOULDERS, Text{ "Spirit Silver: Boulders" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_BOULDERS] = Item(RG_SPIRIT_SILVER_BOULDERS, Text{ "Spirit Silver: Boulders" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_BOULDERS].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_BOTW_SILVER] = Item(RG_BOTW_SILVER, Text{ "Bottom of the Well Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_BOTW_SILVER] = Item(RG_BOTW_SILVER, Text{ "Bottom of the Well Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_BOTW_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_ICE_CAVERN_SILVER_BLADES] = Item(RG_ICE_CAVERN_SILVER_BLADES, Text{ "Ice Cavern Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLADES] = Item(RG_ICE_CAVERN_SILVER_BLADES, Text{ "Ice Cavern Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_ICE_CAVERN_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_ICE_CAVERN_SILVER_BLOCK] = Item(RG_ICE_CAVERN_SILVER_BLOCK, Text{ "Ice Cavern Silver: Block" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLOCK] = Item(RG_ICE_CAVERN_SILVER_BLOCK, Text{ "Ice Cavern Silver: Block" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_ICE_CAVERN_SILVER_BLOCK].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_SLOPE] = Item(RG_GTG_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_SLOPE] = Item(RG_GTG_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_LAVA] = Item(RG_GTG_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_LAVA] = Item(RG_GTG_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_WATER] = Item(RG_GTG_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_WATER] = Item(RG_GTG_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_LIGHT] = Item(RG_GANONS_CASTLE_SILVER_LIGHT, Text{ "Ganon's Castle Silver: Light" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_LIGHT] = Item(RG_GANONS_CASTLE_SILVER_LIGHT, Text{ "Ganon's Castle Silver: Light" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_LIGHT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_FOREST] = Item(RG_GANONS_CASTLE_SILVER_FOREST, Text{ "Ganon's Castle Silver: Forest" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FOREST] = Item(RG_GANONS_CASTLE_SILVER_FOREST, Text{ "Ganon's Castle Silver: Forest" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_FOREST].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_FIRE] = Item(RG_GANONS_CASTLE_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FIRE] = Item(RG_GANONS_CASTLE_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT] = Item(RG_GANONS_CASTLE_SILVER_SPIRIT, Text{ "Ganon's Castle Silver: Spirit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT] = Item(RG_GANONS_CASTLE_SILVER_SPIRIT, Text{ "Ganon's Castle Silver: Spirit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_DODONGOS_CAVERN_MQ_SILVER] = Item(RG_DODONGOS_CAVERN_MQ_SILVER, Text{ "Dodongo's Cavern Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER] = Item(RG_DODONGOS_CAVERN_MQ_SILVER, Text{ "Dodongo's Cavern Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_DODONGOS_CAVERN_MQ_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_BLADES] = Item(RG_SHADOW_MQ_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_BLADES] = Item(RG_SHADOW_MQ_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_PIT] = Item(RG_SHADOW_MQ_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_PIT] = Item(RG_SHADOW_MQ_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES] = Item(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, Text{ "Shadow Silver: Invisible Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES] = Item(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, Text{ "Shadow Silver: Invisible Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_SPIKES] = Item(RG_SHADOW_MQ_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_SPIKES] = Item(RG_SHADOW_MQ_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_MQ_SILVER_LOBBY] = Item(RG_SPIRIT_MQ_SILVER_LOBBY, Text{ "Spirit Silver: Lobby" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_LOBBY] = Item(RG_SPIRIT_MQ_SILVER_LOBBY, Text{ "Spirit Silver: Lobby" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_MQ_SILVER_LOBBY].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL] = Item(RG_SPIRIT_MQ_SILVER_BIG_WALL, Text{ "Spirit Silver: Big Wall" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL] = Item(RG_SPIRIT_MQ_SILVER_BIG_WALL, Text{ "Spirit Silver: Big Wall" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_SLOPE] = Item(RG_GTG_MQ_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_SLOPE] = Item(RG_GTG_MQ_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_LAVA] = Item(RG_GTG_MQ_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_LAVA] = Item(RG_GTG_MQ_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_WATER] = Item(RG_GTG_MQ_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_WATER] = Item(RG_GTG_MQ_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE] = Item(RG_GANONS_CASTLE_MQ_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE] = Item(RG_GANONS_CASTLE_MQ_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER] = Item(RG_GANONS_CASTLE_MQ_SILVER_WATER, Text{ "Ganon's Castle Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER] = Item(RG_GANONS_CASTLE_MQ_SILVER_WATER, Text{ "Ganon's Castle Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW] = Item(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, Text{ "Ganon's Castle Silver: Shadow" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_NONE, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW] = Item(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, Text{ "Ganon's Castle Silver: Shadow" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW].SetCustomDrawFunc(Randomizer_DrawSilverRupee); // Dungeon Rewards itemTable[RG_KOKIRI_EMERALD] = Item(RG_KOKIRI_EMERALD, Text{ "Kokiri's Emerald", "Émeraude Kokiri", "Kokiri-Smaragd" }, ITEMTYPE_DUNGEONREWARD, 0xCB, true, LOGIC_KOKIRI_EMERALD, RHT_KOKIRI_EMERALD, ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index eea79e92d..5aab5e393 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1910,23 +1910,41 @@ void Logic::ApplyItemEffect(Item& item, bool state) { case ITEMTYPE_FORTRESS_SMALLKEY: case ITEMTYPE_SMALLKEY: { auto randoGet = item.GetRandomizerGet(); - auto keyring = randoGet >= RG_FOREST_TEMPLE_KEY_RING && randoGet <= RG_GANONS_CASTLE_KEY_RING; - auto dungeonIndex = RandoGetToDungeonScene.find(randoGet)->second; - auto count = GetSmallKeyCount(dungeonIndex); - if (!state) { - if (keyring) { - count = 0; + if (randoGet >= RG_SHADOW_SILVER_BLADES && randoGet <= RG_GANONS_CASTLE_MQ_SILVER_SHADOW) { + s8* field = Randomizer::SilverFieldFromSaveContext(randoGet); + bool isWallet = ctx->GetOption(RSK_SHUFFLE_SILVER).Is(RO_SHUFFLE_SILVER_WALLET); + if (!state) { + if (isWallet) { + *field = 0; + } else { + *field -= 1; + } } else { - count -= 1; + if (isWallet) { + *field = 10; + } else { + *field += 1; + } } } else { - if (keyring) { - count = 10; + auto keyring = randoGet >= RG_FOREST_TEMPLE_KEY_RING && randoGet <= RG_GANONS_CASTLE_KEY_RING; + auto dungeonIndex = RandoGetToDungeonScene.find(randoGet)->second; + auto count = GetSmallKeyCount(dungeonIndex); + if (!state) { + if (keyring) { + count = 0; + } else { + count -= 1; + } } else { - count += 1; + if (keyring) { + count = 10; + } else { + count += 1; + } } + SetSmallKeyCount(dungeonIndex, count); } - SetSmallKeyCount(dungeonIndex, count); } break; case ITEMTYPE_TOKEN: mSaveContext->inventory.gsTokens += (!state ? -1 : 1); diff --git a/soh/soh/Enhancements/randomizer/option_descriptions.cpp b/soh/soh/Enhancements/randomizer/option_descriptions.cpp index c6c4ef1d2..4a91559e2 100644 --- a/soh/soh/Enhancements/randomizer/option_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/option_descriptions.cpp @@ -477,8 +477,8 @@ void Settings::CreateOptionDescriptions() { "\n" "All Items - Shuffle all freestanding rupees & hearts."; mOptionDescriptions[RSK_SHUFFLE_SILVER] = "Silver rupees will be shuffled.\n" - "Items will be added to pool which completes the silver rupee puzzles,\n" - "while silver rupee locations will be random items."; + "Items will be added to pool which completes the silver rupee puzzles,\n" + "while silver rupee locations will be random items."; mOptionDescriptions[RSK_SHUFFLE_FAIRIES] = "Shuffle fairy locations."; mOptionDescriptions[RSK_SHUFFLE_GRASS] = "Grass/Bushes will drop a randomized item the first time they're cut and collected. " diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 48c36f706..c72a369a2 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -762,6 +762,71 @@ bool Randomizer::IsTrialRequired(s32 trialFlag) { return Rando::Context::GetInstance()->GetTrial(trialFlagToTrialKey[trialFlag])->IsRequired(); } +s8* Randomizer::SilverFieldFromSaveContext(RandomizerGet rg) { + switch (rg) { + case RG_SHADOW_SILVER_BLADES: + return &gSaveContext.ship.quest.data.randomizer.silverShadowBlades; + case RG_SHADOW_SILVER_PIT: + return &gSaveContext.ship.quest.data.randomizer.silverShadowPit; + case RG_SHADOW_SILVER_SPIKES: + return &gSaveContext.ship.quest.data.randomizer.silverShadowSpikes; + case RG_SPIRIT_SILVER_CHILD: + return &gSaveContext.ship.quest.data.randomizer.silverSpiritChild; + case RG_SPIRIT_SILVER_SUN: + return &gSaveContext.ship.quest.data.randomizer.silverSpiritSun; + case RG_SPIRIT_SILVER_BOULDERS: + return &gSaveContext.ship.quest.data.randomizer.silverSpiritBoulders; + case RG_BOTW_SILVER: + return &gSaveContext.ship.quest.data.randomizer.silverBotw; + case RG_ICE_CAVERN_SILVER_BLADES: + return &gSaveContext.ship.quest.data.randomizer.silverIceCavernBlades; + case RG_ICE_CAVERN_SILVER_BLOCK: + return &gSaveContext.ship.quest.data.randomizer.silverIceCavernBlock; + case RG_GTG_SILVER_SLOPE: + return &gSaveContext.ship.quest.data.randomizer.silverGtgSlope; + case RG_GTG_SILVER_LAVA: + return &gSaveContext.ship.quest.data.randomizer.silverGtgLava; + case RG_GTG_SILVER_WATER: + return &gSaveContext.ship.quest.data.randomizer.silverGtgWater; + case RG_GANONS_CASTLE_SILVER_LIGHT: + return &gSaveContext.ship.quest.data.randomizer.silverGanonLight; + case RG_GANONS_CASTLE_SILVER_FOREST: + return &gSaveContext.ship.quest.data.randomizer.silverGanonForest; + case RG_GANONS_CASTLE_SILVER_FIRE: + return &gSaveContext.ship.quest.data.randomizer.silverGanonFire; + case RG_GANONS_CASTLE_SILVER_SPIRIT: + return &gSaveContext.ship.quest.data.randomizer.silverGanonSpirit; + case RG_DODONGOS_CAVERN_MQ_SILVER: + return &gSaveContext.ship.quest.data.randomizer.silverMqDodongosCavern; + case RG_SHADOW_MQ_SILVER_BLADES: + return &gSaveContext.ship.quest.data.randomizer.silverMqShadowBlades; + case RG_SHADOW_MQ_SILVER_PIT: + return &gSaveContext.ship.quest.data.randomizer.silverMqShadowPit; + case RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES: + return &gSaveContext.ship.quest.data.randomizer.silverMqShadowInvisibleBlades; + case RG_SHADOW_MQ_SILVER_SPIKES: + return &gSaveContext.ship.quest.data.randomizer.silverMqShadowSpikes; + case RG_SPIRIT_MQ_SILVER_LOBBY: + return &gSaveContext.ship.quest.data.randomizer.silverMqSpiritLobby; + case RG_SPIRIT_MQ_SILVER_BIG_WALL: + return &gSaveContext.ship.quest.data.randomizer.silverMqSpiritBigWall; + case RG_GTG_MQ_SILVER_SLOPE: + return &gSaveContext.ship.quest.data.randomizer.silverMqGtgSlope; + case RG_GTG_MQ_SILVER_LAVA: + return &gSaveContext.ship.quest.data.randomizer.silverMqGtgLava; + case RG_GTG_MQ_SILVER_WATER: + return &gSaveContext.ship.quest.data.randomizer.silverMqGtgWater; + case RG_GANONS_CASTLE_MQ_SILVER_FIRE: + return &gSaveContext.ship.quest.data.randomizer.silverMqGanonFire; + case RG_GANONS_CASTLE_MQ_SILVER_WATER: + return &gSaveContext.ship.quest.data.randomizer.silverMqGanonWater; + case RG_GANONS_CASTLE_MQ_SILVER_SHADOW: + return &gSaveContext.ship.quest.data.randomizer.silverMqGanonShadow; + default: + return nullptr; + } +} + GetItemEntry Randomizer::GetItemFromActor(s16 actorId, s16 sceneNum, s16 actorParams, GetItemID ogItemId, bool checkObtainability) { return Rando::Context::GetInstance()->GetFinalGIEntry(GetCheckFromActor(actorId, sceneNum, actorParams), @@ -5938,22 +6003,28 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_LIGHT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Light"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FOREST, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Forest"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FOREST, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Forest"), GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_SPIRIT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Spirit"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_SPIRIT, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Spirit"), GIMESSAGE_UNTRANSLATED(RG_DODONGOS_CAVERN_MQ_SILVER, ITEM_KEY_SMALL, "You found Dodongo's Cavern Silver"), GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades"), GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Invisible Blades"), + GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, ITEM_KEY_SMALL, + "You found Shadow Silver: Invisible Blades"), GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes"), GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_LOBBY, ITEM_KEY_SMALL, "You found Spirit Silver: Lobby"), GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_BIG_WALL, ITEM_KEY_SMALL, "You found Spirit Silver: Big Wall"), GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope"), GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Water"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Shadow"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_FIRE, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Fire"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_WATER, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Water"), + GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Shadow"), } }; CreateGetItemMessages(getItemMessages); CreateRupeeMessages(); @@ -6049,35 +6120,6 @@ std::map randomizerGetToRandInf = { { RG_BONGO_BONGO_SOUL, RAND_INF_BONGO_BONGO_SOUL }, { RG_TWINROVA_SOUL, RAND_INF_TWINROVA_SOUL }, { RG_GANON_SOUL, RAND_INF_GANON_SOUL }, - { RG_SHADOW_SILVER_BLADES, RAND_INF_SHADOW_SILVER_BLADES }, - { RG_SHADOW_SILVER_PIT, RAND_INF_SHADOW_SILVER_PIT }, - { RG_SHADOW_SILVER_SPIKES, RAND_INF_SHADOW_SILVER_SPIKES }, - { RG_SPIRIT_SILVER_CHILD, RAND_INF_SPIRIT_SILVER_CHILD }, - { RG_SPIRIT_SILVER_SUN, RAND_INF_SPIRIT_SILVER_SUN }, - { RG_SPIRIT_SILVER_BOULDERS, RAND_INF_SPIRIT_SILVER_BOULDERS }, - { RG_BOTW_SILVER, RAND_INF_BOTW_SILVER }, - { RG_ICE_CAVERN_SILVER_BLADES, RAND_INF_ICE_CAVERN_SILVER_BLADES }, - { RG_ICE_CAVERN_SILVER_BLOCK, RAND_INF_ICE_CAVERN_SILVER_BLOCK }, - { RG_GTG_SILVER_SLOPE, RAND_INF_GTG_SILVER_SLOPE }, - { RG_GTG_SILVER_LAVA, RAND_INF_GTG_SILVER_LAVA }, - { RG_GTG_SILVER_WATER, RAND_INF_GTG_SILVER_WATER }, - { RG_GANONS_CASTLE_SILVER_LIGHT, RAND_INF_GANONS_CASTLE_SILVER_LIGHT }, - { RG_GANONS_CASTLE_SILVER_FOREST, RAND_INF_GANONS_CASTLE_SILVER_FOREST }, - { RG_GANONS_CASTLE_SILVER_FIRE, RAND_INF_GANONS_CASTLE_SILVER_FIRE }, - { RG_GANONS_CASTLE_SILVER_SPIRIT, RAND_INF_GANONS_CASTLE_SILVER_SPIRIT }, - { RG_DODONGOS_CAVERN_MQ_SILVER, RAND_INF_DODONGOS_CAVERN_MQ_SILVER }, - { RG_SHADOW_MQ_SILVER_BLADES, RAND_INF_SHADOW_MQ_SILVER_BLADES }, - { RG_SHADOW_MQ_SILVER_PIT, RAND_INF_SHADOW_MQ_SILVER_PIT }, - { RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES }, - { RG_SHADOW_MQ_SILVER_SPIKES, RAND_INF_SHADOW_MQ_SILVER_SPIKES }, - { RG_SPIRIT_MQ_SILVER_LOBBY, RAND_INF_SPIRIT_MQ_SILVER_LOBBY }, - { RG_SPIRIT_MQ_SILVER_BIG_WALL, RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL }, - { RG_GTG_MQ_SILVER_SLOPE, RAND_INF_GTG_MQ_SILVER_SLOPE }, - { RG_GTG_MQ_SILVER_LAVA, RAND_INF_GTG_MQ_SILVER_LAVA }, - { RG_GTG_MQ_SILVER_WATER, RAND_INF_GTG_MQ_SILVER_WATER }, - { RG_GANONS_CASTLE_MQ_SILVER_FIRE, RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE }, - { RG_GANONS_CASTLE_MQ_SILVER_WATER, RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER }, - { RG_GANONS_CASTLE_MQ_SILVER_SHADOW, RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW }, }; extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { @@ -6361,6 +6403,43 @@ extern "C" u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) { INV_CONTENT(ITEM_NUT) = ITEM_NUT; AMMO(ITEM_NUT) = static_cast(CUR_CAPACITY(UPG_NUTS)); break; + case RG_SHADOW_SILVER_BLADES: + case RG_SHADOW_SILVER_PIT: + case RG_SHADOW_SILVER_SPIKES: + case RG_SPIRIT_SILVER_CHILD: + case RG_SPIRIT_SILVER_SUN: + case RG_SPIRIT_SILVER_BOULDERS: + case RG_BOTW_SILVER: + case RG_ICE_CAVERN_SILVER_BLADES: + case RG_ICE_CAVERN_SILVER_BLOCK: + case RG_GTG_SILVER_SLOPE: + case RG_GTG_SILVER_LAVA: + case RG_GTG_SILVER_WATER: + case RG_GANONS_CASTLE_SILVER_LIGHT: + case RG_GANONS_CASTLE_SILVER_FOREST: + case RG_GANONS_CASTLE_SILVER_FIRE: + case RG_GANONS_CASTLE_SILVER_SPIRIT: + case RG_DODONGOS_CAVERN_MQ_SILVER: + case RG_SHADOW_MQ_SILVER_BLADES: + case RG_SHADOW_MQ_SILVER_PIT: + case RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES: + case RG_SHADOW_MQ_SILVER_SPIKES: + case RG_SPIRIT_MQ_SILVER_LOBBY: + case RG_SPIRIT_MQ_SILVER_BIG_WALL: + case RG_GTG_MQ_SILVER_SLOPE: + case RG_GTG_MQ_SILVER_LAVA: + case RG_GTG_MQ_SILVER_WATER: + case RG_GANONS_CASTLE_MQ_SILVER_FIRE: + case RG_GANONS_CASTLE_MQ_SILVER_WATER: + case RG_GANONS_CASTLE_MQ_SILVER_SHADOW: { + s8* field = Randomizer::SilverFieldFromSaveContext(item); + if (OTRGlobals::Instance->gRandomizer->GetRandoSettingValue(RSK_SHUFFLE_SILVER) == + RO_SHUFFLE_SILVER_WALLET) { + *field = 10; + } else { + *field += 1; + } + } default: LUSLOG_WARN("Randomizer_Item_Give didn't have behaviour specified for getItemId=%d", item); assert(false); diff --git a/soh/soh/Enhancements/randomizer/randomizer.h b/soh/soh/Enhancements/randomizer/randomizer.h index c2f7f63e4..3a5acb20c 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.h +++ b/soh/soh/Enhancements/randomizer/randomizer.h @@ -44,6 +44,7 @@ class Randomizer { void LoadMerchantMessages(); void LoadHintMessages(); bool IsTrialRequired(s32 trialFlag); + static s8* SilverFieldFromSaveContext(RandomizerGet rg); u8 GetRandoSettingValue(RandomizerSettingKey randoSettingKey); RandomizerCheck GetCheckFromRandomizerInf(RandomizerInf randomizerInf); RandomizerInf GetRandomizerInfFromCheck(RandomizerCheck rc); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index c4f98fac1..0235f650b 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5391,6 +5391,7 @@ typedef enum { RHT_BRONZE_SCALE, RHT_FISHING_POLE, RHT_SKELETON_KEY, + RHT_SILVER, RHT_EPONA, RHT_OVERWORLD_KEY, RHT_HINT_MYSTERIOUS, @@ -6495,6 +6496,14 @@ typedef enum { RO_SHUFFLE_FREESTANDING_ALL, } RandoOptionFreestanding; +// Shuffle Silver settings (off, on, wallet, start with) +typedef enum { + RO_SHUFFLE_SILVER_OFF, + RO_SHUFFLE_SILVER_ON, + RO_SHUFFLE_SILVER_WALLET, + RO_SHUFFLE_SILVER_STARTWITH, +} RandoOptionSilver; + // Shuffle Pots settings (off, dungeons, overworld, all) typedef enum { RO_SHUFFLE_POTS_OFF, diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 3863b796f..24104d708 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1468,36 +1468,6 @@ DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_3) DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_4) DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW_5) -DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_BLADES) -DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_PIT) -DEFINE_RAND_INF(RAND_INF_SHADOW_SILVER_SPIKES) -DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_CHILD) -DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_SUN) -DEFINE_RAND_INF(RAND_INF_SPIRIT_SILVER_BOULDERS) -DEFINE_RAND_INF(RAND_INF_BOTW_SILVER) -DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLADES) -DEFINE_RAND_INF(RAND_INF_ICE_CAVERN_SILVER_BLOCK) -DEFINE_RAND_INF(RAND_INF_GTG_SILVER_SLOPE) -DEFINE_RAND_INF(RAND_INF_GTG_SILVER_LAVA) -DEFINE_RAND_INF(RAND_INF_GTG_SILVER_WATER) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_LIGHT) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FOREST) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_FIRE) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_SILVER_SPIRIT) -DEFINE_RAND_INF(RAND_INF_DODONGOS_CAVERN_MQ_SILVER) -DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_BLADES) -DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_PIT) -DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_INVISIBLE_BLADES) -DEFINE_RAND_INF(RAND_INF_SHADOW_MQ_SILVER_SPIKES) -DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_LOBBY) -DEFINE_RAND_INF(RAND_INF_SPIRIT_MQ_SILVER_BIG_WALL) -DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_SLOPE) -DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_LAVA) -DEFINE_RAND_INF(RAND_INF_GTG_MQ_SILVER_WATER) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_FIRE) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_WATER) -DEFINE_RAND_INF(RAND_INF_GANONS_CASTLE_MQ_SILVER_SHADOW) - DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_1) DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_2) DEFINE_RAND_INF(RAND_INF_SFM_FAIRY_GROTTO_FAIRY_3) diff --git a/soh/soh/Enhancements/randomizer/savefile.cpp b/soh/soh/Enhancements/randomizer/savefile.cpp index 51101f6fa..633d15d16 100644 --- a/soh/soh/Enhancements/randomizer/savefile.cpp +++ b/soh/soh/Enhancements/randomizer/savefile.cpp @@ -209,6 +209,12 @@ void SetStartingItems() { } } + if (Randomizer_GetSettingValue(RSK_SHUFFLE_SILVER) == RO_SHUFFLE_SILVER_STARTWITH) { + for (int rg = (int)RG_SHADOW_SILVER_BLADES; rg <= (int)RG_GANONS_CASTLE_MQ_SILVER_SHADOW; rg++) { + *Randomizer::SilverFieldFromSaveContext((RandomizerGet)rg) = 10; + } + } + if (Randomizer_GetSettingValue(RSK_BOSS_KEYSANITY) == RO_DUNGEON_ITEM_LOC_STARTWITH) { gSaveContext.inventory.dungeonItems[SCENE_FOREST_TEMPLE] |= 1; // Forest gSaveContext.inventory.dungeonItems[SCENE_FIRE_TEMPLE] |= 1; // Fire diff --git a/soh/soh/Enhancements/randomizer/settings.cpp b/soh/soh/Enhancements/randomizer/settings.cpp index de70af537..955e902de 100644 --- a/soh/soh/Enhancements/randomizer/settings.cpp +++ b/soh/soh/Enhancements/randomizer/settings.cpp @@ -237,8 +237,7 @@ void Settings::CreateOptions() { OPT_BOOL(RSK_SHUFFLE_DEKU_STICK_BAG, "Shuffle Deku Stick Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuStickBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_STICK_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); OPT_BOOL(RSK_SHUFFLE_DEKU_NUT_BAG, "Shuffle Deku Nut Bag", CVAR_RANDOMIZER_SETTING("ShuffleDekuNutBag"), mOptionDescriptions[RSK_SHUFFLE_DEKU_NUT_BAG], IMFLAG_SEPARATOR_BOTTOM, WidgetType::Checkbox, RO_GENERIC_OFF); OPT_U8(RSK_SHUFFLE_FREESTANDING, "Shuffle Freestanding Items", {"Off", "Dungeons", "Overworld", "All Items"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleFreestanding"), mOptionDescriptions[RSK_SHUFFLE_FREESTANDING], WidgetType::Combobox, RO_SHUFFLE_FREESTANDING_OFF); - // OPT_U8(RSK_SHUFFLE_SILVER, "Shuffle Silver Rupees", {"Off", "On", "Start With"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSilver"), mOptionDescriptions[RSK_SHUFFLE_SILVER], WidgetType::Combobox, RO_SHUFFLE_SILVER_OFF); - OPT_BOOL(RSK_SHUFFLE_SILVER, "Shuffle Silver Rupees", CVAR_RANDOMIZER_SETTING("ShuffleSilver"), mOptionDescriptions[RSK_SHUFFLE_SILVER]); + OPT_U8(RSK_SHUFFLE_SILVER, "Shuffle Silver Rupees", {"Off", "On", "Wallet", "Start With"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShuffleSilver"), mOptionDescriptions[RSK_SHUFFLE_SILVER], WidgetType::Combobox, RO_SHUFFLE_SILVER_OFF); OPT_U8(RSK_FISHSANITY, "Fishsanity", {"Off", "Shuffle only Hyrule Loach", "Shuffle Fishing Pond", "Shuffle Overworld Fish", "Shuffle Both"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("Fishsanity"), mOptionDescriptions[RSK_FISHSANITY], WidgetType::Combobox, RO_FISHSANITY_OFF); OPT_U8(RSK_FISHSANITY_POND_COUNT, "Pond Fish Count", {NumOpts(0,17,1)}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("FishsanityPondCount"), mOptionDescriptions[RSK_FISHSANITY_POND_COUNT], WidgetType::Slider, 0, true, IMFLAG_NONE); OPT_BOOL(RSK_FISHSANITY_AGE_SPLIT, "Pond Age Split", CVAR_RANDOMIZER_SETTING("FishsanityAgeSplit"), mOptionDescriptions[RSK_FISHSANITY_AGE_SPLIT]); diff --git a/soh/soh/SaveManager.cpp b/soh/soh/SaveManager.cpp index 4b830f846..3a2ab203d 100644 --- a/soh/soh/SaveManager.cpp +++ b/soh/soh/SaveManager.cpp @@ -225,6 +225,43 @@ void SaveManager::LoadRandomizer() { SaveManager::Instance->LoadData("triforcePiecesCollected", gSaveContext.ship.quest.data.randomizer.triforcePiecesCollected); + SaveManager::Instance->LoadData("silverShadowBlades", gSaveContext.ship.quest.data.randomizer.silverShadowBlades); + SaveManager::Instance->LoadData("silverShadowPit", gSaveContext.ship.quest.data.randomizer.silverShadowPit); + SaveManager::Instance->LoadData("silverShadowSpikes", gSaveContext.ship.quest.data.randomizer.silverShadowSpikes); + SaveManager::Instance->LoadData("silverSpiritChild", gSaveContext.ship.quest.data.randomizer.silverSpiritChild); + SaveManager::Instance->LoadData("silverSpiritSun", gSaveContext.ship.quest.data.randomizer.silverSpiritSun); + SaveManager::Instance->LoadData("silverSpiritBoulders", + gSaveContext.ship.quest.data.randomizer.silverSpiritBoulders); + SaveManager::Instance->LoadData("silverBotw", gSaveContext.ship.quest.data.randomizer.silverBotw); + SaveManager::Instance->LoadData("silverIceCavernBlades", + gSaveContext.ship.quest.data.randomizer.silverIceCavernBlades); + SaveManager::Instance->LoadData("silverIceCavernBlock", + gSaveContext.ship.quest.data.randomizer.silverIceCavernBlock); + SaveManager::Instance->LoadData("silverGtgSlope", gSaveContext.ship.quest.data.randomizer.silverGtgSlope); + SaveManager::Instance->LoadData("silverGtgLava", gSaveContext.ship.quest.data.randomizer.silverGtgLava); + SaveManager::Instance->LoadData("silverGtgWater", gSaveContext.ship.quest.data.randomizer.silverGtgWater); + SaveManager::Instance->LoadData("silverGanonLight", gSaveContext.ship.quest.data.randomizer.silverGanonLight); + SaveManager::Instance->LoadData("silverGanonForest", gSaveContext.ship.quest.data.randomizer.silverGanonForest); + SaveManager::Instance->LoadData("silverGanonFire", gSaveContext.ship.quest.data.randomizer.silverGanonFire); + SaveManager::Instance->LoadData("silverGanonSpirit", gSaveContext.ship.quest.data.randomizer.silverGanonSpirit); + SaveManager::Instance->LoadData("silverMqDodongosCavern", + gSaveContext.ship.quest.data.randomizer.silverMqDodongosCavern); + SaveManager::Instance->LoadData("silverMqShadowBlades", + gSaveContext.ship.quest.data.randomizer.silverMqShadowBlades); + SaveManager::Instance->LoadData("silverMqShadowPit", gSaveContext.ship.quest.data.randomizer.silverMqShadowPit); + SaveManager::Instance->LoadData("silverMqShadowInvisibleBlades", + gSaveContext.ship.quest.data.randomizer.silverMqShadowInvisibleBlades); + SaveManager::Instance->LoadData("silverMqShadowSpikes", + gSaveContext.ship.quest.data.randomizer.silverMqShadowSpikes); + SaveManager::Instance->LoadData("silverMqSpiritLobby", gSaveContext.ship.quest.data.randomizer.silverMqSpiritLobby); + SaveManager::Instance->LoadData("silverMqSpiritBigWall", + gSaveContext.ship.quest.data.randomizer.silverMqSpiritBigWall); + SaveManager::Instance->LoadData("silverMqGtgSlope", gSaveContext.ship.quest.data.randomizer.silverMqGtgSlope); + SaveManager::Instance->LoadData("silverMqGtgLava", gSaveContext.ship.quest.data.randomizer.silverMqGtgLava); + SaveManager::Instance->LoadData("silverMqGtgWater", gSaveContext.ship.quest.data.randomizer.silverMqGtgWater); + SaveManager::Instance->LoadData("silverMqGanonFire", gSaveContext.ship.quest.data.randomizer.silverMqGanonFire); + SaveManager::Instance->LoadData("silverMqGanonWater", gSaveContext.ship.quest.data.randomizer.silverMqGanonWater); + SaveManager::Instance->LoadData("silverMqGanonShadow", gSaveContext.ship.quest.data.randomizer.silverMqGanonShadow); SaveManager::Instance->LoadData("pendingIceTrapCount", gSaveContext.ship.pendingIceTrapCount); @@ -377,6 +414,43 @@ void SaveManager::SaveRandomizer(SaveContext* saveContext, int sectionID, bool f SaveManager::Instance->SaveData("triforcePiecesCollected", saveContext->ship.quest.data.randomizer.triforcePiecesCollected); + SaveManager::Instance->SaveData("silverShadowBlades", gSaveContext.ship.quest.data.randomizer.silverShadowBlades); + SaveManager::Instance->SaveData("silverShadowPit", gSaveContext.ship.quest.data.randomizer.silverShadowPit); + SaveManager::Instance->SaveData("silverShadowSpikes", gSaveContext.ship.quest.data.randomizer.silverShadowSpikes); + SaveManager::Instance->SaveData("silverSpiritChild", gSaveContext.ship.quest.data.randomizer.silverSpiritChild); + SaveManager::Instance->SaveData("silverSpiritSun", gSaveContext.ship.quest.data.randomizer.silverSpiritSun); + SaveManager::Instance->SaveData("silverSpiritBoulders", + gSaveContext.ship.quest.data.randomizer.silverSpiritBoulders); + SaveManager::Instance->SaveData("silverBotw", gSaveContext.ship.quest.data.randomizer.silverBotw); + SaveManager::Instance->SaveData("silverIceCavernBlades", + gSaveContext.ship.quest.data.randomizer.silverIceCavernBlades); + SaveManager::Instance->SaveData("silverIceCavernBlock", + gSaveContext.ship.quest.data.randomizer.silverIceCavernBlock); + SaveManager::Instance->SaveData("silverGtgSlope", gSaveContext.ship.quest.data.randomizer.silverGtgSlope); + SaveManager::Instance->SaveData("silverGtgLava", gSaveContext.ship.quest.data.randomizer.silverGtgLava); + SaveManager::Instance->SaveData("silverGtgWater", gSaveContext.ship.quest.data.randomizer.silverGtgWater); + SaveManager::Instance->SaveData("silverGanonLight", gSaveContext.ship.quest.data.randomizer.silverGanonLight); + SaveManager::Instance->SaveData("silverGanonForest", gSaveContext.ship.quest.data.randomizer.silverGanonForest); + SaveManager::Instance->SaveData("silverGanonFire", gSaveContext.ship.quest.data.randomizer.silverGanonFire); + SaveManager::Instance->SaveData("silverGanonSpirit", gSaveContext.ship.quest.data.randomizer.silverGanonSpirit); + SaveManager::Instance->SaveData("silverMqDodongosCavern", + gSaveContext.ship.quest.data.randomizer.silverMqDodongosCavern); + SaveManager::Instance->SaveData("silverMqShadowBlades", + gSaveContext.ship.quest.data.randomizer.silverMqShadowBlades); + SaveManager::Instance->SaveData("silverMqShadowPit", gSaveContext.ship.quest.data.randomizer.silverMqShadowPit); + SaveManager::Instance->SaveData("silverMqShadowInvisibleBlades", + gSaveContext.ship.quest.data.randomizer.silverMqShadowInvisibleBlades); + SaveManager::Instance->SaveData("silverMqShadowSpikes", + gSaveContext.ship.quest.data.randomizer.silverMqShadowSpikes); + SaveManager::Instance->SaveData("silverMqSpiritLobby", gSaveContext.ship.quest.data.randomizer.silverMqSpiritLobby); + SaveManager::Instance->SaveData("silverMqSpiritBigWall", + gSaveContext.ship.quest.data.randomizer.silverMqSpiritBigWall); + SaveManager::Instance->SaveData("silverMqGtgSlope", gSaveContext.ship.quest.data.randomizer.silverMqGtgSlope); + SaveManager::Instance->SaveData("silverMqGtgLava", gSaveContext.ship.quest.data.randomizer.silverMqGtgLava); + SaveManager::Instance->SaveData("silverMqGtgWater", gSaveContext.ship.quest.data.randomizer.silverMqGtgWater); + SaveManager::Instance->SaveData("silverMqGanonFire", gSaveContext.ship.quest.data.randomizer.silverMqGanonFire); + SaveManager::Instance->SaveData("silverMqGanonWater", gSaveContext.ship.quest.data.randomizer.silverMqGanonWater); + SaveManager::Instance->SaveData("silverMqGanonShadow", gSaveContext.ship.quest.data.randomizer.silverMqGanonShadow); SaveManager::Instance->SaveData("pendingIceTrapCount", saveContext->ship.pendingIceTrapCount); From 6fef55bb30ac712a7c7efbcef2f77b313ebb0bb5 Mon Sep 17 00:00:00 2001 From: PurpleHato Date: Mon, 4 Aug 2025 01:32:32 +0200 Subject: [PATCH 5/5] French Translation --- .../hint_list/hint_list_exclude_dungeon.cpp | 14 +-- .../3drando/hint_list/hint_list_item.cpp | 2 +- soh/soh/Enhancements/randomizer/item_list.cpp | 58 +++++------ .../Enhancements/randomizer/randomizer.cpp | 95 ++++++++++++------- 4 files changed, 97 insertions(+), 72 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp index 11014378b..538b32dfe 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_exclude_dungeon.cpp @@ -7,13 +7,13 @@ void StaticData::HintTable_Init_Exclude_Dungeon() { // clang-format off // TODO move these to region specific sections when hint text stable - hintTextTable[RHT_DODONGOS_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Dodongo's Cavern# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_SHADOW_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Shadow Temple# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_SPIRIT_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Spirit Temple# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_BOTW_SILVER] = HintText(CustomMessage("They say that silver in #Bottom of the Well# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_ICE_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Ice Cavern# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_GTG_SILVER] = HintText(CustomMessage("They say that silver in #Gerudo Training Ground# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); - hintTextTable[RHT_GANONS_CASTLE_SILVER] = HintText(CustomMessage("They say that silver in #Ganon's Castle# holds #[[1]]#.", TODO_TRANSLATE, TODO_TRANSLATE, {QM_RED, QM_GREEN})); + hintTextTable[RHT_DODONGOS_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Dodongo's Cavern# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans la #Caverne Dodongo# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SHADOW_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Shadow Temple# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans le #Temple de l'Ombre# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_SPIRIT_TEMPLE_SILVER] = HintText(CustomMessage("They say that silver in #Spirit Temple# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans le #Temple de l'Esprit# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_BOTW_SILVER] = HintText(CustomMessage("They say that silver in #Bottom of the Well# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans le #Puits# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_ICE_CAVERN_SILVER] = HintText(CustomMessage("They say that silver in #Ice Cavern# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans la #Caverne Polaire# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GTG_SILVER] = HintText(CustomMessage("They say that silver in #Gerudo Training Ground# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans le #Gymnase Gerudo# cache #[[1]]#.", {QM_RED, QM_GREEN})); + hintTextTable[RHT_GANONS_CASTLE_SILVER] = HintText(CustomMessage("They say that silver in #Ganon's Castle# holds #[[1]]#.", TODO_TRANSLATE, "Selon moi, un Rubis d'argent dans le #Château de Ganon# cache #[[1]]#.", {QM_RED, QM_GREEN})); /*-------------------------- | DEKU TREE | diff --git a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp index b6666a0d8..5f7601d6d 100644 --- a/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/hint_list/hint_list_item.cpp @@ -2091,7 +2091,7 @@ void StaticData::HintTable_Init_Item() { }, { CustomMessage("sack of mice", /*german*/"ein Sack Mäuse", /*french*/"un Sac rempli de souris")}); - hintTextTable[RHT_SILVER] = HintText(CustomMessage("a Silver Rupee", /*german*/ TODO_TRANSLATE, /*french*/ TODO_TRANSLATE)); + hintTextTable[RHT_SILVER] = HintText(CustomMessage("a Silver Rupee", /*german*/ TODO_TRANSLATE, /*french*/ "un Rubis d'argent")); hintTextTable[RHT_SKELETON_KEY] = HintText(CustomMessage("a Skeleton Key", /*german*/ "der Skelettschlüssel", /*french*/ "une Clé Squelette"), // /*spanish*/una Llave Maestra diff --git a/soh/soh/Enhancements/randomizer/item_list.cpp b/soh/soh/Enhancements/randomizer/item_list.cpp index cc99047ee..6968b9bc3 100644 --- a/soh/soh/Enhancements/randomizer/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/item_list.cpp @@ -242,63 +242,63 @@ void Rando::StaticData::InitItemTable() { itemTable[RG_TREASURE_GAME_KEY_RING] = Item(RG_TREASURE_GAME_KEY_RING, Text{ "Chest Game Key Ring", "Trousseau du jeu la Chasse-aux-Trésors", "Schlüsselbund (Truhenlotterie)" }, ITEMTYPE_SMALLKEY, 0xDE, true, LOGIC_TREASURE_GAME_KEYS, RHT_TREASURE_GAME_KEY_RING, RG_TREASURE_GAME_KEY_RING, OBJECT_GI_KEY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_TREASURE_GAME_KEY_RING].SetCustomDrawFunc(Randomizer_DrawKeyRing); // Silver Rupees - itemTable[RG_SHADOW_SILVER_BLADES] = Item(RG_SHADOW_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_BLADES] = Item(RG_SHADOW_SILVER_BLADES, Text{ "Shadow Silver: Blades", "Rubis d'argent du Temple de l'Ombre: Lames", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_SILVER_PIT] = Item(RG_SHADOW_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_PIT] = Item(RG_SHADOW_SILVER_PIT, Text{ "Shadow Silver: Pit", "Rubis d'argent du Temple de l'Ombre: Trou", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_SILVER_SPIKES] = Item(RG_SHADOW_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_SILVER_SPIKES] = Item(RG_SHADOW_SILVER_SPIKES, Text{ "Shadow Silver: Spikes", "Rubis d'argent du Temple de l'Ombre: Pics", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_CHILD] = Item(RG_SPIRIT_SILVER_CHILD, Text{ "Spirit Silver: Child" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_CHILD] = Item(RG_SPIRIT_SILVER_CHILD, Text{ "Spirit Silver: Child", "Rubis d'argent du Temple de l'Esprit: Enfant", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_CHILD].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_SUN] = Item(RG_SPIRIT_SILVER_SUN, Text{ "Spirit Silver: Sun" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_SUN] = Item(RG_SPIRIT_SILVER_SUN, Text{ "Spirit Silver: Sun", "Rubis d'argent du Temple de l'Esprit: Soleil", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_SUN].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_SILVER_BOULDERS] = Item(RG_SPIRIT_SILVER_BOULDERS, Text{ "Spirit Silver: Boulders" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_SILVER_BOULDERS] = Item(RG_SPIRIT_SILVER_BOULDERS, Text{ "Spirit Silver: Boulders", "Rubis d'argent du Temple de l'Esprit: Rochers", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_SILVER_BOULDERS].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_BOTW_SILVER] = Item(RG_BOTW_SILVER, Text{ "Bottom of the Well Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_BOTW_SILVER] = Item(RG_BOTW_SILVER, Text{ "Bottom of the Well Silver", "Rubis d'argent du Puits", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_BOTW_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_ICE_CAVERN_SILVER_BLADES] = Item(RG_ICE_CAVERN_SILVER_BLADES, Text{ "Ice Cavern Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLADES] = Item(RG_ICE_CAVERN_SILVER_BLADES, Text{ "Ice Cavern Silver: Blades", "Rubis d'argent de la Caverne Polaire: Lames", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_ICE_CAVERN_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_ICE_CAVERN_SILVER_BLOCK] = Item(RG_ICE_CAVERN_SILVER_BLOCK, Text{ "Ice Cavern Silver: Block" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_ICE_CAVERN_SILVER_BLOCK] = Item(RG_ICE_CAVERN_SILVER_BLOCK, Text{ "Ice Cavern Silver: Block", "Rubis d'argent de la Caverne Polaire: Blocs", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_ICE_CAVERN_SILVER_BLOCK].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_SLOPE] = Item(RG_GTG_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_SLOPE] = Item(RG_GTG_SILVER_SLOPE, Text{ "Training Ground Silver: Slope", "Rubis d'argent du Gymnase Gerudo: Pente", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_LAVA] = Item(RG_GTG_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_LAVA] = Item(RG_GTG_SILVER_LAVA, Text{ "Training Ground Silver: Lava", "Rubis d'argent du Gymnase Gerudo: Lave", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_SILVER_WATER] = Item(RG_GTG_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_SILVER_WATER] = Item(RG_GTG_SILVER_WATER, Text{ "Training Ground Silver: Water", "Rubis d'argent du Gymnase Gerudo: Eau", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_LIGHT] = Item(RG_GANONS_CASTLE_SILVER_LIGHT, Text{ "Ganon's Castle Silver: Light" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_LIGHT] = Item(RG_GANONS_CASTLE_SILVER_LIGHT, Text{ "Ganon's Castle Silver: Light", "Rubis d'argent du Château de Ganon: Lumière", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_LIGHT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_FOREST] = Item(RG_GANONS_CASTLE_SILVER_FOREST, Text{ "Ganon's Castle Silver: Forest" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FOREST] = Item(RG_GANONS_CASTLE_SILVER_FOREST, Text{ "Ganon's Castle Silver: Forest", "Rubis d'argent du Château de Ganon: Fôret", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_FOREST].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_FIRE] = Item(RG_GANONS_CASTLE_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_FIRE] = Item(RG_GANONS_CASTLE_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire", "Rubis d'argent du Château de Ganon: Feu", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT] = Item(RG_GANONS_CASTLE_SILVER_SPIRIT, Text{ "Ganon's Castle Silver: Spirit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT] = Item(RG_GANONS_CASTLE_SILVER_SPIRIT, Text{ "Ganon's Castle Silver: Spirit", "Rubis d'argent du Château de Ganon: Esprit", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_SILVER_SPIRIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_DODONGOS_CAVERN_MQ_SILVER] = Item(RG_DODONGOS_CAVERN_MQ_SILVER, Text{ "Dodongo's Cavern Silver" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_DODONGOS_CAVERN_MQ_SILVER] = Item(RG_DODONGOS_CAVERN_MQ_SILVER, Text{ "Dodongo's Cavern Silver", "Rubis d'argent de la Caverne Dodongo", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_DODONGOS_CAVERN_MQ_SILVER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_BLADES] = Item(RG_SHADOW_MQ_SILVER_BLADES, Text{ "Shadow Silver: Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_BLADES] = Item(RG_SHADOW_MQ_SILVER_BLADES, Text{ "Shadow Silver: Blades", "Rubis d'argent du Temple de l'Ombre: Lames", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_PIT] = Item(RG_SHADOW_MQ_SILVER_PIT, Text{ "Shadow Silver: Pit" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_PIT] = Item(RG_SHADOW_MQ_SILVER_PIT, Text{ "Shadow Silver: Pit", "Rubis d'argent du Temple de l'Ombre: Trou", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_PIT].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES] = Item(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, Text{ "Shadow Silver: Invisible Blades" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES] = Item(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, Text{ "Shadow Silver: Invisible Blades", "Rubis d'argent du Temple de l'Ombre: Lames Invisibles", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SHADOW_MQ_SILVER_SPIKES] = Item(RG_SHADOW_MQ_SILVER_SPIKES, Text{ "Shadow Silver: Spikes" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SHADOW_MQ_SILVER_SPIKES] = Item(RG_SHADOW_MQ_SILVER_SPIKES, Text{ "Shadow Silver: Spikes", "Rubis d'argent du Temple de l'Ombre: Pics", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SHADOW_MQ_SILVER_SPIKES].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_MQ_SILVER_LOBBY] = Item(RG_SPIRIT_MQ_SILVER_LOBBY, Text{ "Spirit Silver: Lobby" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_LOBBY] = Item(RG_SPIRIT_MQ_SILVER_LOBBY, Text{ "Spirit Silver: Lobby", "Rubis d'argent du Temple de l'Esprit: Hall d'entrée", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_MQ_SILVER_LOBBY].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL] = Item(RG_SPIRIT_MQ_SILVER_BIG_WALL, Text{ "Spirit Silver: Big Wall" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL] = Item(RG_SPIRIT_MQ_SILVER_BIG_WALL, Text{ "Spirit Silver: Big Wall", "Rubis d'argent du Temple de l'Esprit: Grand Mur", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_SPIRIT_MQ_SILVER_BIG_WALL].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_SLOPE] = Item(RG_GTG_MQ_SILVER_SLOPE, Text{ "Training Ground Silver: Slope" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_SLOPE] = Item(RG_GTG_MQ_SILVER_SLOPE, Text{ "Training Ground Silver: Slope", "Rubis d'argent du Gymnase Gerudo: Pente", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_SLOPE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_LAVA] = Item(RG_GTG_MQ_SILVER_LAVA, Text{ "Training Ground Silver: Lava" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_LAVA] = Item(RG_GTG_MQ_SILVER_LAVA, Text{ "Training Ground Silver: Lava", "Rubis d'argent du Gymnase Gerudo: Lave", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_LAVA].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GTG_MQ_SILVER_WATER] = Item(RG_GTG_MQ_SILVER_WATER, Text{ "Training Ground Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GTG_MQ_SILVER_WATER] = Item(RG_GTG_MQ_SILVER_WATER, Text{ "Training Ground Silver: Water", "Rubis d'argent du Gymnase Gerudo: Eau", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GTG_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE] = Item(RG_GANONS_CASTLE_MQ_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE] = Item(RG_GANONS_CASTLE_MQ_SILVER_FIRE, Text{ "Ganon's Castle Silver: Fire", "Rubis d'argent du Château de Ganon: Feu", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_FIRE].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER] = Item(RG_GANONS_CASTLE_MQ_SILVER_WATER, Text{ "Ganon's Castle Silver: Water" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER] = Item(RG_GANONS_CASTLE_MQ_SILVER_WATER, Text{ "Ganon's Castle Silver: Water", "Rubis d'argent du Château de Ganon: Eau", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_WATER].SetCustomDrawFunc(Randomizer_DrawSilverRupee); - itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW] = Item(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, Text{ "Ganon's Castle Silver: Shadow" }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); + itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW] = Item(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, Text{ "Ganon's Castle Silver: Shadow", "Rubis d'argent du Château de Ganon: Ombre", TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_RUPEE_GOLD, true, LOGIC_NONE, RHT_SILVER, RG_NONE, OBJECT_GI_RUPY, GID_KEY_SMALL, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_SHORT, ITEM_CATEGORY_SMALL_KEY,MOD_RANDOMIZER); itemTable[RG_GANONS_CASTLE_MQ_SILVER_SHADOW].SetCustomDrawFunc(Randomizer_DrawSilverRupee); // Dungeon Rewards itemTable[RG_KOKIRI_EMERALD] = Item(RG_KOKIRI_EMERALD, Text{ "Kokiri's Emerald", "Émeraude Kokiri", "Kokiri-Smaragd" }, ITEMTYPE_DUNGEONREWARD, 0xCB, true, LOGIC_KOKIRI_EMERALD, RHT_KOKIRI_EMERALD, ITEM_KOKIRI_EMERALD, OBJECT_GI_JEWEL, GID_KOKIRI_EMERALD, 0x80, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_NONE); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index c72a369a2..fbf87b949 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -5990,41 +5990,66 @@ void Randomizer::CreateCustomMessages() { GIMESSAGE(RG_DEKU_NUT_BAG, ITEM_NUT, "You found the %rDeku Nut Bag%w!&You can now hold Deku Nuts!", "Du hast eine %rDeku-Nuß-Tasche%w&gefunden! Nun kannst Du &%yDeku-Nüsse%w verwenden!", "Vous avez trouvé le %rSac de Noix& Mojo%w!&Vous pouvez maintenant porter des&Noix Mojo!"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes"), - GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_CHILD, ITEM_KEY_SMALL, "You found Spirit Silver: Child"), - GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_SUN, ITEM_KEY_SMALL, "You found Spirit Silver: Sun"), - GIMESSAGE_UNTRANSLATED(RG_SPIRIT_SILVER_BOULDERS, ITEM_KEY_SMALL, "You found Spirit Silver: Boulders"), - GIMESSAGE_UNTRANSLATED(RG_BOTW_SILVER, ITEM_KEY_SMALL, "You found Bottom of the Well Silver"), - GIMESSAGE_UNTRANSLATED(RG_ICE_CAVERN_SILVER_BLADES, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Blades"), - GIMESSAGE_UNTRANSLATED(RG_ICE_CAVERN_SILVER_BLOCK, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Block"), - GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope"), - GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), - GIMESSAGE_UNTRANSLATED(RG_GTG_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_LIGHT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Light"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FOREST, ITEM_KEY_SMALL, - "You found Ganon's Castle Silver: Forest"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_SILVER_SPIRIT, ITEM_KEY_SMALL, - "You found Ganon's Castle Silver: Spirit"), - GIMESSAGE_UNTRANSLATED(RG_DODONGOS_CAVERN_MQ_SILVER, ITEM_KEY_SMALL, "You found Dodongo's Cavern Silver"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, ITEM_KEY_SMALL, - "You found Shadow Silver: Invisible Blades"), - GIMESSAGE_UNTRANSLATED(RG_SHADOW_MQ_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes"), - GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_LOBBY, ITEM_KEY_SMALL, "You found Spirit Silver: Lobby"), - GIMESSAGE_UNTRANSLATED(RG_SPIRIT_MQ_SILVER_BIG_WALL, ITEM_KEY_SMALL, "You found Spirit Silver: Big Wall"), - GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope"), - GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava"), - GIMESSAGE_UNTRANSLATED(RG_GTG_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_FIRE, ITEM_KEY_SMALL, - "You found Ganon's Castle Silver: Fire"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_WATER, ITEM_KEY_SMALL, - "You found Ganon's Castle Silver: Water"), - GIMESSAGE_UNTRANSLATED(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, ITEM_KEY_SMALL, - "You found Ganon's Castle Silver: Shadow"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Lames%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Trou%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Pics%w!"), + GIMESSAGE_NO_GERMAN(RG_SPIRIT_SILVER_CHILD, ITEM_KEY_SMALL, "You found Spirit Silver: Child", + "Vous obtenez les %rRubis d'argent&%wdu %yTemple de l'Esprit: Enfant%w!"), + GIMESSAGE_NO_GERMAN(RG_SPIRIT_SILVER_SUN, ITEM_KEY_SMALL, "You found Spirit Silver: Sun", + "Vous obtenez les %rRubis d'argent&%wdu %yTemple de l'Esprit: Soleil%w!"), + GIMESSAGE_NO_GERMAN(RG_SPIRIT_SILVER_BOULDERS, ITEM_KEY_SMALL, "You found Spirit Silver: Boulders", + "Vous obtenez les %rRubis d'argent&%wdu %yTemple de l'Esprit: Rochers%w!"), + GIMESSAGE_NO_GERMAN(RG_BOTW_SILVER, ITEM_KEY_SMALL, "You found Bottom of the Well Silver", + "Vous obtenez les %rRubis d'argent&%wdu %pPuits%w!"), + GIMESSAGE_NO_GERMAN(RG_ICE_CAVERN_SILVER_BLADES, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Blades", + "Vous obtenez les %rRubis d'argent&%wde la %cCaverne Polaire: Lames%w!"), + GIMESSAGE_NO_GERMAN(RG_ICE_CAVERN_SILVER_BLOCK, ITEM_KEY_SMALL, "You found Ice Cavern Silver: Block", + "Vous obtenez les %rRubis d'argent&%wde la %cCaverne Polaire: Blocs%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Pente%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Lave%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Eau%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SILVER_LIGHT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Light", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Lumière%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SILVER_FOREST, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Forest", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Fôret%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Feu%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_SILVER_SPIRIT, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Spirit", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Esprit%w!"), + GIMESSAGE_NO_GERMAN(RG_DODONGOS_CAVERN_MQ_SILVER, ITEM_KEY_SMALL, "You found Dodongo's Cavern Silver", + "Vous obtenez les %rRubis d'argent&%wde la %rCaverne Dodongo%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_MQ_SILVER_BLADES, ITEM_KEY_SMALL, "You found Shadow Silver: Blades", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Lames%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_MQ_SILVER_PIT, ITEM_KEY_SMALL, "You found Shadow Silver: Pit", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Trou%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_MQ_SILVER_INVISIBLE_BLADES, ITEM_KEY_SMALL, + "You found Shadow Silver: Invisible Blades", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Lames Invisibles%w!"), + GIMESSAGE_NO_GERMAN(RG_SHADOW_MQ_SILVER_SPIKES, ITEM_KEY_SMALL, "You found Shadow Silver: Spikes", + "Vous obtenez les %rRubis d'argent&%wdu %pTemple de l'Ombre: Pics%w!"), + GIMESSAGE_NO_GERMAN(RG_SPIRIT_MQ_SILVER_LOBBY, ITEM_KEY_SMALL, "You found Spirit Silver: Lobby", + "Vous obtenez les %rRubis d'argent&%wdu %yTemple de l'Esprit: Hall d'entrée%w!"), + GIMESSAGE_NO_GERMAN(RG_SPIRIT_MQ_SILVER_BIG_WALL, ITEM_KEY_SMALL, "You found Spirit Silver: Big Wall", + "Vous obtenez les %rRubis d'argent&%wdu %yTemple de l'Esprit: Grand Mur%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_MQ_SILVER_SLOPE, ITEM_KEY_SMALL, "You found Training Ground Silver: Slope", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Pente%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_MQ_SILVER_LAVA, ITEM_KEY_SMALL, "You found Training Ground Silver: Lava", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Lave%w!"), + GIMESSAGE_NO_GERMAN(RG_GTG_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Training Ground Silver: Water", + "Vous obtenez les %rRubis d'argent&%wdu %yGymnase Gerudo: Eau%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_MQ_SILVER_FIRE, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Fire", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Feu%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_MQ_SILVER_WATER, ITEM_KEY_SMALL, "You found Ganon's Castle Silver: Water", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Eau%w!"), + GIMESSAGE_NO_GERMAN(RG_GANONS_CASTLE_MQ_SILVER_SHADOW, ITEM_KEY_SMALL, + "You found Ganon's Castle Silver: Shadow", + "Vous obtenez les %rRubis d'argent&%wdu %rChâteau de Ganon: Ombre%w!"), } }; CreateGetItemMessages(getItemMessages); CreateRupeeMessages();