From d4b9e8c835296bcc9fd20c47fe97167418e21ba9 Mon Sep 17 00:00:00 2001 From: Christopher Leggett Date: Wed, 12 Feb 2025 15:42:58 -0500 Subject: [PATCH] Remove locations from pool that are not shuffled. (#5023) * Cleanup of unshuffled locations from pool/spoiler * Removes unshuffled scrubs from the location pool * Fix some instances of weird spacing * Actually remove placement of vanilla freestandings * Cleans up some now unnecessary code. * Minor Optimization of PlaceItemsForType * Fixes some grammer and spelling * Another grammar fix --- .../randomizer/3drando/item_pool.cpp | 231 +--- soh/soh/Enhancements/randomizer/context.cpp | 81 +- soh/soh/Enhancements/randomizer/context.h | 1 + soh/soh/Enhancements/randomizer/dungeon.cpp | 1204 +---------------- soh/soh/Enhancements/randomizer/dungeon.h | 18 +- .../Enhancements/randomizer/hook_handlers.cpp | 9 +- .../Enhancements/randomizer/randomizerTypes.h | 2 +- 7 files changed, 92 insertions(+), 1454 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp index a2699cb65..ac79e860a 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_pool.cpp @@ -471,72 +471,6 @@ void PlaceJunkInExcludedLocation(const RandomizerCheck il) { SPDLOG_ERROR("ERROR: No Junk to Place!!!"); } -static void PlaceVanillaDekuScrubItems(bool junkOneTimeScrubs) { - auto ctx = Rando::Context::GetInstance(); - if (junkOneTimeScrubs){ - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_FRONT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_BRIDGE, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_DEKU_SCRUB_GROTTO, RG_BLUE_RUPEE, false, true); - } - - ctx->PlaceItemInLocation(RC_ZR_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_ZR_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_SFM_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_SFM_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_LH_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_REAR, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_DEKU_SCRUB_GROTTO_REAR, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_DEKU_SCRUB_GROTTO_FRONT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_DMC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GC_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_RIGHT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_LLR_DEKU_SCRUB_GROTTO_CENTER, RG_BUY_DEKU_SEEDS_30, false, true); - - //Dungeon Scrubs - if (ctx->GetDungeon(Rando::DEKU_TREE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DEKU_TREE_MQ_DEKU_SCRUB, RG_BUY_DEKU_SHIELD, false, true); - } - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, RG_BUY_DEKU_SHIELD, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, RG_RED_POTION_REFILL, - false, true); - } else { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, RG_BUY_DEKU_NUTS_5, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, RG_BUY_DEKU_STICK_1, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, RG_BUY_DEKU_SHIELD, false, true); - } - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_JABU_JABUS_BELLY_DEKU_SCRUB, RG_BUY_DEKU_NUTS_5, false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, RG_GREEN_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, RG_BUY_ARROWS_30, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, RG_BUY_DEKU_NUTS_5, false, true); - } else { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, RG_BUY_BOMBS_535, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, RG_BUY_DEKU_SEEDS_30, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, RG_RED_POTION_REFILL, false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, RG_GREEN_POTION_REFILL, false, true); - } -} - static void PlaceVanillaMapsAndCompasses() { auto ctx = Rando::Context::GetInstance(); for (auto dungeon : ctx->GetDungeons()->GetDungeonList()) { @@ -558,143 +492,11 @@ static void PlaceVanillaBossKeys() { dungeon->PlaceVanillaBossKey(); } } -// TODO: This feels like it could be moved to Dungeons class and probably shorten -// a few function call chains. Needs investigation. -static void PlaceVanillaBeehiveRupees() { - auto ctx = Rando::Context::GetInstance(); - ctx->PlaceItemInLocation(RC_KF_STORMS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_KAK_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_STORMS_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_UPPER_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_OPEN_GROTTO_BEEHIVE_LEFT, RG_BLUE_RUPEE, false, true); - - ctx->PlaceItemInLocation(RC_KF_STORMS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_NEAR_SHORTCUTS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LW_DEKU_SCRUB_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_SFM_STORMS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_NEAR_MARKET_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_SOUTHEAST_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_HF_INSIDE_FENCE_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LLR_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_KAK_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_COW_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMT_STORMS_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_GC_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_UPPER_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_DMC_HAMMER_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_OPEN_GROTTO_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZR_STORMS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_LEFT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_IN_FRONT_OF_KING_ZORA_BEEHIVE_RIGHT, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_ZD_BEHIND_KING_ZORA_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_LH_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_GV_DEKU_SCRUB_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); - ctx->PlaceItemInLocation(RC_COLOSSUS_GROTTO_BEEHIVE, RG_RED_RUPEE, false, true); -} - -static void PlaceVanillaCowMilk() { - auto ctx = Rando::Context::GetInstance(); - ctx->PlaceItemInLocation(RC_KF_LINKS_HOUSE_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_HF_COW_GROTTO_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_GV_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_KAK_IMPAS_HOUSE_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_DMT_COW_GROTTO_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_STABLES_LEFT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_STABLES_RIGHT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_TOWER_LEFT_COW, RG_MILK, false, true); - ctx->PlaceItemInLocation(RC_LLR_TOWER_RIGHT_COW, RG_MILK, false, true); - - if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { - ctx->PlaceItemInLocation(RC_JABU_JABUS_BELLY_MQ_COW, RG_MILK, false, true); +static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive) { + if (!(overworldActive || dungeonActive)) { + return; } -} - -static void PlaceVanillaOverworldFish() { - auto ctx = Rando::Context::GetInstance(); - for (auto rc : Rando::StaticData::GetOverworldFishLocations()) { - ctx->PlaceItemInLocation(rc, RG_FISH, false, true); - } -} - -static void PlaceVanillaFairies() { - auto ctx = Rando::Context::GetInstance(); - for (auto rc : Rando::StaticData::GetOverworldFairyLocations()) { - ctx->PlaceItemInLocation(rc, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_1, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_2, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_3, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_4, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_5, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_6, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_7, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SCRUBS_FAIRY_8, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::DODONGOS_CAVERN)->IsMQ()) { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::FIRE_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::WATER_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::SPIRIT_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::SHADOW_TEMPLE)->IsMQ()) { - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::BOTTOM_OF_THE_WELL)->IsMQ()) { - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, GetJunkItem(), false, true); - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); - } else { - ctx->PlaceItemInLocation(RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::ICE_CAVERN)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GERUDO_TRAINING_GROUND)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, GetJunkItem(), false, true); - } - if (ctx->GetDungeon(Rando::GANONS_CASTLE)->IsVanilla()) { - ctx->PlaceItemInLocation(RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, GetJunkItem(), false, true); - } -} - -static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, bool dungeonActive, bool placeVanilla) { for (RandomizerCheck rc : ctx->GetLocations(ctx->allLocations, rctype)) { auto loc = Rando::StaticData::GetLocation(rc); @@ -702,8 +504,6 @@ static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, if (loc->IsOverworld()) { if (overworldActive) { AddItemToMainPool(loc->GetVanillaItem()); - } else if (placeVanilla) { - ctx->PlaceItemInLocation(rc, loc->GetVanillaItem(), false, true); } } else { if (dungeonActive) { @@ -723,8 +523,6 @@ static void PlaceItemsForType(RandomizerCheckType rctype, bool overworldActive, } } } - } else if (placeVanilla) { - ctx->PlaceItemInLocation(rc, loc->GetVanillaItem(), false, true); } } } @@ -905,8 +703,6 @@ void GenerateItemPool() { //32 total beehive locations AddItemToMainPool(RG_RED_RUPEE, 23); AddItemToMainPool(RG_BLUE_RUPEE, 9); - } else { - PlaceVanillaBeehiveRupees(); } if (ctx->GetOption(RSK_SHUFFLE_COWS)) { @@ -918,8 +714,6 @@ void GenerateItemPool() { if (ctx->GetDungeon(Rando::JABU_JABUS_BELLY)->IsMQ()) { AddItemToMainPool(GetJunkItem()); } - } else { - PlaceVanillaCowMilk(); } // Shuffle Pots @@ -927,9 +721,7 @@ void GenerateItemPool() { ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL); bool dungeonPotsActive = ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_DUNGEONS) || ctx->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL); - if (overworldPotsActive || dungeonPotsActive) { - PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive, false); - } + PlaceItemsForType(RCTYPE_POT, overworldPotsActive, dungeonPotsActive); auto fsMode = ctx->GetOption(RSK_FISHSANITY); if (fsMode.IsNot(RO_FISHSANITY_OFF)) { @@ -953,8 +745,6 @@ void GenerateItemPool() { if (fsMode.Is(RO_FISHSANITY_OVERWORLD) || fsMode.Is(RO_FISHSANITY_BOTH)) { for (uint8_t i = 0; i < Rando::StaticData::GetOverworldFishLocations().size(); i++) AddItemToMainPool(GetJunkItem()); - } else { - PlaceVanillaOverworldFish(); } if (fsMode.Is(RO_FISHSANITY_HYRULE_LOACH)) { @@ -962,9 +752,6 @@ void GenerateItemPool() { } else { ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); } - } else { - PlaceVanillaOverworldFish(); - ctx->PlaceItemInLocation(RC_LH_HYRULE_LOACH, RG_PURPLE_RUPEE, false, true); } if (ctx->GetOption(RSK_SHUFFLE_FISHING_POLE)) { @@ -1333,8 +1120,6 @@ void GenerateItemPool() { for (int i = 0; i < extra; i++) { AddItemToMainPool(GetJunkItem()); } - } else { - PlaceVanillaFairies(); } //Scrubsanity @@ -1377,19 +1162,13 @@ void GenerateItemPool() { AddItemToMainPool(RG_DEKU_SEEDS_30); } } - } else { - PlaceVanillaDekuScrubItems(ctx->GetOption(RSK_SHUFFLE_SCRUBS).Is(RO_SCRUBS_OFF)); } - // RANDOTODO: Don't add freestanding locations to the seed at all in the first place so this check - // can be put back in place, and not place the vanilla items in PlaceItemsForType. bool overworldFreeStandingActive = ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_OVERWORLD) || ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_ALL); bool dungeonFreeStandingActive = ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_DUNGEONS) || ctx->GetOption(RSK_SHUFFLE_FREESTANDING).Is(RO_SHUFFLE_FREESTANDING_ALL); - //if (overworldFreeStandingActive || dungeonFreeStandingActive) { - PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive, true); - //} + PlaceItemsForType(RCTYPE_FREESTANDING, overworldFreeStandingActive, dungeonFreeStandingActive); AddItemsToPool(ItemPool, alwaysItems); AddItemsToPool(ItemPool, dungeonRewards); diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index cd4914aaf..d2eb4f2e1 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -98,6 +98,10 @@ ItemLocation* Context::GetItemLocation(size_t locKey) { return &itemLocationTable[static_cast(locKey)]; } +bool Context::IsLocationShuffled(const RandomizerCheck locKey) { + return itemLocationTable[locKey].GetPlacedRandomizerGet() != RG_NONE; +} + ItemOverride& Context::GetItemOverride(RandomizerCheck locKey) { if (!overrides.contains(locKey)) { overrides.emplace(locKey, ItemOverride()); @@ -156,36 +160,73 @@ void Context::GenerateLocationPool() { if (mOptions[RSK_TRIFORCE_HUNT]) { AddLocation(RC_TRIFORCE_COMPLETED); } - AddLocations(StaticData::GetOverworldLocations()); - - if (mOptions[RSK_FISHSANITY].IsNot(RO_FISHSANITY_OFF)) { - AddLocations(mFishsanity->GetFishsanityLocations().first); + for (Location& location : StaticData::GetLocationTable()) { + // skip RCs that shouldn't be in the pool for any reason (i.e. settings, unsupported check type, etc.) + // TODO: Exclude checks for some of the older shuffles from the pool too i.e. Frog Songs, Scrubs, etc.) + if (location.GetRandomizerCheck() == RC_UNKNOWN_CHECK || + location.GetRandomizerCheck() == RC_TRIFORCE_COMPLETED || // already in pool + location.GetRCType() == RCTYPE_CHEST_GAME || // not supported yet + location.GetRCType() == RCTYPE_STATIC_HINT || // can't have items + location.GetRCType() == RCTYPE_GOSSIP_STONE || // can't have items + (location.GetRCType() == RCTYPE_SCRUB && mOptions[RSK_SHUFFLE_SCRUBS].Is(RO_SCRUBS_OFF)) || + (location.GetRCType() == RCTYPE_SCRUB && mOptions[RSK_SHUFFLE_SCRUBS].Is(RO_SCRUBS_ONE_TIME_ONLY) && !( + location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_GROTTO_FRONT || + location.GetRandomizerCheck() == RC_LW_DEKU_SCRUB_NEAR_BRIDGE || + location.GetRandomizerCheck() == RC_HF_DEKU_SCRUB_GROTTO + )) || + (location.GetRCType() == RCTYPE_COW && mOptions[RSK_SHUFFLE_COWS].Is(RO_GENERIC_OFF)) || + (location.GetRCType() == RCTYPE_FISH && mOptions[RSK_FISHSANITY].Is(RO_FISHSANITY_OFF)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OFF)) || + (location.GetRCType() == RCTYPE_FAIRY && !mOptions[RSK_SHUFFLE_FAIRIES]) || + (location.GetRCType() == RCTYPE_FREESTANDING && + mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OFF)) || + (location.GetRCType() == RCTYPE_BEEHIVE && !mOptions[RSK_SHUFFLE_BEEHIVES])) { + continue; + } + if (location.IsOverworld()) { + // Skip stuff that is shuffled to dungeon only, i.e. tokens, pots, etc., or other checks that + // should not have a shuffled item. + if ((location.GetRCType() == RCTYPE_FREESTANDING && mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_DUNGEONS)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_DUNGEONS))) { + continue; + } + // If we've gotten past all the conditions where an overworld location should not be + // shuffled, add it to the pool. + AddLocation(location.GetRandomizerCheck()); + } else { // is a dungeon check + auto* dungeon = GetDungeon(location.GetArea() - RCAREA_DEKU_TREE); + if (location.GetQuest() == RCQUEST_BOTH || (location.GetQuest() == RCQUEST_MQ) == dungeon->IsMQ()) { + if ((location.GetRCType() == RCTYPE_FREESTANDING && + mOptions[RSK_SHUFFLE_FREESTANDING].Is(RO_SHUFFLE_FREESTANDING_OVERWORLD)) || + (location.GetRCType() == RCTYPE_POT && mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD))) { + continue; + } + // also add to that dungeon's location list. + AddLocation(location.GetRandomizerCheck(), &dungeon->locations); + AddLocation(location.GetRandomizerCheck()); + } + } } - - if (mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_OVERWORLD) || - mOptions[RSK_SHUFFLE_POTS].Is(RO_SHUFFLE_POTS_ALL)) { - AddLocations(StaticData::GetOverworldPotLocations()); - } - - AddLocations(StaticData::GetAllDungeonLocations()); } void Context::AddExcludedOptions() { - AddLocations(StaticData::GetOverworldLocations(), &everyPossibleLocation); - for (const auto dungeon : mDungeons->GetDungeonList()) { - AddLocations(dungeon->GetEveryLocation(), &everyPossibleLocation); - } - for (const RandomizerCheck rc : everyPossibleLocation) { + for (auto& loc : StaticData::GetLocationTable()) { + // Checks of these types don't have items, skip them. + if (loc.GetRandomizerCheck() == RC_UNKNOWN_CHECK || + loc.GetRandomizerCheck() == RC_TRIFORCE_COMPLETED || loc.GetRCType() == RCTYPE_CHEST_GAME || + loc.GetRCType() == RCTYPE_STATIC_HINT || loc.GetRCType() == RCTYPE_GOSSIP_STONE) { + continue; + } + AddLocation(loc.GetRandomizerCheck(), &everyPossibleLocation); bool alreadyAdded = false; - Location* loc = StaticData::GetLocation(rc); - for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc->GetArea())) + for (Option* location : Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea())) { - if (location->GetName() == loc->GetExcludedOption()->GetName()) { + if (location->GetName() == loc.GetExcludedOption()->GetName()) { alreadyAdded = true; } } if (!alreadyAdded) { - Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc->GetArea()).push_back(loc->GetExcludedOption()); + Rando::Settings::GetInstance()->GetExcludeOptionsForArea(loc.GetArea()).push_back(loc.GetExcludedOption()); } } } diff --git a/soh/soh/Enhancements/randomizer/context.h b/soh/soh/Enhancements/randomizer/context.h index cc71609eb..b90f251c7 100644 --- a/soh/soh/Enhancements/randomizer/context.h +++ b/soh/soh/Enhancements/randomizer/context.h @@ -41,6 +41,7 @@ class Context { void AddHint(const RandomizerHint hintId, const Hint hint); ItemLocation* GetItemLocation(RandomizerCheck locKey); ItemLocation* GetItemLocation(size_t locKey); + bool IsLocationShuffled(RandomizerCheck locKey); ItemOverride& GetItemOverride(RandomizerCheck locKey); ItemOverride& GetItemOverride(size_t locKey); void PlaceItemInLocation(RandomizerCheck locKey, RandomizerGet item, bool applyEffectImmediately = false, diff --git a/soh/soh/Enhancements/randomizer/dungeon.cpp b/soh/soh/Enhancements/randomizer/dungeon.cpp index 423c8666e..8b749faf8 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.cpp +++ b/soh/soh/Enhancements/randomizer/dungeon.cpp @@ -8,16 +8,10 @@ namespace Rando { DungeonInfo::DungeonInfo(std::string name_, const RandomizerHintTextKey hintKey_, const RandomizerGet map_, const RandomizerGet compass_, const RandomizerGet smallKey_, const RandomizerGet keyRing_, const RandomizerGet bossKey_, RandomizerArea area_, const uint8_t vanillaKeyCount_, const uint8_t mqKeyCount_, - const RandomizerSettingKey mqSetting_, - std::vector vanillaLocations_, std::vector mqLocations_, - std::vector vanillaPots_, std::vector mqPots_, - std::vector sharedLocations_, std::vector bossRoomLocations_) + const RandomizerSettingKey mqSetting_) : name(std::move(name_)), hintKey(hintKey_), map(map_), compass(compass_), smallKey(smallKey_), keyRing(keyRing_), bossKey(bossKey_), area(area_), vanillaKeyCount(vanillaKeyCount_), mqKeyCount(mqKeyCount_), - mqSetting(mqSetting_), - vanillaLocations(std::move(vanillaLocations_)), mqLocations(std::move(mqLocations_)), - vanillaPots(std::move(vanillaPots_)), mqPots(std::move(mqPots_)), - sharedLocations(std::move(sharedLocations_)), bossRoomLocations(std::move(bossRoomLocations_)) { + mqSetting(mqSetting_) { } DungeonInfo::DungeonInfo() : hintKey(RHT_NONE), map(RG_NONE), compass(RG_NONE), smallKey(RG_NONE), keyRing(RG_NONE), bossKey(RG_NONE) {} @@ -147,1212 +141,42 @@ void DungeonInfo::PlaceVanillaSmallKeys() const { // Gets the chosen dungeon locations for a playthrough (so either MQ or Vanilla) std::vector DungeonInfo::GetDungeonLocations() const { - auto locations = masterQuest ? mqLocations : vanillaLocations; - if (Context::GetInstance()->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_DUNGEONS) || - Context::GetInstance()->GetOption(RSK_SHUFFLE_POTS).Is(RO_SHUFFLE_POTS_ALL)) { - auto potLocations = masterQuest ? mqPots : vanillaPots; - AddElementsToPool(locations, potLocations); - } - AddElementsToPool(locations, sharedLocations); - AddElementsToPool(locations, bossRoomLocations); - return locations; -} - -// Gets all dungeon locations (MQ + Vanilla) -std::vector DungeonInfo::GetEveryLocation() const { - auto locations = vanillaLocations; - AddElementsToPool(locations, mqLocations); - AddElementsToPool(locations, vanillaPots); - AddElementsToPool(locations, mqPots); - AddElementsToPool(locations, sharedLocations); - AddElementsToPool(locations, bossRoomLocations); return locations; } Dungeons::Dungeons() { dungeonList[DEKU_TREE] = - DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0, RSK_MQ_DEKU_TREE, - { - // Vanilla Locations - RC_DEKU_TREE_MAP_CHEST, - RC_DEKU_TREE_COMPASS_CHEST, - RC_DEKU_TREE_COMPASS_ROOM_SIDE_CHEST, - RC_DEKU_TREE_BASEMENT_CHEST, - RC_DEKU_TREE_SLINGSHOT_CHEST, - RC_DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST, - RC_DEKU_TREE_GS_BASEMENT_BACK_ROOM, - RC_DEKU_TREE_GS_BASEMENT_GATE, - RC_DEKU_TREE_GS_BASEMENT_VINES, - RC_DEKU_TREE_GS_COMPASS_ROOM, - RC_DEKU_TREE_LOBBY_LOWER_HEART, - RC_DEKU_TREE_LOBBY_UPPER_HEART, - RC_DEKU_TREE_BEFORE_BOSS_LEFT_HEART, - RC_DEKU_TREE_BEFORE_BOSS_MIDDLE_HEART, - RC_DEKU_TREE_BEFORE_BOSS_RIGHT_HEART, - }, - { - // MQ Locations - RC_DEKU_TREE_MQ_MAP_CHEST, - RC_DEKU_TREE_MQ_COMPASS_CHEST, - RC_DEKU_TREE_MQ_SLINGSHOT_CHEST, - RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST, - RC_DEKU_TREE_MQ_BASEMENT_CHEST, - RC_DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST, - RC_DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST, - RC_DEKU_TREE_MQ_DEKU_SCRUB, - RC_DEKU_TREE_MQ_GS_LOBBY, - RC_DEKU_TREE_MQ_GS_PAST_BOULDER_VINES, - RC_DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM, - RC_DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM, - RC_DEKU_TREE_MQ_COMPASS_ROOM_HEART, - RC_DEKU_TREE_MQ_DEKU_BABA_HEART, - RC_DEKU_TREE_MQ_LOBBY_HEART, - RC_DEKU_TREE_MQ_SLINGSHOT_ROOM_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_LEFT_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_MIDDLE_HEART, - RC_DEKU_TREE_MQ_BEFORE_BOSS_RIGHT_HEART, - }, - {}, {}, {}, - { - // Boss Room Locations - RC_DEKU_TREE_QUEEN_GOHMA_HEART, - RC_QUEEN_GOHMA, - }); + DungeonInfo("Deku Tree", RHT_DEKU_TREE, RG_DEKU_TREE_MAP, RG_DEKU_TREE_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DEKU_TREE, 0, 0, RSK_MQ_DEKU_TREE); dungeonList[DODONGOS_CAVERN] = DungeonInfo("Dodongo's Cavern", RHT_DODONGOS_CAVERN, RG_DODONGOS_CAVERN_MAP, - RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0, RSK_MQ_DODONGOS_CAVERN, - { - // Vanilla Locations - RC_DODONGOS_CAVERN_MAP_CHEST, - RC_DODONGOS_CAVERN_COMPASS_CHEST, - RC_DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST, - RC_DODONGOS_CAVERN_BOMB_BAG_CHEST, - RC_DODONGOS_CAVERN_END_OF_BRIDGE_CHEST, - RC_DODONGOS_CAVERN_DEKU_SCRUB_LOBBY, - RC_DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS, - RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT, - RC_DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT, - RC_DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS, - RC_DODONGOS_CAVERN_GS_SCARECROW, - RC_DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS, - RC_DODONGOS_CAVERN_GS_BACK_ROOM, - RC_DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS, - RC_DODONGOS_CAVERN_LOWER_LIZALFOS_HEART, - RC_DODONGOS_CAVERN_BLADE_ROOM_HEART, - RC_DODONGOS_CAVERN_UPPER_LIZALFOS_LEFT_HEART, - RC_DODONGOS_CAVERN_UPPER_LIZALFOS_RIGHT_HEART, - RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY, - RC_DODONGOS_CAVERN_GOSSIP_STONE_FAIRY_BIG, - }, - { - // MQ Locations - RC_DODONGOS_CAVERN_MQ_MAP_CHEST, - RC_DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST, - RC_DODONGOS_CAVERN_MQ_COMPASS_CHEST, - RC_DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST, - RC_DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE, - RC_DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS, - RC_DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM, - RC_DODONGOS_CAVERN_MQ_GS_BACK_AREA, - RC_DODONGOS_CAVERN_MQ_LIZALFOS_ROOM_HEART, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_HEART, - RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY, - RC_DODONGOS_CAVERN_MQ_GOSSIP_STONE_FAIRY_BIG, - }, - { - // Vanilla Pots - RC_DODONGOS_CAVERN_LIZALFOS_POT_1, - RC_DODONGOS_CAVERN_LIZALFOS_POT_2, - RC_DODONGOS_CAVERN_LIZALFOS_POT_3, - RC_DODONGOS_CAVERN_LIZALFOS_POT_4, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_1, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_2, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_3, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_4, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_5, - RC_DODONGOS_CAVERN_SIDE_ROOM_POT_6, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_1, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_2, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_3, - RC_DODONGOS_CAVERN_TORCH_ROOM_POT_4, - RC_DODONGOS_CAVERN_STAIRCASE_POT_1, - RC_DODONGOS_CAVERN_STAIRCASE_POT_2, - RC_DODONGOS_CAVERN_STAIRCASE_POT_3, - RC_DODONGOS_CAVERN_STAIRCASE_POT_4, - RC_DODONGOS_CAVERN_SINGLE_EYE_POT_1, - RC_DODONGOS_CAVERN_SINGLE_EYE_POT_2, - RC_DODONGOS_CAVERN_BLADE_POT_1, - RC_DODONGOS_CAVERN_BLADE_POT_2, - RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_1, - RC_DODONGOS_CAVERN_DOUBLE_EYE_POT_2, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_1, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_2, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_3, - RC_DODONGOS_CAVERN_BACK_ROOM_POT_4, - }, - { - // MQ Pots - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_1, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_2, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_3, - RC_DODONGOS_CAVERN_MQ_RIGHT_SIDE_POT_4, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_1, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_2, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_3, - RC_DODONGOS_CAVERN_MQ_UPPER_LIZALFOS_POT_4, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_1, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_2, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_3, - RC_DODONGOS_CAVERN_MQ_POE_ROOM_POT_4, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_CORNER_POT, - RC_DODONGOS_CAVERN_MQ_TORCH_PUZZLE_MIDDLE_POT, - RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_1, - RC_DODONGOS_CAVERN_MQ_TWO_FLAMES_POT_2, - RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_1, - RC_DODONGOS_CAVERN_MQ_BIG_BLOCK_POT_2, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_1, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_2, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_3, - RC_DODONGOS_CAVERN_MQ_STAIRCASE_POT_4, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NW_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_NE_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SE_POT, - RC_DODONGOS_CAVERN_MQ_ARMOS_ROOM_SW_POT, - RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_SW_POT, - RC_DODONGOS_CAVERN_MQ_BEFORE_BOSS_NE_POT, - RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_1, - RC_DODONGOS_CAVERN_MQ_BACKROOM_POT_2, - }, - {}, - { - // Boss Room Locations - RC_DODONGOS_CAVERN_BOSS_ROOM_CHEST, - RC_DODONGOS_CAVERN_KING_DODONGO_HEART, - RC_KING_DODONGO, - }); + RG_DODONGOS_CAVERN_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_DODONGOS_CAVERN, 0, 0, RSK_MQ_DODONGOS_CAVERN); dungeonList[JABU_JABUS_BELLY] = DungeonInfo("Jabu Jabu's Belly", RHT_JABU_JABUS_BELLY, RG_JABU_JABUS_BELLY_MAP, - RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0, RSK_MQ_JABU_JABU, - { - // Vanilla Locations - RC_JABU_JABUS_BELLY_MAP_CHEST, - RC_JABU_JABUS_BELLY_COMPASS_CHEST, - RC_JABU_JABUS_BELLY_BOOMERANG_CHEST, - RC_JABU_JABUS_BELLY_DEKU_SCRUB, - RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER, - RC_JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER, - RC_JABU_JABUS_BELLY_GS_NEAR_BOSS, - RC_JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM, - }, - { - // MQ Locations - RC_JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST, - RC_JABU_JABUS_BELLY_MQ_MAP_CHEST, - RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST, - RC_JABU_JABUS_BELLY_MQ_COMPASS_CHEST, - RC_JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST, - RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST, - RC_JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST, - RC_JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST, - RC_JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST, - RC_JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST, - RC_JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST, - RC_JABU_JABUS_BELLY_MQ_COW, - RC_JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM, - RC_JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_1, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_2, - RC_JABU_JABUS_BELLY_MQ_LIFT_RUPEE_3, - RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_1, - RC_JABU_JABUS_BELLY_MQ_LIFT_HEART_2, - }, - { - // Vanilla Pots - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_1, - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_2, - RC_JABU_JABUS_BELLY_ABOVE_BIG_OCTO_POT_3, - RC_JABU_JABUS_BELLY_BASEMENT_POT_1, - RC_JABU_JABUS_BELLY_BASEMENT_POT_2, - RC_JABU_JABUS_BELLY_BASEMENT_POT_3, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_1, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_2, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_3, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_4, - RC_JABU_JABUS_BELLY_TWO_OCTOROK_POT_5, - - // Shared Pots so in both vanilla and MQ - RC_JABU_JABUS_BELLY_BARINADE_POT_1, - RC_JABU_JABUS_BELLY_BARINADE_POT_2, - RC_JABU_JABUS_BELLY_BARINADE_POT_3, - RC_JABU_JABUS_BELLY_BARINADE_POT_4, - RC_JABU_JABUS_BELLY_BARINADE_POT_5, - RC_JABU_JABUS_BELLY_BARINADE_POT_6, - }, - { - // MQ Pots - RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_1, - RC_JABU_JABUS_BELLY_MQ_ENTRANCE_POT_2, - RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_1, - RC_JABU_JABUS_BELLY_MQ_GEYSER_POT_2, - RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_1, - RC_JABU_JABUS_BELLY_MQ_TIME_BLOCK_POT_2, - RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_1, - RC_JABU_JABUS_BELLY_MQ_LIKE_LIKES_POT_2, - RC_JABU_JABUS_BELLY_MQ_BEFORE_BOSS_POT_1, - - // Shared Pots so in both vanilla and MQ - RC_JABU_JABUS_BELLY_BARINADE_POT_1, - RC_JABU_JABUS_BELLY_BARINADE_POT_2, - RC_JABU_JABUS_BELLY_BARINADE_POT_3, - RC_JABU_JABUS_BELLY_BARINADE_POT_4, - RC_JABU_JABUS_BELLY_BARINADE_POT_5, - RC_JABU_JABUS_BELLY_BARINADE_POT_6, - }, - {}, - { - // Boss Room Locations - RC_JABU_JABUS_BELLY_BARINADE_HEART, - RC_BARINADE, - }); + RG_JABU_JABUS_BELLY_COMPASS, RG_NONE, RG_NONE, RG_NONE, RA_JABU_JABUS_BELLY, 0, 0, RSK_MQ_JABU_JABU); dungeonList[FOREST_TEMPLE] = DungeonInfo("Forest Temple", RHT_FOREST_TEMPLE, RG_FOREST_TEMPLE_MAP, RG_FOREST_TEMPLE_COMPASS, - RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6, RSK_MQ_FOREST_TEMPLE, - { - // Vanilla Locations - RC_FOREST_TEMPLE_FIRST_ROOM_CHEST, - RC_FOREST_TEMPLE_FIRST_STALFOS_CHEST, - RC_FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST, - RC_FOREST_TEMPLE_MAP_CHEST, - RC_FOREST_TEMPLE_WELL_CHEST, - RC_FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST, - RC_FOREST_TEMPLE_EYE_SWITCH_CHEST, - RC_FOREST_TEMPLE_BOSS_KEY_CHEST, - RC_FOREST_TEMPLE_FLOORMASTER_CHEST, - RC_FOREST_TEMPLE_BOW_CHEST, - RC_FOREST_TEMPLE_RED_POE_CHEST, - RC_FOREST_TEMPLE_BLUE_POE_CHEST, - RC_FOREST_TEMPLE_BASEMENT_CHEST, - RC_FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_GS_FIRST_ROOM, - RC_FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_GS_LOBBY, - RC_FOREST_TEMPLE_GS_BASEMENT, - RC_FOREST_TEMPLE_COURTYARD_RIGHT_HEART, - RC_FOREST_TEMPLE_COURTYARD_LEFT_HEART, - RC_FOREST_TEMPLE_WELL_WEST_HEART, - RC_FOREST_TEMPLE_WELL_EAST_HEART, - }, - { - // MQ Locations - RC_FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST, - RC_FOREST_TEMPLE_MQ_WOLFOS_CHEST, - RC_FOREST_TEMPLE_MQ_BOW_CHEST, - RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST, - RC_FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST, - RC_FOREST_TEMPLE_MQ_WELL_CHEST, - RC_FOREST_TEMPLE_MQ_MAP_CHEST, - RC_FOREST_TEMPLE_MQ_COMPASS_CHEST, - RC_FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST, - RC_FOREST_TEMPLE_MQ_BASEMENT_CHEST, - RC_FOREST_TEMPLE_MQ_REDEAD_CHEST, - RC_FOREST_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY, - RC_FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM, - RC_FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD, - RC_FOREST_TEMPLE_MQ_GS_WELL, - RC_FOREST_TEMPLE_MQ_COURTYARD_RIGHT_HEART, - RC_FOREST_TEMPLE_MQ_COURTYARD_MIDDLE_HEART, - RC_FOREST_TEMPLE_MQ_COURTYARD_LEFT_HEART, - RC_FOREST_TEMPLE_MQ_WELL_WEST_HEART, - RC_FOREST_TEMPLE_MQ_WELL_MIDDLE_HEART, - RC_FOREST_TEMPLE_MQ_WELL_EAST_HEART, - }, - { - // Vanilla Pots - RC_FOREST_TEMPLE_LOBBY_POT_1, - RC_FOREST_TEMPLE_LOBBY_POT_2, - RC_FOREST_TEMPLE_LOBBY_POT_3, - RC_FOREST_TEMPLE_LOBBY_POT_4, - RC_FOREST_TEMPLE_LOBBY_POT_5, - RC_FOREST_TEMPLE_LOBBY_POT_6, - RC_FOREST_TEMPLE_LOWER_STALFOS_POT_1, - RC_FOREST_TEMPLE_LOWER_STALFOS_POT_2, - RC_FOREST_TEMPLE_GREEN_POE_POT_1, - RC_FOREST_TEMPLE_GREEN_POE_POT_2, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_1, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_2, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_3, - RC_FOREST_TEMPLE_UPPER_STALFOS_POT_4, - RC_FOREST_TEMPLE_BLUE_POE_POT_1, - RC_FOREST_TEMPLE_BLUE_POE_POT_2, - RC_FOREST_TEMPLE_BLUE_POE_POT_3, - RC_FOREST_TEMPLE_FROZEN_EYE_POT_1, - RC_FOREST_TEMPLE_FROZEN_EYE_POT_2, - }, - { - // MQ Pots - RC_FOREST_TEMPLE_MQ_LOBBY_POT_1, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_2, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_3, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_4, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_5, - RC_FOREST_TEMPLE_MQ_LOBBY_POT_6, - RC_FOREST_TEMPLE_MQ_WOLFOS_POT_1, - RC_FOREST_TEMPLE_MQ_WOLFOS_POT_2, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_1, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_2, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_3, - RC_FOREST_TEMPLE_MQ_UPPER_STALFOS_POT_4, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_1, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_2, - RC_FOREST_TEMPLE_MQ_BLUE_POE_POT_3, - RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_1, - RC_FOREST_TEMPLE_MQ_GREEN_POE_POT_2, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_1, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_2, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_3, - RC_FOREST_TEMPLE_MQ_BASEMENT_POT_4, - }, - {}, - { - // Boss Room Locations - RC_FOREST_TEMPLE_PHANTOM_GANON_HEART, - RC_PHANTOM_GANON, - }); + RG_FOREST_TEMPLE_SMALL_KEY, RG_FOREST_TEMPLE_KEY_RING, RG_FOREST_TEMPLE_BOSS_KEY, RA_FOREST_TEMPLE, 5, 6, RSK_MQ_FOREST_TEMPLE); dungeonList[FIRE_TEMPLE] = DungeonInfo("Fire Temple", RHT_FIRE_TEMPLE, RG_FIRE_TEMPLE_MAP, RG_FIRE_TEMPLE_COMPASS, - RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5, RSK_MQ_FIRE_TEMPLE, - { - // Vanilla Locations - RC_FIRE_TEMPLE_NEAR_BOSS_CHEST, - RC_FIRE_TEMPLE_FLARE_DANCER_CHEST, - RC_FIRE_TEMPLE_BOSS_KEY_CHEST, - RC_FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, - RC_FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST, - RC_FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST, - RC_FIRE_TEMPLE_SCARECROW_CHEST, - RC_FIRE_TEMPLE_MAP_CHEST, - RC_FIRE_TEMPLE_COMPASS_CHEST, - RC_FIRE_TEMPLE_HIGHEST_GORON_CHEST, - RC_FIRE_TEMPLE_MEGATON_HAMMER_CHEST, - RC_FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM, - RC_FIRE_TEMPLE_GS_BOSS_KEY_LOOP, - RC_FIRE_TEMPLE_GS_BOULDER_MAZE, - RC_FIRE_TEMPLE_GS_SCARECROW_TOP, - RC_FIRE_TEMPLE_GS_SCARECROW_CLIMB, - RC_FIRE_TEMPLE_FIRE_PILLAR_LEFT_HEART, - RC_FIRE_TEMPLE_FIRE_PILLAR_RIGHT_HEART, - RC_FIRE_TEMPLE_FIRE_PILLAR_BACK_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_LEFT_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_RIGHT_HEART, - RC_FIRE_TEMPLE_EAST_CENTRAL_MIDDLE_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_EAST_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_WEST_HEART, - RC_FIRE_TEMPLE_FIRE_WALL_EXIT_HEART, - }, - { - // MQ Locations - RC_FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST, - RC_FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST, - RC_FIRE_TEMPLE_MQ_COMPASS_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST, - RC_FIRE_TEMPLE_MQ_CHEST_ON_FIRE, - RC_FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST, - RC_FIRE_TEMPLE_MQ_MAP_CHEST, - RC_FIRE_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST, - RC_FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST, - RC_FIRE_TEMPLE_MQ_FREESTANDING_KEY, - RC_FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_MAZE, - RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER, - RC_FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR, - RC_FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM, - RC_FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LEFT_HEART, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_RIGHT_HEART, - RC_FIRE_TEMPLE_MQ_FIRE_PILLAR_LOWER_HEART, - RC_FIRE_TEMPLE_MQ_LOOP_STALFOS_SUN_FAIRY, - RC_FIRE_TEMPLE_MQ_LOOP_KNUCKLE_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_FIRE_TEMPLE_NEAR_BOSS_POT_1, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_2, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_3, - RC_FIRE_TEMPLE_NEAR_BOSS_POT_4, - RC_FIRE_TEMPLE_BIG_LAVA_POT_1, - RC_FIRE_TEMPLE_BIG_LAVA_POT_2, - RC_FIRE_TEMPLE_BIG_LAVA_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_1, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_2, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_LEFT_POT_4, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_1, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_2, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_3, - RC_FIRE_TEMPLE_FLAME_MAZE_RIGHT_POT_4, - }, - { - // MQ Pots - RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_1, - RC_FIRE_TEMPLE_MQ_ENTRANCE_POT_2, - RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_1, - RC_FIRE_TEMPLE_MQ_OUTSIDE_BOSS_POT_2, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_NORTH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_HIGH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_ROOM_SOUTH_POT, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_1, - RC_FIRE_TEMPLE_MQ_LAVA_TORCH_POT_2, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_1, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_2, - RC_FIRE_TEMPLE_MQ_ABOVE_LAVA_POT_3, - RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_1, - RC_FIRE_TEMPLE_MQ_FLAME_WALL_POT_2, - RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_SOUTH_POT, - RC_FIRE_TEMPLE_MQ_PAST_FIRE_MAZE_NORTH_POT, - RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHMOST_POT, - RC_FIRE_TEMPLE_MQ_FIRE_MAZE_NORTHWEST_POT, - RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_WEST_POT, - RC_FIRE_TEMPLE_MQ_SOUTH_FIRE_MAZE_EAST_POT, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_1, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_2, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_3, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_4, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_5, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_6, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_7, - RC_FIRE_TEMPLE_MQ_BEFORE_MINI_BOSS_POT_8, - }, - {}, - { - // Boos Room Locations - RC_FIRE_TEMPLE_VOLVAGIA_HEART, - RC_VOLVAGIA, - }); + RG_FIRE_TEMPLE_SMALL_KEY, RG_FIRE_TEMPLE_KEY_RING, RG_FIRE_TEMPLE_BOSS_KEY, RA_FIRE_TEMPLE, 8, 5, RSK_MQ_FIRE_TEMPLE); dungeonList[WATER_TEMPLE] = DungeonInfo("Water Temple", RHT_WATER_TEMPLE, RG_WATER_TEMPLE_MAP, RG_WATER_TEMPLE_COMPASS, - RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2, RSK_MQ_WATER_TEMPLE, - { - // Vanilla Locations - RC_WATER_TEMPLE_MAP_CHEST, - RC_WATER_TEMPLE_COMPASS_CHEST, - RC_WATER_TEMPLE_TORCHES_CHEST, - RC_WATER_TEMPLE_DRAGON_CHEST, - RC_WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST, - RC_WATER_TEMPLE_CENTRAL_PILLAR_CHEST, - RC_WATER_TEMPLE_CRACKED_WALL_CHEST, - RC_WATER_TEMPLE_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_LONGSHOT_CHEST, - RC_WATER_TEMPLE_RIVER_CHEST, - RC_WATER_TEMPLE_GS_BEHIND_GATE, - RC_WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM, - RC_WATER_TEMPLE_GS_CENTRAL_PILLAR, - RC_WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_GS_RIVER, - RC_WATER_TEMPLE_RIVER_HEART_1, - RC_WATER_TEMPLE_RIVER_HEART_2, - RC_WATER_TEMPLE_RIVER_HEART_3, - RC_WATER_TEMPLE_RIVER_HEART_4, - }, - { - // MQ Locations - RC_WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST, - RC_WATER_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_WATER_TEMPLE_MQ_LONGSHOT_CHEST, - RC_WATER_TEMPLE_MQ_COMPASS_CHEST, - RC_WATER_TEMPLE_MQ_MAP_CHEST, - RC_WATER_TEMPLE_MQ_FREESTANDING_KEY, - RC_WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH, - RC_WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA, - RC_WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY, - RC_WATER_TEMPLE_MQ_GS_RIVER, - RC_WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH, - RC_WATER_TEMPLE_MQ_DARK_LINK_PILAR_SUN_FAIRY, - RC_WATER_TEMPLE_MQ_DARK_LINK_LEFT_STORM_FAIRY, - RC_WATER_TEMPLE_MQ_DARK_LINK_RIGHT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_1, - RC_WATER_TEMPLE_MAIN_LEVEL_2_POT_2, - RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_1, - RC_WATER_TEMPLE_MAIN_LEVEL_1_POT_2, - RC_WATER_TEMPLE_TORCH_POT_1, - RC_WATER_TEMPLE_TORCH_POT_2, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_1, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_2, - RC_WATER_TEMPLE_NEAR_COMPASS_POT_3, - RC_WATER_TEMPLE_CENTRAL_BOW_POT_1, - RC_WATER_TEMPLE_CENTRAL_BOW_POT_2, - RC_WATER_TEMPLE_BEHIND_GATE_POT_1, - RC_WATER_TEMPLE_BEHIND_GATE_POT_2, - RC_WATER_TEMPLE_BEHIND_GATE_POT_3, - RC_WATER_TEMPLE_BEHIND_GATE_POT_4, - RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_1, - RC_WATER_TEMPLE_BASEMENT_BLOCK_PUZZLE_POT_2, - RC_WATER_TEMPLE_RIVER_POT_1, - RC_WATER_TEMPLE_RIVER_POT_2, - RC_WATER_TEMPLE_LIKE_LIKE_POT_1, - RC_WATER_TEMPLE_LIKE_LIKE_POT_2, - RC_WATER_TEMPLE_BOSS_KEY_POT_1, - RC_WATER_TEMPLE_BOSS_KEY_POT_2, - }, - { - // MQ Pots - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_WEST_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SOUTH_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_HALLWAY_SE_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_SOUTH_POT, - RC_WATER_TEMPLE_MQ_LIZALFOS_CAGE_NORTH_POT, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_1, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_2, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_A_POT_3, - RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_1, - RC_WATER_TEMPLE_MQ_BEFORE_DARK_LINK_POT_2, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_MIDDLE_POT, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_SOUTH_POT, - RC_WATER_TEMPLE_MQ_STALFOS_PIT_NORTH_POT, - RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_1, - RC_WATER_TEMPLE_MQ_AFTER_DARK_LINK_POT_2, - RC_WATER_TEMPLE_MQ_RIVER_POT_1, - RC_WATER_TEMPLE_MQ_RIVER_POT_2, - RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_1, - RC_WATER_TEMPLE_MQ_MINI_DODONGO_POT_2, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_1, - RC_WATER_TEMPLE_MQ_STORAGE_ROOM_B_POT_2, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_1, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_2, - RC_WATER_TEMPLE_MQ_GS_STORAGE_ROOM_POT_3, - RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_1, - RC_WATER_TEMPLE_MQ_LOWER_TORCHES_POT_2, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_1, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_2, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_3, - RC_WATER_TEMPLE_MQ_LOWEST_GS_POT_4, - RC_WATER_TEMPLE_MQ_BOSS_KEY_POT, - }, - {}, - { - // Boss Room Locations - RC_WATER_TEMPLE_MORPHA_HEART, - RC_MORPHA, - }); + RG_WATER_TEMPLE_SMALL_KEY, RG_WATER_TEMPLE_KEY_RING, RG_WATER_TEMPLE_BOSS_KEY, RA_WATER_TEMPLE, 6, 2, RSK_MQ_WATER_TEMPLE); dungeonList[SPIRIT_TEMPLE] = DungeonInfo("Spirit Temple", RHT_SPIRIT_TEMPLE, RG_SPIRIT_TEMPLE_MAP, RG_SPIRIT_TEMPLE_COMPASS, - RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7, RSK_MQ_SPIRIT_TEMPLE, - { - // Vanilla Locations - RC_SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST, - RC_SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST, - RC_SPIRIT_TEMPLE_COMPASS_CHEST, - RC_SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST, - RC_SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MAP_CHEST, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST, - RC_SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST, - RC_SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST, - RC_SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST, - RC_SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST, - RC_SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_BOSS_KEY_CHEST, - RC_SPIRIT_TEMPLE_TOPMOST_CHEST, - RC_SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM, - RC_SPIRIT_TEMPLE_GS_BOULDER_ROOM, - RC_SPIRIT_TEMPLE_GS_LOBBY, - RC_SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM, - RC_SPIRIT_TEMPLE_GS_METAL_FENCE, - RC_SPIRIT_TEMPLE_ADULT_CLIMB_LEFT_HEART, - RC_SPIRIT_TEMPLE_ADULT_CLIMB_RIGHT_HEART, - RC_SPIRIT_TEMPLE_BOULDER_ROOM_SUN_FAIRY, - RC_SPIRIT_TEMPLE_ARMOS_ROOM_SUN_FAIRY, - }, - { - // MQ Locations - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST, - RC_SPIRIT_TEMPLE_MQ_MAP_CHEST, - RC_SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST, - RC_SPIRIT_TEMPLE_MQ_COMPASS_CHEST, - RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST, - RC_SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST, - RC_SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST, - RC_SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST, - RC_SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM, - RC_SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM, - RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST, - RC_SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH, - RC_SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM, - RC_SPIRIT_TEMPLE_MQ_CHILD_LEFT_HEART, - RC_SPIRIT_TEMPLE_MQ_CHILD_RIGHT_HEART, - RC_SPIRIT_TEMPLE_MQ_DINALFOS_ROOM_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_SPIRIT_TEMPLE_LOBBY_POT_1, - RC_SPIRIT_TEMPLE_LOBBY_POT_2, - RC_SPIRIT_TEMPLE_ANUBIS_POT_1, - RC_SPIRIT_TEMPLE_ANUBIS_POT_2, - RC_SPIRIT_TEMPLE_ANUBIS_POT_3, - RC_SPIRIT_TEMPLE_ANUBIS_POT_4, - RC_SPIRIT_TEMPLE_CHILD_CLIMB_POT_1, - RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_1, - RC_SPIRIT_TEMPLE_AFTER_SUN_BLOCK_POT_2, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_1, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_2, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_3, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_4, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_5, - RC_SPIRIT_TEMPLE_CENTRAL_CHAMBER_POT_6, - RC_SPIRIT_TEMPLE_BEAMOS_HALL_POT_1, - }, - { - // MQ Pots - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_1, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_2, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_3, - RC_SPIRIT_TEMPLE_MQ_ENTRANCE_POT_4, - RC_SPIRIT_TEMPLE_MQ_CHILD_SLUGMA_POT, - RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_1, - RC_SPIRIT_TEMPLE_MQ_CHILD_GIBDO_POT_2, - RC_SPIRIT_TEMPLE_MQ_CHILD_LIKE_LIKE_POT, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_1, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_2, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_3, - RC_SPIRIT_TEMPLE_MQ_CHILD_STALFOS_POT_4, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_CENTER_EAST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_3F_EAST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_3F_WEST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_WEST_POT, - RC_SPIRIT_TEMPLE_MQ_STATUE_2F_EASTMOST_POT, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_1, - RC_SPIRIT_TEMPLE_MQ_SUN_BLOCKS_POT_2, - RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_1, - RC_SPIRIT_TEMPLE_MQ_LONG_CLIMB_POT_2, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_1, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_2, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_3, - RC_SPIRIT_TEMPLE_MQ_BIG_MIRROR_POT_4, - RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_1, - RC_SPIRIT_TEMPLE_MQ_BEFORE_MIRROR_POT_2, - RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_1, - RC_SPIRIT_TEMPLE_MQ_EARLY_ADULT_POT_2, - }, - { - // Shared Locations - RC_SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST, - RC_SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST, - }, - { - // Boss Room Locations - RC_SPIRIT_TEMPLE_TWINROVA_HEART, - RC_TWINROVA, - }); + RG_SPIRIT_TEMPLE_SMALL_KEY, RG_SPIRIT_TEMPLE_KEY_RING, RG_SPIRIT_TEMPLE_BOSS_KEY, RA_SPIRIT_TEMPLE, 5, 7, RSK_MQ_SPIRIT_TEMPLE); dungeonList[SHADOW_TEMPLE] = DungeonInfo("Shadow Temple", RHT_SHADOW_TEMPLE, RG_SHADOW_TEMPLE_MAP, RG_SHADOW_TEMPLE_COMPASS, - RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6, RSK_MQ_SHADOW_TEMPLE, - { - // Vanilla Locations - RC_SHADOW_TEMPLE_MAP_CHEST, - RC_SHADOW_TEMPLE_HOVER_BOOTS_CHEST, - RC_SHADOW_TEMPLE_COMPASS_CHEST, - RC_SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST, - RC_SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST, - RC_SHADOW_TEMPLE_WIND_HINT_CHEST, - RC_SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST, - RC_SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST, - RC_SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST, - RC_SHADOW_TEMPLE_BOSS_KEY_CHEST, - RC_SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST, - RC_SHADOW_TEMPLE_FREESTANDING_KEY, - RC_SHADOW_TEMPLE_GS_SINGLE_GIANT_POT, - RC_SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM, - RC_SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT, - RC_SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM, - RC_SHADOW_TEMPLE_GS_NEAR_SHIP, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_LEFT_HEART, - RC_SHADOW_TEMPLE_INVISIBLE_BLADES_RIGHT_HEART, - RC_SHADOW_TEMPLE_SCARECROW_NORTH_HEART, - RC_SHADOW_TEMPLE_SCARECROW_SOUTH_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_LEFT_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_UPPER_RIGHT_HEART, - RC_SHADOW_TEMPLE_AFTER_SHIP_LOWER_HEART, - RC_SHADOW_TEMPLE_BEAMOS_STORM_FAIRY, - RC_SHADOW_TEMPLE_PIT_STORM_FAIRY, - RC_SHADOW_TEMPLE_WIND_HINT_SUN_FAIRY, - }, - { - // MQ Locations - RC_SHADOW_TEMPLE_MQ_COMPASS_CHEST, - RC_SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST, - RC_SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST, - RC_SHADOW_TEMPLE_MQ_MAP_CHEST, - RC_SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST, - RC_SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST, - RC_SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST, - RC_SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST, - RC_SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST, - RC_SHADOW_TEMPLE_MQ_WIND_HINT_CHEST, - RC_SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST, - RC_SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST, - RC_SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST, - RC_SHADOW_TEMPLE_MQ_FREESTANDING_KEY, - RC_SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM, - RC_SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM, - RC_SHADOW_TEMPLE_MQ_GS_AFTER_WIND, - RC_SHADOW_TEMPLE_MQ_GS_AFTER_SHIP, - RC_SHADOW_TEMPLE_MQ_GS_NEAR_BOSS, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_LEFT_HEART, - RC_SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_RIGHT_HEART, - RC_SHADOW_TEMPLE_MQ_SCARECROW_NORTH_HEART, - RC_SHADOW_TEMPLE_MQ_SCARECROW_SOUTH_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_LEFT_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_UPPER_RIGHT_HEART, - RC_SHADOW_TEMPLE_MQ_AFTER_SHIP_LOWER_HEART, - RC_SHADOW_TEMPLE_MQ_BEAMOS_STORM_FAIRY, - RC_SHADOW_TEMPLE_MQ_PIT_STORM_FAIRY, - RC_SHADOW_TEMPLE_MQ_WIND_HINT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_SHADOW_TEMPLE_NEAR_DEAD_HAND_POT_1, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_1, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_2, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_3, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_4, - RC_SHADOW_TEMPLE_WHISPERING_WALLS_POT_5, - RC_SHADOW_TEMPLE_MAP_CHEST_POT_1, - RC_SHADOW_TEMPLE_MAP_CHEST_POT_2, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_1, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_2, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_3, - RC_SHADOW_TEMPLE_FALLING_SPIKES_POT_4, - RC_SHADOW_TEMPLE_AFTER_WIND_POT_1, - RC_SHADOW_TEMPLE_AFTER_WIND_POT_2, - RC_SHADOW_TEMPLE_SPIKE_WALLS_POT_1, - RC_SHADOW_TEMPLE_FLOORMASTER_POT_1, - RC_SHADOW_TEMPLE_FLOORMASTER_POT_2, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_1, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_2, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_3, - RC_SHADOW_TEMPLE_AFTER_BOAT_POT_4, - }, - { - // MQ Pots - RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_1, - RC_SHADOW_TEMPLE_MQ_WHISPERING_WALLS_POT_2, - RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_1, - RC_SHADOW_TEMPLE_MQ_ENTRANCE_REDEAD_POT_2, - RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_WEST_POT, - RC_SHADOW_TEMPLE_MQ_LOWER_UMBRELLA_EAST_POT, - RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_SOUTH_POT, - RC_SHADOW_TEMPLE_MQ_UPPER_UMBRELLA_NORTH_POT, - RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_1, - RC_SHADOW_TEMPLE_MQ_BEFORE_BOAT_POT_2, - RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_WEST_POT, - RC_SHADOW_TEMPLE_MQ_BEFORE_CHASM_EAST_POT, - RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_WEST_POT, - RC_SHADOW_TEMPLE_MQ_AFTER_CHASM_EAST_POT, - RC_SHADOW_TEMPLE_MQ_SPIKE_BARICADE_POT, - RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_1, - RC_SHADOW_TEMPLE_MQ_DEAD_HAND_POT_2, - }, - {}, - { - // Boss Room Locations - RC_SHADOW_TEMPLE_BONGO_BONGO_HEART, - RC_BONGO_BONGO, - }); + RG_SHADOW_TEMPLE_SMALL_KEY, RG_SHADOW_TEMPLE_KEY_RING, RG_SHADOW_TEMPLE_BOSS_KEY, RA_SHADOW_TEMPLE, 5, 6, RSK_MQ_SHADOW_TEMPLE); dungeonList[BOTTOM_OF_THE_WELL] = DungeonInfo( "Bottom of the Well", RHT_BOTTOM_OF_THE_WELL, RG_BOTTOM_OF_THE_WELL_MAP, RG_BOTTOM_OF_THE_WELL_COMPASS, - RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL, - { - // Vanilla Locations - RC_BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST, - RC_BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST, - RC_BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST, - RC_BOTTOM_OF_THE_WELL_COMPASS_CHEST, - RC_BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST, - RC_BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST, - RC_BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST, - RC_BOTTOM_OF_THE_WELL_INVISIBLE_CHEST, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST, - RC_BOTTOM_OF_THE_WELL_MAP_CHEST, - RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST, - RC_BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST, - RC_BOTTOM_OF_THE_WELL_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE, - RC_BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_LEFT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_LEFT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_MIDDLE_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_BACK_RIGHT_RUPEE, - RC_BOTTOM_OF_THE_WELL_BASEMENT_PLATFORM_RIGHT_RUPEE, - RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_FRONT_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_COFFIN_ROOM_MIDDLE_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_BASEMENT_SUN_FAIRY, - }, - { - // MQ Locations - RC_BOTTOM_OF_THE_WELL_MQ_MAP_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST, - RC_BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY, - RC_BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT, - RC_BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM, - RC_BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM, - RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_FRONT_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BOMB_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BOMB_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_COFFIN_ROOM_MIDDLE_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_FRONT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_LEFT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_HALLWAY_RIGHT_HEART, - RC_BOTTOM_OF_THE_WELL_MQ_CELL_SUN_FAIRY, - RC_BOTTOM_OF_THE_WELL_MQ_BASEMENT_SUN_FAIRY, - }, - { - // Vanilla Pots - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_1, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_2, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_3, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_4, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_5, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_6, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_7, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_8, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_9, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_10, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_11, - RC_BOTTOM_OF_THE_WELL_BASEMENT_POT_12, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_1, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_2, - RC_BOTTOM_OF_THE_WELL_LEFT_SIDE_POT_3, - RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_1, - RC_BOTTOM_OF_THE_WELL_NEAR_ENTRANCE_POT_2, - RC_BOTTOM_OF_THE_WELL_FIRE_KEESE_POT_1, - RC_BOTTOM_OF_THE_WELL_UNDERWATER_POT, - }, - { - // MQ Pots - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_1, - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_2, - RC_BOTTOM_OF_THE_WELL_MQ_INNER_LOBBY_POT_3, - RC_BOTTOM_OF_THE_WELL_MQ_OUTER_LOBBY_POT, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_1, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_2, - RC_BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_POT_3, - }, - {}, {}); + RG_BOTTOM_OF_THE_WELL_SMALL_KEY, RG_BOTTOM_OF_THE_WELL_KEY_RING, RG_NONE, RA_BOTTOM_OF_THE_WELL, 3, 2, RSK_MQ_BOTTOM_OF_THE_WELL); dungeonList[ICE_CAVERN] = DungeonInfo("Ice Cavern", RHT_ICE_CAVERN, RG_ICE_CAVERN_MAP, RG_ICE_CAVERN_COMPASS, - RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN, - { - // Vanilla Locations - RC_ICE_CAVERN_MAP_CHEST, - RC_ICE_CAVERN_COMPASS_CHEST, - RC_ICE_CAVERN_IRON_BOOTS_CHEST, - RC_ICE_CAVERN_FREESTANDING_POH, - RC_ICE_CAVERN_GS_PUSH_BLOCK_ROOM, - RC_ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM, - RC_ICE_CAVERN_GS_HEART_PIECE_ROOM, - RC_ICE_CAVERN_LOBBY_RUPEE, - RC_ICE_CAVERN_MAP_ROOM_LEFT_HEART, - RC_ICE_CAVERN_MAP_ROOM_MIDDLE_HEART, - RC_ICE_CAVERN_MAP_ROOM_RIGHT_HEART, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_1, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_2, - RC_ICE_CAVERN_SLIDING_BLOCK_RUPEE_3, - RC_ICE_CAVERN_ENTRANCE_STORMS_FAIRY, - }, - { - // MQ Locations - RC_ICE_CAVERN_MQ_IRON_BOOTS_CHEST, - RC_ICE_CAVERN_MQ_COMPASS_CHEST, - RC_ICE_CAVERN_MQ_MAP_CHEST, - RC_ICE_CAVERN_MQ_FREESTANDING_POH, - RC_ICE_CAVERN_MQ_GS_SCARECROW, - RC_ICE_CAVERN_MQ_GS_ICE_BLOCK, - RC_ICE_CAVERN_MQ_GS_RED_ICE, - }, - { - // Vanilla Pots - RC_ICE_CAVERN_HALL_POT_1, - RC_ICE_CAVERN_HALL_POT_2, - RC_ICE_CAVERN_SPINNING_BLADE_POT_1, - RC_ICE_CAVERN_SPINNING_BLADE_POT_2, - RC_ICE_CAVERN_SPINNING_BLADE_POT_3, - RC_ICE_CAVERN_NEAR_END_POT_1, - RC_ICE_CAVERN_NEAR_END_POT_2, - RC_ICE_CAVERN_FROZEN_POT_1, - }, - { - // MQ Pots - RC_ICE_CAVERN_MQ_ENTRANCE_POT, - RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_1, - RC_ICE_CAVERN_MQ_FIRST_CRYSTAL_POT_2, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_1, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_2, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_3, - RC_ICE_CAVERN_MQ_EARLY_WOLFOS_POT_4, - RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_1, - RC_ICE_CAVERN_MQ_PUSH_BLOCK_POT_2, - RC_ICE_CAVERN_MQ_COMPASS_POT_1, - RC_ICE_CAVERN_MQ_COMPASS_POT_2, - }, - { - // Shared Locations - RC_SHEIK_IN_ICE_CAVERN, - }, - {}); + RG_NONE, RG_NONE, RG_NONE, RA_ICE_CAVERN, 0, 0, RSK_MQ_ICE_CAVERN); dungeonList[GERUDO_TRAINING_GROUND] = DungeonInfo("Gerudo Training Ground", RHT_GERUDO_TRAINING_GROUND, RG_NONE, RG_NONE, - RG_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG, - { - // Vanilla Locations - RC_GERUDO_TRAINING_GROUND_LOBBY_LEFT_CHEST, - RC_GERUDO_TRAINING_GROUND_LOBBY_RIGHT_CHEST, - RC_GERUDO_TRAINING_GROUND_STALFOS_CHEST, - RC_GERUDO_TRAINING_GROUND_BEAMOS_CHEST, - RC_GERUDO_TRAINING_GROUND_HIDDEN_CEILING_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_PATH_FINAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_CENTRAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MAZE_RIGHT_SIDE_CHEST, - RC_GERUDO_TRAINING_GROUND_UNDERWATER_SILVER_RUPEE_CHEST, - RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_CLEAR_CHEST, - RC_GERUDO_TRAINING_GROUND_HAMMER_ROOM_SWITCH_CHEST, - RC_GERUDO_TRAINING_GROUND_EYE_STATUE_CHEST, - RC_GERUDO_TRAINING_GROUND_NEAR_SCARECROW_CHEST, - RC_GERUDO_TRAINING_GROUND_BEFORE_HEAVY_BLOCK_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_HEAVY_BLOCK_FOURTH_CHEST, - RC_GERUDO_TRAINING_GROUND_FREESTANDING_KEY, - RC_GERUDO_TRAINING_GROUND_BEAMOS_SOUTH_HEART, - RC_GERUDO_TRAINING_GROUND_BEAMOS_EAST_HEART, - RC_GERUDO_TRAINING_GROUND_ENTRANCE_STORMS_FAIRY, - }, - { - // MQ Locations - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_FIRST_IRON_KNUCKLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_BEFORE_HEAVY_BLOCK_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_EYE_STATUE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_FLAME_CIRCLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_SECOND_IRON_KNUCKLE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_DINOLFOS_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_ICE_ARROWS_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_CENTRAL_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_FIRST_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_RIGHT_SIDE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_THIRD_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_MAZE_PATH_SECOND_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_HIDDEN_CEILING_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_UNDERWATER_SILVER_RUPEE_CHEST, - RC_GERUDO_TRAINING_GROUND_MQ_HEAVY_BLOCK_CHEST, - }, - {}, - { - // MQ Pots - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_1, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_LEFT_POT_2, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_1, - RC_GERUDO_TRAINING_GROUND_MQ_LOBBY_RIGHT_POT_2, - }, {}, {}); + RG_GERUDO_TRAINING_GROUND_SMALL_KEY, RG_GERUDO_TRAINING_GROUND_KEY_RING, RG_NONE, RA_GERUDO_TRAINING_GROUND, 9, 3, RSK_MQ_GTG); dungeonList[GANONS_CASTLE] = DungeonInfo("Ganon's Castle", RHT_GANONS_CASTLE, RG_NONE, RG_NONE, RG_GANONS_CASTLE_SMALL_KEY, - RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE, - { - // Vanilla Locations - RC_GANONS_CASTLE_FOREST_TRIAL_CHEST, - RC_GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST, - RC_GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST, - RC_GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST, - RC_GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST, - RC_GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST, - RC_GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST, - RC_GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST, - RC_GANONS_CASTLE_DEKU_SCRUB_LEFT, - RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT, - RC_GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT, - RC_GANONS_CASTLE_DEKU_SCRUB_RIGHT, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_1, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_2, - RC_GANONS_CASTLE_SHADOW_TRIAL_HEART_3, - RC_GANONS_CASTLE_FIRE_TRIAL_HEART, - RC_GANONS_CASTLE_SPIRIT_TRIAL_HEART, - RC_GANONS_CASTLE_SCRUBS_FAIRY_1, - RC_GANONS_CASTLE_SCRUBS_FAIRY_2, - RC_GANONS_CASTLE_SCRUBS_FAIRY_3, - RC_GANONS_CASTLE_SCRUBS_FAIRY_4, - RC_GANONS_CASTLE_SCRUBS_FAIRY_5, - RC_GANONS_CASTLE_SCRUBS_FAIRY_6, - RC_GANONS_CASTLE_SCRUBS_FAIRY_7, - RC_GANONS_CASTLE_SCRUBS_FAIRY_8, - RC_GANONS_CASTLE_SPIRIT_TRIAL_SUN_FAIRY, - }, - { - // MQ Locations - RC_GANONS_CASTLE_MQ_WATER_TRIAL_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT, - RC_GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_HEART, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_RIGHT_HEART, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_LEFT_HEART, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_1, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_2, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_3, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_4, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_5, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_6, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_7, - RC_GANONS_CASTLE_MQ_SCRUBS_FAIRY_8, - }, - { - // Vanilla Pots - RC_GANONS_CASTLE_FOREST_TRIAL_POT_1, - RC_GANONS_CASTLE_FOREST_TRIAL_POT_2, - RC_GANONS_CASTLE_FIRE_TRIAL_POT_1, - RC_GANONS_CASTLE_FIRE_TRIAL_POT_2, - RC_GANONS_CASTLE_WATER_TRIAL_POT_1, - RC_GANONS_CASTLE_WATER_TRIAL_POT_2, - RC_GANONS_CASTLE_WATER_TRIAL_POT_3, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_1, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_2, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_3, - RC_GANONS_CASTLE_SHADOW_TRIAL_POT_4, - RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_1, - RC_GANONS_CASTLE_SPIRIT_TRIAL_POT_2, - RC_GANONS_CASTLE_LIGHT_TRIAL_BOULDER_POT_1, - RC_GANONS_CASTLE_LIGHT_TRIAL_POT_1, - RC_GANONS_CASTLE_LIGHT_TRIAL_POT_2, - - // Shared Pots so in both vanilla and MQ - RC_GANONS_CASTLE_GANONS_TOWER_POT_1, - RC_GANONS_CASTLE_GANONS_TOWER_POT_2, - RC_GANONS_CASTLE_GANONS_TOWER_POT_3, - RC_GANONS_CASTLE_GANONS_TOWER_POT_4, - RC_GANONS_CASTLE_GANONS_TOWER_POT_5, - RC_GANONS_CASTLE_GANONS_TOWER_POT_6, - RC_GANONS_CASTLE_GANONS_TOWER_POT_7, - RC_GANONS_CASTLE_GANONS_TOWER_POT_8, - RC_GANONS_CASTLE_GANONS_TOWER_POT_9, - RC_GANONS_CASTLE_GANONS_TOWER_POT_10, - RC_GANONS_CASTLE_GANONS_TOWER_POT_11, - RC_GANONS_CASTLE_GANONS_TOWER_POT_12, - RC_GANONS_CASTLE_GANONS_TOWER_POT_13, - RC_GANONS_CASTLE_GANONS_TOWER_POT_14, - RC_GANONS_CASTLE_GANONS_TOWER_POT_15, - RC_GANONS_CASTLE_GANONS_TOWER_POT_16, - RC_GANONS_CASTLE_GANONS_TOWER_POT_17, - RC_GANONS_CASTLE_GANONS_TOWER_POT_18, - }, - { - // MQ Pots - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_FOREST_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_WATER_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_SHADOW_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_FIRE_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_LIGHT_TRIAL_POT_2, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_1, - RC_GANONS_CASTLE_MQ_SPIRIT_TRIAL_POT_2, - - // Shared Pots so in both vanilla and MQ - RC_GANONS_CASTLE_GANONS_TOWER_POT_1, - RC_GANONS_CASTLE_GANONS_TOWER_POT_2, - RC_GANONS_CASTLE_GANONS_TOWER_POT_3, - RC_GANONS_CASTLE_GANONS_TOWER_POT_4, - RC_GANONS_CASTLE_GANONS_TOWER_POT_5, - RC_GANONS_CASTLE_GANONS_TOWER_POT_6, - RC_GANONS_CASTLE_GANONS_TOWER_POT_7, - RC_GANONS_CASTLE_GANONS_TOWER_POT_8, - RC_GANONS_CASTLE_GANONS_TOWER_POT_9, - RC_GANONS_CASTLE_GANONS_TOWER_POT_10, - RC_GANONS_CASTLE_GANONS_TOWER_POT_11, - RC_GANONS_CASTLE_GANONS_TOWER_POT_12, - RC_GANONS_CASTLE_GANONS_TOWER_POT_13, - RC_GANONS_CASTLE_GANONS_TOWER_POT_14, - RC_GANONS_CASTLE_GANONS_TOWER_POT_15, - RC_GANONS_CASTLE_GANONS_TOWER_POT_16, - RC_GANONS_CASTLE_GANONS_TOWER_POT_17, - RC_GANONS_CASTLE_GANONS_TOWER_POT_18, - }, - { - // Shared Locations - RC_GANONS_TOWER_BOSS_KEY_CHEST, - RC_GANON, - }, - {}); + RG_GANONS_CASTLE_KEY_RING, RG_GANONS_CASTLE_BOSS_KEY, RA_GANONS_CASTLE, 2, 3, RSK_MQ_GANONS_CASTLE); } Dungeons::~Dungeons() = default; diff --git a/soh/soh/Enhancements/randomizer/dungeon.h b/soh/soh/Enhancements/randomizer/dungeon.h index c8ecd247e..5d26036eb 100644 --- a/soh/soh/Enhancements/randomizer/dungeon.h +++ b/soh/soh/Enhancements/randomizer/dungeon.h @@ -12,11 +12,7 @@ class DungeonInfo { public: DungeonInfo(std::string name_, RandomizerHintTextKey hintKey_, RandomizerGet map_, RandomizerGet compass_, RandomizerGet smallKey_, RandomizerGet keyRing_, RandomizerGet bossKey_, RandomizerArea area_, - uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_, - std::vector vanillaLocations_, std::vector mqLocations_, - std::vector vanillaPots_, std::vector mqPots_, - std::vector sharedLocations_, - std::vector bossRoomLocations_); + uint8_t vanillaKeyCount_, uint8_t mqKeyCount_, RandomizerSettingKey mqSetting_); DungeonInfo(); ~DungeonInfo(); @@ -43,7 +39,7 @@ class DungeonInfo { void PlaceVanillaBossKey() const; void PlaceVanillaSmallKeys() const; std::vector GetDungeonLocations() const; - std::vector GetEveryLocation() const; + std::vector locations; private: std::string name; @@ -60,12 +56,6 @@ class DungeonInfo { uint8_t mqKeyCount{}; bool masterQuest = false; bool hasKeyRing = false; - std::vector vanillaLocations; - std::vector mqLocations; - std::vector vanillaPots; - std::vector mqPots; - std::vector sharedLocations; - std::vector bossRoomLocations; }; typedef enum { @@ -79,8 +69,8 @@ typedef enum { SHADOW_TEMPLE, BOTTOM_OF_THE_WELL, ICE_CAVERN, - GANONS_CASTLE, - GERUDO_TRAINING_GROUND + GERUDO_TRAINING_GROUND, + GANONS_CASTLE } DungeonKey; class Dungeons { diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index cba64059a..da2281894 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -232,7 +232,7 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { if (rc == RC_UNKNOWN_CHECK) return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained()) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -250,7 +250,7 @@ void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t if (rc == RC_UNKNOWN_CHECK) return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained()) return; + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) return; SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); @@ -813,7 +813,10 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l case VB_GIVE_ITEM_FROM_CHEST: { EnBox* chest = va_arg(args, EnBox*); RandomizerCheck rc = OTRGlobals::Instance->gRandomizer->GetCheckFromActor(chest->dyna.actor.id, gPlayState->sceneNum, chest->dyna.actor.params); - + if (!OTRGlobals::Instance->gRandoContext->IsLocationShuffled(rc)) { + break; + } + // if this is a treasure chest game chest then set the appropriate rando inf RandomizerSetChestGameRandomizerInf(rc); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index dabfedac7..550f2b1af 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -5342,7 +5342,7 @@ typedef enum { //Scrubsanity settings (off, affordable, expensive, random) typedef enum { RO_SCRUBS_OFF, - RO_SCRUBS_MAJOR_ONLY, + RO_SCRUBS_ONE_TIME_ONLY, RO_SCRUBS_ALL, } RandoOptionScrubsanity;