From c5896c7efcec03a04e43fd10a6f3b277dfe79b66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Philip=20Dub=C3=A9?= <159546+serprex@users.noreply.github.com> Date: Mon, 22 Jun 2026 14:35:57 +0000 Subject: [PATCH] Combine HasBossSoul & CanOpenOverworldDoor into HasItem (#6795) --- libultraship | 2 +- .../dungeons/ganons_castle.cpp | 2 +- .../location_access/overworld/graveyard.cpp | 2 +- .../location_access/overworld/kakariko.cpp | 18 ++--- .../location_access/overworld/lake_hylia.cpp | 4 +- .../overworld/lon_lon_ranch.cpp | 6 +- .../location_access/overworld/market.cpp | 20 ++--- soh/soh/Enhancements/randomizer/logic.cpp | 78 ++++--------------- soh/soh/Enhancements/randomizer/logic.h | 2 - 9 files changed, 42 insertions(+), 92 deletions(-) diff --git a/libultraship b/libultraship index 1d98291404..2c63e7edef 160000 --- a/libultraship +++ b/libultraship @@ -1 +1 @@ -Subproject commit 1d9829140444268827a1369095bcc93518ff3b4d +Subproject commit 2c63e7edef577cd2a3726ce24dfedd7f088f12ae 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 3af0ffcad2..2124dcd93c 100644 --- a/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/dungeons/ganons_castle.cpp @@ -868,7 +868,7 @@ void RegionTable_Init_GanonsCastle() { areaTable[RR_GANONS_TOWER_GANONDORF_LAIR] = Region("Ganondorf's Lair", SCENE_GANONDORF_BOSS, {}, { //Locations - LOCATION(RC_GANONDORF_HINT, logic->HasBossSoul(RG_GANON_SOUL)), + LOCATION(RC_GANONDORF_HINT, logic->HasItem(RG_GANON_SOUL)), }, { //Exits ENTRANCE(RR_GANONS_CASTLE_ESCAPE, logic->CanKillEnemy(RE_GANONDORF)), diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp index 2ea38908fa..feeca7bd35 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/graveyard.cpp @@ -45,7 +45,7 @@ void RegionTable_Init_Graveyard() { ENTRANCE(RR_GRAVEYARD_COMPOSERS_GRAVE, logic->CanUse(RG_ZELDAS_LULLABY)), ENTRANCE(RR_GRAVEYARD_HEART_PIECE_GRAVE, (logic->IsAdult || logic->AtNight) && logic->HasItem(RG_POWER_BRACELET)), ENTRANCE(RR_GRAVEYARD_DAMPES_GRAVE, logic->IsAdult && logic->HasItem(RG_POWER_BRACELET)), - ENTRANCE(RR_GRAVEYARD_DAMPES_HOUSE, logic->IsAdult && logic->CanOpenOverworldDoor(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/), //TODO: This needs to be handled in ToD rework + ENTRANCE(RR_GRAVEYARD_DAMPES_HOUSE, logic->IsAdult && logic->HasItem(RG_DAMPES_HUT_KEY) /*|| logic->AtDampeTime*/), //TODO: This needs to be handled in ToD rework ENTRANCE(RR_KAKARIKO_VILLAGE, true), ENTRANCE(RR_GRAVEYARD_WARP_PAD_REGION, false), }); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp index dd40ac1ece..a00b88eede 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/kakariko.cpp @@ -75,14 +75,14 @@ void RegionTable_Init_Kakariko() { }, { //Exits ENTRANCE(RR_HYRULE_FIELD, true), - ENTRANCE(RR_KAK_CARPENTER_BOSS_HOUSE, logic->CanOpenOverworldDoor(RG_BOSS_HOUSE_KEY)), - ENTRANCE(RR_KAK_HOUSE_OF_SKULLTULA, logic->CanOpenOverworldDoor(RG_SKULLTULA_HOUSE_KEY)), - ENTRANCE(RR_KAK_IMPAS_HOUSE, logic->CanOpenOverworldDoor(RG_IMPAS_HOUSE_KEY)), - ENTRANCE(RR_KAK_WINDMILL_LOWER, logic->CanOpenOverworldDoor(RG_WINDMILL_KEY)), - ENTRANCE(RR_KAK_BAZAAR, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_BAZAAR_KEY)), - ENTRANCE(RR_KAK_SHOOTING_GALLERY, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_SHOOTING_GALLERY_KEY)), + ENTRANCE(RR_KAK_CARPENTER_BOSS_HOUSE, logic->HasItem(RG_BOSS_HOUSE_KEY)), + ENTRANCE(RR_KAK_HOUSE_OF_SKULLTULA, logic->HasItem(RG_SKULLTULA_HOUSE_KEY)), + ENTRANCE(RR_KAK_IMPAS_HOUSE, logic->HasItem(RG_IMPAS_HOUSE_KEY)), + ENTRANCE(RR_KAK_WINDMILL_LOWER, logic->HasItem(RG_WINDMILL_KEY)), + ENTRANCE(RR_KAK_BAZAAR, logic->IsAdult && logic->AtDay && logic->HasItem(RG_KAK_BAZAAR_KEY)), + ENTRANCE(RR_KAK_SHOOTING_GALLERY, logic->IsAdult && logic->AtDay && logic->HasItem(RG_KAK_SHOOTING_GALLERY_KEY)), ENTRANCE(RR_KAK_WELL, logic->IsAdult || logic->Get(LOGIC_DRAIN_WELL) || logic->CanUse(RG_IRON_BOOTS) || (ctx->GetTrickOption(RT_BOTTOM_OF_THE_WELL_NAVI_DIVE) && logic->IsChild && logic->HasItem(RG_BRONZE_SCALE) && logic->CanJumpslash())), - ENTRANCE(RR_KAK_POTION_SHOP, (logic->AtDay || logic->IsChild) && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY)), + ENTRANCE(RR_KAK_POTION_SHOP, (logic->AtDay || logic->IsChild) && logic->HasItem(RG_KAK_POTION_SHOP_KEY)), ENTRANCE(RR_KAK_REDEAD_GROTTO, logic->CanOpenBombGrotto()), ENTRANCE(RR_KAK_IMPAS_LEDGE, (logic->IsChild && logic->AtDay && logic->HasItem(RG_POWER_BRACELET)) || (logic->IsAdult && ctx->GetTrickOption(RT_VISIBLE_COLLISION))), ENTRANCE(RR_KAK_WATCHTOWER, logic->HasItem(RG_CLIMB) && (logic->IsAdult || logic->AtDay || logic->CanKillEnemy(RE_GOLD_SKULLTULA, ED_LONGSHOT) || (ctx->GetTrickOption(RT_KAK_TOWER_GS) && logic->CanJumpslashExceptHammer()))), @@ -139,14 +139,14 @@ void RegionTable_Init_Kakariko() { //Exits ENTRANCE(RR_KAKARIKO_VILLAGE, true), ENTRANCE(RR_KAK_OPEN_GROTTO, true), - ENTRANCE(RR_KAK_ODD_POTION_BUILDING, logic->IsAdult && logic->CanOpenOverworldDoor(RG_GRANNYS_POTION_SHOP_KEY)), + ENTRANCE(RR_KAK_ODD_POTION_BUILDING, logic->IsAdult && logic->HasItem(RG_GRANNYS_POTION_SHOP_KEY)), ENTRANCE(RR_KAK_BEHIND_POTION_SHOP, logic->HasItem(RG_CLIMB)), }); areaTable[RR_KAK_BEHIND_POTION_SHOP] = Region("Kak Behind Potion Shop", SCENE_KAKARIKO_VILLAGE, {}, {}, { //Exits ENTRANCE(RR_KAK_BACKYARD, true), - ENTRANCE(RR_KAK_POTION_SHOP, logic->IsAdult && logic->AtDay && logic->CanOpenOverworldDoor(RG_KAK_POTION_SHOP_KEY)), + ENTRANCE(RR_KAK_POTION_SHOP, logic->IsAdult && logic->AtDay && logic->HasItem(RG_KAK_POTION_SHOP_KEY)), //can ledgegrab fence to rooftop with hover boots, but that's more difficult than the unintuitive jump, so not including in default logic ENTRANCE(RR_KAK_ROOFTOP, ctx->GetTrickOption(RT_HOVER_BOOST_SIMPLE) && logic->CanUse(RG_HOVER_BOOTS) && logic->CanUse(RG_MEGATON_HAMMER) && logic->IsAdult), }); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp index 322592272d..de2ed72b82 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lake_hylia.cpp @@ -89,7 +89,7 @@ void RegionTable_Init_LakeHylia() { ENTRANCE(RR_LH_FROM_SHORTCUT, true), ENTRANCE(RR_LH_OWL_FLIGHT, logic->IsChild && (logic->HasItem(RG_SPEAK_DEKU) || logic->HasItem(RG_SPEAK_GERUDO) || logic->HasItem(RG_SPEAK_GORON) || logic->HasItem(RG_SPEAK_KOKIRI) || logic->HasItem(RG_SPEAK_HYLIAN) || logic->HasItem(RG_SPEAK_ZORA))), ENTRANCE(RR_LH_FISHING_ISLAND, ((logic->IsChild || logic->Get(LOGIC_WATER_TEMPLE_CLEAR)) && logic->HasItem(RG_BRONZE_SCALE)) || (logic->IsAdult && (logic->ReachScarecrow() || CanPlantBean(RR_LAKE_HYLIA, RG_LAKE_HYLIA_BEAN_SOUL)))), - ENTRANCE(RR_LH_LAB, logic->CanOpenOverworldDoor(RG_HYLIA_LAB_KEY)), + ENTRANCE(RR_LH_LAB, logic->HasItem(RG_HYLIA_LAB_KEY)), ENTRANCE(RR_LH_FROM_WATER_TEMPLE, true), ENTRANCE(RR_LH_GROTTO, logic->HasItem(RG_POWER_BRACELET) && (logic->IsAdult || logic->HasItem(RG_SPEAK_DEKU) || logic->HasItem(RG_SPEAK_GERUDO) || logic->HasItem(RG_SPEAK_GORON) || logic->HasItem(RG_SPEAK_KOKIRI) || logic->HasItem(RG_SPEAK_HYLIAN) || logic->HasItem(RG_SPEAK_ZORA))), }); @@ -113,7 +113,7 @@ void RegionTable_Init_LakeHylia() { }, { //Exits ENTRANCE(RR_LAKE_HYLIA, logic->HasItem(RG_BRONZE_SCALE)), - ENTRANCE(RR_LH_FISHING_POND, logic->CanOpenOverworldDoor(RG_FISHING_HOLE_KEY)), + ENTRANCE(RR_LH_FISHING_POND, logic->HasItem(RG_FISHING_HOLE_KEY)), }); areaTable[RR_LH_OWL_FLIGHT] = Region("LH Owl Flight", SCENE_LAKE_HYLIA, {}, {}, { diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp index 9bbc38859c..622175717b 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/lon_lon_ranch.cpp @@ -30,9 +30,9 @@ void RegionTable_Init_LonLonRanch() { }, { //Exits ENTRANCE(RR_HYRULE_FIELD, true), - ENTRANCE(RR_LLR_TALONS_HOUSE, logic->CanOpenOverworldDoor(RG_TALONS_HOUSE_KEY)), - ENTRANCE(RR_LLR_STABLES, logic->CanOpenOverworldDoor(RG_STABLES_KEY)), - ENTRANCE(RR_LLR_TOWER, logic->CanOpenOverworldDoor(RG_BACK_TOWER_KEY)), + ENTRANCE(RR_LLR_TALONS_HOUSE, logic->HasItem(RG_TALONS_HOUSE_KEY)), + ENTRANCE(RR_LLR_STABLES, logic->HasItem(RG_STABLES_KEY)), + ENTRANCE(RR_LLR_TOWER, logic->HasItem(RG_BACK_TOWER_KEY)), ENTRANCE(RR_LLR_GROTTO, logic->IsChild), }); diff --git a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp index 5b3935c74a..73b51e3c14 100644 --- a/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp +++ b/soh/soh/Enhancements/randomizer/location_access/overworld/market.cpp @@ -9,7 +9,7 @@ void RegionTable_Init_Market() { //Exits ENTRANCE(RR_HYRULE_FIELD, logic->IsAdult || logic->AtDay), ENTRANCE(RR_THE_MARKET, true), - ENTRANCE(RR_MARKET_GUARD_HOUSE, logic->CanOpenOverworldDoor(RG_GUARD_HOUSE_KEY)), + ENTRANCE(RR_MARKET_GUARD_HOUSE, logic->HasItem(RG_GUARD_HOUSE_KEY)), }); areaTable[RR_THE_MARKET] = Region("Market", SCENE_MARKET_DAY, {}, { @@ -43,21 +43,21 @@ void RegionTable_Init_Market() { ENTRANCE(RR_MARKET_ENTRANCE, true), ENTRANCE(RR_TOT_ENTRANCE, true), ENTRANCE(RR_CASTLE_GROUNDS, true), - ENTRANCE(RR_MARKET_BAZAAR, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_BAZAAR_KEY)), - ENTRANCE(RR_MARKET_MASK_SHOP, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MASK_SHOP_KEY)), - ENTRANCE(RR_MARKET_SHOOTING_GALLERY, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_SHOOTING_GALLERY_KEY)), - ENTRANCE(RR_MARKET_BOMBCHU_BOWLING, logic->IsChild && logic->CanOpenOverworldDoor(RG_BOMBCHU_BOWLING_KEY)), - ENTRANCE(RR_MARKET_TREASURE_CHEST_GAME, logic->IsChild && logic->AtNight && logic->CanOpenOverworldDoor(RG_TREASURE_CHEST_GAME_BUILDING_KEY)), - ENTRANCE(RR_MARKET_POTION_SHOP, logic->IsChild && logic->AtDay && logic->CanOpenOverworldDoor(RG_MARKET_POTION_SHOP_KEY)), + ENTRANCE(RR_MARKET_BAZAAR, logic->IsChild && logic->AtDay && logic->HasItem(RG_MARKET_BAZAAR_KEY)), + ENTRANCE(RR_MARKET_MASK_SHOP, logic->IsChild && logic->AtDay && logic->HasItem(RG_MASK_SHOP_KEY)), + ENTRANCE(RR_MARKET_SHOOTING_GALLERY, logic->IsChild && logic->AtDay && logic->HasItem(RG_MARKET_SHOOTING_GALLERY_KEY)), + ENTRANCE(RR_MARKET_BOMBCHU_BOWLING, logic->IsChild && logic->HasItem(RG_BOMBCHU_BOWLING_KEY)), + ENTRANCE(RR_MARKET_TREASURE_CHEST_GAME, logic->IsChild && logic->AtNight && logic->HasItem(RG_TREASURE_CHEST_GAME_BUILDING_KEY)), + ENTRANCE(RR_MARKET_POTION_SHOP, logic->IsChild && logic->AtDay && logic->HasItem(RG_MARKET_POTION_SHOP_KEY)), ENTRANCE(RR_MARKET_BACK_ALLEY, logic->IsChild), }); areaTable[RR_MARKET_BACK_ALLEY] = Region("Market Back Alley", SCENE_BACK_ALLEY_DAY, {}, {}, { //Exits ENTRANCE(RR_THE_MARKET, true), - ENTRANCE(RR_MARKET_BOMBCHU_SHOP, logic->AtNight && logic->CanOpenOverworldDoor(RG_BOMBCHU_SHOP_KEY)), - ENTRANCE(RR_MARKET_DOG_LADY_HOUSE, logic->CanOpenOverworldDoor(RG_RICHARDS_HOUSE_KEY)), - ENTRANCE(RR_MARKET_MAN_IN_GREEN_HOUSE, logic->AtNight && logic->CanOpenOverworldDoor(RG_ALLEY_HOUSE_KEY)), + ENTRANCE(RR_MARKET_BOMBCHU_SHOP, logic->AtNight && logic->HasItem(RG_BOMBCHU_SHOP_KEY)), + ENTRANCE(RR_MARKET_DOG_LADY_HOUSE, logic->HasItem(RG_RICHARDS_HOUSE_KEY)), + ENTRANCE(RR_MARKET_MAN_IN_GREEN_HOUSE, logic->AtNight && logic->HasItem(RG_ALLEY_HOUSE_KEY)), }); areaTable[RR_MARKET_GUARD_HOUSE] = Region("Market Guard House", SCENE_MARKET_GUARD_HOUSE, { diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 1cd8887fa8..e51d4943e4 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -1,7 +1,6 @@ #include "logic.h" #include "../debugger/performanceTimer.h" -#include #include #include "soh/OTRGlobals.h" @@ -12,10 +11,6 @@ #include "randomizer.h" #include #include -#include "soh/resource/type/Scene.h" -#include "soh/resource/type/scenecommand/SetTransitionActorList.h" -#include "src/overlays/actors/ovl_En_Door/z_en_door.h" -#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h" #include "location_access.h" namespace Rando { @@ -190,17 +185,9 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_LOST_WOODS_BRIDGE_BEAN_SOUL: case RG_LOST_WOODS_BEAN_SOUL: case RG_ZORAS_RIVER_BEAN_SOUL: - // Boss Souls - case RG_GOHMA_SOUL: - case RG_KING_DODONGO_SOUL: - case RG_BARINADE_SOUL: - case RG_PHANTOM_GANON_SOUL: - case RG_VOLVAGIA_SOUL: - case RG_MORPHA_SOUL: - case RG_BONGO_BONGO_SOUL: - case RG_TWINROVA_SOUL: - case RG_GANON_SOUL: case RG_SKELETON_KEY: + case RG_RUTOS_LETTER: + return CheckRandoInf(StaticData::RandoGetToRandInf.at(itemName)); // Overworld Keys case RG_GUARD_HOUSE_KEY: case RG_MARKET_BAZAAR_KEY: @@ -226,8 +213,8 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_BACK_TOWER_KEY: case RG_HYLIA_LAB_KEY: case RG_FISHING_HOLE_KEY: - case RG_RUTOS_LETTER: - return CheckRandoInf(StaticData::RandoGetToRandInf.at(itemName)); + return !ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS) || HasItem(RG_SKELETON_KEY) || + CheckRandoInf(StaticData::RandoGetToRandInf.at(itemName)); // Boss Keys case RG_FOREST_TEMPLE_BOSS_KEY: case RG_FIRE_TEMPLE_BOSS_KEY: @@ -657,41 +644,6 @@ bool Logic::HasProjectile(HasProjectileAge age) { (CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_BOOMERANG) || CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW))); } -bool Logic::HasBossSoul(RandomizerGet itemName) { - if (!ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS)) { - return true; - } - switch (itemName) { - case RG_GOHMA_SOUL: - case RG_KING_DODONGO_SOUL: - case RG_BARINADE_SOUL: - case RG_PHANTOM_GANON_SOUL: - case RG_VOLVAGIA_SOUL: - case RG_MORPHA_SOUL: - case RG_BONGO_BONGO_SOUL: - case RG_TWINROVA_SOUL: - return HasItem(itemName); - case RG_GANON_SOUL: - return ctx->GetOption(RSK_SHUFFLE_BOSS_SOULS).Is(RO_BOSS_SOULS_ON_PLUS_GANON) ? HasItem(RG_GANON_SOUL) - : true; - default: - return false; - } -} - -// RANDOMISERTODO intergrate into HasItem -bool Logic::CanOpenOverworldDoor(RandomizerGet key) { - if (!ctx->GetOption(RSK_LOCK_OVERWORLD_DOORS)) { - return true; - } - - if (HasItem(RG_SKELETON_KEY)) { - return true; - } - - return HasItem(key); -} - bool Logic::CanGroundJump(bool hasBombflower) { return ctx->GetTrickOption(RT_GROUND_JUMP) && CanStandingShield() && (CanUse(RG_BOMB_BAG) || (hasBombflower && HasItem(RG_GORONS_BRACELET))); @@ -1000,33 +952,33 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal // without shenanigans anyway. Bunny makes it free return CanUse(RG_KOKIRI_SWORD) || CanUse(RG_STICKS) || CanUse(RG_MASTER_SWORD); case RE_GOHMA: - return HasBossSoul(RG_GOHMA_SOUL) && CanJumpslash() && + return HasItem(RG_GOHMA_SOUL) && CanJumpslash() && (CanUse(RG_NUTS) || CanUse(RG_FAIRY_SLINGSHOT) || CanUse(RG_FAIRY_BOW) || HookshotOrBoomerang()); case RE_KING_DODONGO: - return HasBossSoul(RG_KING_DODONGO_SOUL) && CanJumpslash() && + return HasItem(RG_KING_DODONGO_SOUL) && CanJumpslash() && (CanUse(RG_BOMB_BAG) || HasItem(RG_GORONS_BRACELET) || (ctx->GetTrickOption(RT_DC_DODONGO_CHU) && IsAdult && CanUse(RG_BOMBCHU_5))); case RE_BARINADE: - return HasBossSoul(RG_BARINADE_SOUL) && CanUse(RG_BOOMERANG) && + return HasItem(RG_BARINADE_SOUL) && CanUse(RG_BOOMERANG) && (CanJumpslashExceptHammer() || (ctx->GetTrickOption(RT_JABU_BARINADE_POTS) && HasItem(RG_POWER_BRACELET))); case RE_PHANTOM_GANON: - return HasBossSoul(RG_PHANTOM_GANON_SOUL) && CanUseSword() && + return HasItem(RG_PHANTOM_GANON_SOUL) && CanUseSword() && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT)); case RE_VOLVAGIA: - return HasBossSoul(RG_VOLVAGIA_SOUL) && CanUse(RG_MEGATON_HAMMER); + return HasItem(RG_VOLVAGIA_SOUL) && CanUse(RG_MEGATON_HAMMER); case RE_MORPHA: - return HasBossSoul(RG_MORPHA_SOUL) && + return HasItem(RG_MORPHA_SOUL) && (CanUse(RG_HOOKSHOT) || (ctx->GetTrickOption(RT_WATER_MORPHA_WITHOUT_HOOKSHOT) && HasItem(RG_BRONZE_SCALE))) && (CanUseSword() || CanUse(RG_MEGATON_HAMMER)); case RE_BONGO_BONGO: - return HasBossSoul(RG_BONGO_BONGO_SOUL) && - (CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && CanUseSword() && + return HasItem(RG_BONGO_BONGO_SOUL) && (CanUse(RG_LENS_OF_TRUTH) || ctx->GetTrickOption(RT_LENS_BONGO)) && + CanUseSword() && (CanUse(RG_HOOKSHOT) || CanUse(RG_FAIRY_BOW) || CanUse(RG_FAIRY_SLINGSHOT) || ctx->GetTrickOption(RT_SHADOW_BONGO)); case RE_TWINROVA: - return HasBossSoul(RG_TWINROVA_SOUL) && CanUse(RG_MIRROR_SHIELD) && + return HasItem(RG_TWINROVA_SOUL) && CanUse(RG_MIRROR_SHIELD) && (CanUseSword() || CanUse(RG_MEGATON_HAMMER)); case RE_GANONDORF: // RANDOTODO: Trick to use hammer (no jumpslash) or stick (only jumpslash) instead of a sword to reflect the @@ -1036,9 +988,9 @@ bool Logic::CanKillEnemy(RandomizerEnemy enemy, EnemyDistance distance, bool wal // for killing ganondorf and all of those can reflect the energy ball // This will not be the case once ammo logic in taken into account as // sticks are limited and using a bottle might become a requirement in that case - return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_LIGHT_ARROWS) && CanUseSword(); + return HasItem(RG_GANON_SOUL) && CanUse(RG_LIGHT_ARROWS) && CanUseSword(); case RE_GANON: - return HasBossSoul(RG_GANON_SOUL) && CanUse(RG_MASTER_SWORD); + return HasItem(RG_GANON_SOUL) && CanUse(RG_MASTER_SWORD); case RE_DARK_LINK: // RANDOTODO make a function to track our ammo vs his HP when ammo capacity is taken into account in logic // all swords can at least trade blows with dark link, and even with 1 damage a slash it works out diff --git a/soh/soh/Enhancements/randomizer/logic.h b/soh/soh/Enhancements/randomizer/logic.h index be342fa4ce..42e3d14e63 100644 --- a/soh/soh/Enhancements/randomizer/logic.h +++ b/soh/soh/Enhancements/randomizer/logic.h @@ -43,8 +43,6 @@ class Logic { bool HasItem(RandomizerGet itemName); bool ItemUseAllowed(RandomizerGet itemName); bool BAllowed(); - bool HasBossSoul(RandomizerGet itemName); - bool CanOpenOverworldDoor(RandomizerGet itemName); bool SmallKeys(SceneID scene, uint8_t requiredAmount); bool CanGroundJump(bool hasBombflower = false); bool CanGroundJumpslash(bool hasBombflower = false);