From 9d3ea502bb2b5136d25e1daad831430aed897498 Mon Sep 17 00:00:00 2001 From: aMannus Date: Tue, 27 May 2025 23:12:01 +0200 Subject: [PATCH] Implement rewards gcbk settings & fix shopsanity --- soh/soh/Enhancements/randomizer/context.cpp | 16 ++++++++--- .../Enhancements/randomizer/randomizer.cpp | 27 +++++++++++-------- .../Archipelago/ArchipelagoSettingsWindow.cpp | 5 ++++ 3 files changed, 33 insertions(+), 15 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/context.cpp b/soh/soh/Enhancements/randomizer/context.cpp index c9cc8e746..149e656a5 100644 --- a/soh/soh/Enhancements/randomizer/context.cpp +++ b/soh/soh/Enhancements/randomizer/context.cpp @@ -526,7 +526,11 @@ void Context::ParseArchipelagoOptions(const std::map& slot_dat mOptions[RSK_SHUFFLE_MASTER_SWORD].Set(RO_GENERIC_NO); mOptions[RSK_SHUFFLE_CHILD_WALLET].Set(RO_GENERIC_NO); mOptions[RSK_INCLUDE_TYCOON_WALLET].Set(RO_GENERIC_YES); - mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_ANYWHERE); + if (slotData["shuffle_dungeon_rewards"] == 0) { + mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_VANILLA); + } else if (slotData["shuffle_dungeon_rewards"] == 1) { + mOptions[RSK_SHUFFLE_DUNGEON_REWARDS].Set(RO_DUNGEON_REWARDS_ANYWHERE); + } mOptions[RSK_SHUFFLE_SONGS].Set(RO_SONG_SHUFFLE_ANYWHERE); mOptions[RSK_SHUFFLE_TOKENS].Set(slotData["shuffle_tokens"]); mOptions[RSK_SHOPSANITY].Set(slotData["shuffle_shops"]); @@ -597,7 +601,11 @@ void Context::ParseArchipelagoOptions(const std::map& slot_dat mOptions[RSK_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE); mOptions[RSK_GERUDO_KEYS].Set(RO_GERUDO_KEYS_ANYWHERE); mOptions[RSK_BOSS_KEYSANITY].Set(RO_DUNGEON_ITEM_LOC_ANYWHERE); - mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_ANYWHERE); + if (slotData["gcbk_setting"] == 1) { + mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_ANYWHERE); + } else if (slotData["gcbk_setting"] == 0) { + mOptions[RSK_GANONS_BOSS_KEY].Set(RO_GANON_BOSS_KEY_LACS_REWARDS); + } mOptions[RSK_SKIP_CHILD_STEALTH].Set(RO_GENERIC_YES); mOptions[RSK_SKIP_CHILD_ZELDA].Set(RO_GENERIC_NO); mOptions[RSK_STARTING_STICKS].Set(RO_GENERIC_NO); @@ -630,7 +638,7 @@ void Context::ParseArchipelagoOptions(const std::map& slot_dat mOptions[RSK_SUNLIGHT_ARROWS].Set(RO_GENERIC_YES); mOptions[RSK_ENABLE_BOMBCHU_DROPS].Set(RO_GENERIC_YES); mOptions[RSK_BOMBCHU_BAG].Set(RO_GENERIC_YES); - mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_NOTHING); + mOptions[RSK_LINKS_POCKET].Set(RO_LINKS_POCKET_ANYTHING); mOptions[RSK_MQ_DUNGEON_RANDOM].Set(0); mOptions[RSK_MQ_DUNGEON_COUNT].Set(0); mOptions[RSK_MQ_DUNGEON_SET].Set(0); @@ -648,7 +656,7 @@ void Context::ParseArchipelagoOptions(const std::map& slot_dat mOptions[RSK_MQ_GANONS_CASTLE].Set(0); mOptions[RSK_LACS_STONE_COUNT].Set(0); mOptions[RSK_LACS_MEDALLION_COUNT].Set(0); - mOptions[RSK_LACS_REWARD_COUNT].Set(0); + mOptions[RSK_LACS_REWARD_COUNT].Set(slotData["gcbk_rewards_required"]); mOptions[RSK_LACS_DUNGEON_COUNT].Set(0); mOptions[RSK_LACS_TOKEN_COUNT].Set(0); mOptions[RSK_LACS_OPTIONS].Set(0); diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index 3739703c1..1c7a220cd 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -3349,19 +3349,24 @@ ShopItemIdentity Randomizer::IdentifyShopItem(s32 sceneNum, u8 slotIndex) { (sceneNum == SCENE_BAZAAR && gSaveContext.entranceIndex == ENTR_BAZAAR_0) ? SCENE_TEST01 : sceneNum, slotIndex - 1); - if (location->GetRandomizerCheck() != RC_UNKNOWN_CHECK) { - shopItemIdentity.randomizerInf = rcToRandomizerInf[location->GetRandomizerCheck()]; - shopItemIdentity.randomizerCheck = location->GetRandomizerCheck(); - shopItemIdentity.ogItemId = (GetItemID)Rando::StaticData::RetrieveItem(location->GetVanillaItem()).GetItemID(); + RandomizerCheck randoCheck = location->GetRandomizerCheck(); - RandomizerGet randoGet = - Rando::Context::GetInstance()->GetItemLocation(shopItemIdentity.randomizerCheck)->GetPlacedRandomizerGet(); - if (randomizerGetToEnGirlShopItem.find(randoGet) != randomizerGetToEnGirlShopItem.end()) { - shopItemIdentity.enGirlAShopItem = randomizerGetToEnGirlShopItem[randoGet]; + if (randoCheck != RC_UNKNOWN_CHECK) { + RandomizerGet randoGet = Rando::Context::GetInstance()->GetItemLocation(randoCheck)->GetPlacedRandomizerGet(); + + if (randoGet != RG_NONE) { + shopItemIdentity.randomizerInf = rcToRandomizerInf[randoCheck]; + shopItemIdentity.randomizerCheck = randoCheck; + shopItemIdentity.ogItemId = + (GetItemID)Rando::StaticData::RetrieveItem(location->GetVanillaItem()).GetItemID(); + + if (randomizerGetToEnGirlShopItem.find(randoGet) != randomizerGetToEnGirlShopItem.end()) { + shopItemIdentity.enGirlAShopItem = randomizerGetToEnGirlShopItem[randoGet]; + } + + shopItemIdentity.itemPrice = + OTRGlobals::Instance->gRandoContext->GetItemLocation(shopItemIdentity.randomizerCheck)->GetPrice(); } - - shopItemIdentity.itemPrice = - OTRGlobals::Instance->gRandoContext->GetItemLocation(shopItemIdentity.randomizerCheck)->GetPrice(); } return shopItemIdentity; diff --git a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp index 162045a98..b2d7524f1 100644 --- a/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp +++ b/soh/soh/Network/Archipelago/ArchipelagoSettingsWindow.cpp @@ -71,6 +71,11 @@ void ArchipelagoSettingsWindow::DrawElement() { apItem.index = 999999; ArchipelagoClient::GetInstance().OnItemReceived(apItem); } + ImGui::SameLine(); + if (UIWidgets::Button("Send Game Won", + UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.0, 0.0)))) { + ArchipelagoClient::GetInstance().SendGameWon(); + } } static bool sArchipelagoTexturesLoaded = false;