From 68c8f50a71887a0caacf5196d1aef700547f9519 Mon Sep 17 00:00:00 2001 From: briaguya <70942617+briaguya-ai@users.noreply.github.com> Date: Thu, 16 Feb 2023 21:53:08 -0500 Subject: [PATCH] greg bridge in logic (#2460) * greg bridge in logic --------- Co-authored-by: briaguya --- soh/soh/Enhancements/randomizer/3drando/item.hpp | 4 ++++ .../Enhancements/randomizer/3drando/item_list.cpp | 2 +- soh/soh/Enhancements/randomizer/3drando/logic.cpp | 9 ++++++++- soh/soh/Enhancements/randomizer/3drando/logic.hpp | 3 +++ .../randomizer/3drando/setting_descriptions.cpp | 2 ++ .../randomizer/3drando/setting_descriptions.hpp | 1 + soh/soh/Enhancements/randomizer/3drando/settings.cpp | 2 +- soh/soh/Enhancements/randomizer/3drando/settings.hpp | 1 + soh/soh/Enhancements/randomizer/randomizer.cpp | 12 +++++++++--- soh/soh/Enhancements/randomizer/randomizerTypes.h | 1 + .../actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c | 6 ++++++ 11 files changed, 37 insertions(+), 6 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/3drando/item.hpp b/soh/soh/Enhancements/randomizer/3drando/item.hpp index bd576835e..72ff57131 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/item.hpp @@ -116,6 +116,10 @@ public: return false; } + if (randomizerGet == RG_GREG_RUPEE) { + return Bridge.Is(RAINBOWBRIDGE_GREG); + } + return IsAdvancement(); } diff --git a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp index a8597c0fe..8f24603ef 100644 --- a/soh/soh/Enhancements/randomizer/3drando/item_list.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/item_list.cpp @@ -177,7 +177,7 @@ void ItemTable_Init() { // RandomizerGet //Generic Items itemTable[RECOVERY_HEART] = Item(RG_RECOVERY_HEART, Text{"Recovery Heart", "Coeur de Vie", "Corazón"}, ITEMTYPE_ITEM, GI_HEART, false, &noVariable, RECOVERY_HEART); itemTable[GREEN_RUPEE] = Item(RG_GREEN_RUPEE, Text{"Green Rupee", "Rubis Vert", "Rupia verde"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN, false, &noVariable, GREEN_RUPEE); - itemTable[GREG_RUPEE] = Item(RG_GREG_RUPEE, Text{"Greg Rupee", "Rubis Greg", "Rupia Greg"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN, false, &noVariable, GREG_RUPEE); + itemTable[GREG_RUPEE] = Item(RG_GREG_RUPEE, Text{"Greg Rupee", "Rubis Greg", "Rupia Greg"}, ITEMTYPE_ITEM, GI_RUPEE_GREEN, true, &Greg, GREG_RUPEE); itemTable[BLUE_RUPEE] = Item(RG_BLUE_RUPEE, Text{"Blue Rupee", "Rubis Bleu", "Rupia azul"}, ITEMTYPE_ITEM, GI_RUPEE_BLUE, false, &noVariable, BLUE_RUPEE); itemTable[RED_RUPEE] = Item(RG_RED_RUPEE, Text{"Red Rupee", "Rubis Rouge", "Rupia roja"}, ITEMTYPE_ITEM, GI_RUPEE_RED, false, &noVariable, RED_RUPEE); itemTable[PURPLE_RUPEE] = Item(RG_PURPLE_RUPEE, Text{"Purple Rupee", "Rubis Pourpre", "Rupia morada"}, ITEMTYPE_ITEM, GI_RUPEE_PURPLE, false, &noVariable, PURPLE_RUPEE); diff --git a/soh/soh/Enhancements/randomizer/3drando/logic.cpp b/soh/soh/Enhancements/randomizer/3drando/logic.cpp index e581f4e95..a6ab83c77 100644 --- a/soh/soh/Enhancements/randomizer/3drando/logic.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/logic.cpp @@ -120,6 +120,9 @@ namespace Logic { bool ShadowTrialClear = false; bool LightTrialClear = false; + //Greg + bool Greg = false; + //Progressive Items uint8_t ProgressiveBulletBag = 0; uint8_t ProgressiveBombBag = 0; @@ -781,7 +784,8 @@ namespace Logic { (Bridge.Is(RAINBOWBRIDGE_MEDALLIONS) && MedallionCount >= BridgeMedallionCount.Value()) || (Bridge.Is(RAINBOWBRIDGE_REWARDS) && StoneCount + MedallionCount >= BridgeRewardCount.Value()) || (Bridge.Is(RAINBOWBRIDGE_DUNGEONS) && DungeonCount >= BridgeDungeonCount.Value()) || - (Bridge.Is(RAINBOWBRIDGE_TOKENS) && GoldSkulltulaTokens >= BridgeTokenCount.Value()); + (Bridge.Is(RAINBOWBRIDGE_TOKENS) && GoldSkulltulaTokens >= BridgeTokenCount.Value()) || + (Bridge.Is(RAINBOWBRIDGE_GREG) && Greg); CanTriggerLACS = (LACSCondition == LACSCONDITION_VANILLA && ShadowMedallion && SpiritMedallion) || (LACSCondition == LACSCONDITION_STONES && StoneCount >= LACSStoneCount.Value()) || @@ -998,6 +1002,9 @@ namespace Logic { ShadowTrialClear = false; LightTrialClear = false; + //Greg + Greg = false; + //Progressive Items ProgressiveBulletBag = 0; ProgressiveBombBag = 0; diff --git a/soh/soh/Enhancements/randomizer/3drando/logic.hpp b/soh/soh/Enhancements/randomizer/3drando/logic.hpp index 5053afea4..f847fb7d7 100644 --- a/soh/soh/Enhancements/randomizer/3drando/logic.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/logic.hpp @@ -113,6 +113,9 @@ extern bool SpiritTrialClear; extern bool ShadowTrialClear; extern bool LightTrialClear; +//Greg +extern bool Greg; + // Progression Items extern uint8_t ProgressiveBulletBag; extern uint8_t ProgressiveBombBag; diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp index 1a0544ee1..200739991 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.cpp @@ -109,6 +109,8 @@ string_view bridgeDungeons = "The Rainbow Bridge requires completing "into the blue warp at the end of them."; // string_view bridgeTokens = "The Rainbow Bridge requires collecting a\n" // "configurable number of Gold Skulltula Tokens."; // +string_view bridgeGreg = "The Rainbow Bridge requires collecting\n" // + "Greg the green rupee."; // /*------------------------------ // | BRIDGE CONDITIONS | // ------------------------------*/ // diff --git a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp index b99087944..2749fa985 100644 --- a/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/setting_descriptions.hpp @@ -40,6 +40,7 @@ extern string_view bridgeMedallions; extern string_view bridgeRewards; extern string_view bridgeDungeons; extern string_view bridgeTokens; +extern string_view bridgeGreg; extern string_view bridgeStoneCountDesc; extern string_view bridgeMedallionCountDesc; diff --git a/soh/soh/Enhancements/randomizer/3drando/settings.cpp b/soh/soh/Enhancements/randomizer/3drando/settings.cpp index d32e96ab7..632ed45c8 100644 --- a/soh/soh/Enhancements/randomizer/3drando/settings.cpp +++ b/soh/soh/Enhancements/randomizer/3drando/settings.cpp @@ -59,7 +59,7 @@ namespace Settings { Option OpenDoorOfTime = Option::U8 ("Door of Time", {"Closed", "Song only", "Open"}, {doorOfTimeClosed, doorOfTimeSongOnly, doorOfTimeOpen}); Option ZorasFountain = Option::U8 ("Zora's Fountain", {"Closed", "Closed as child", "Open"}, {fountainNormal, fountainAdult, fountainOpen}); Option GerudoFortress = Option::U8 ("Gerudo Fortress", {"Normal", "Fast", "Open"}, {gerudoNormal, gerudoFast, gerudoOpen}); - Option Bridge = Option::U8 ("Rainbow Bridge", {"Vanilla", "Always open", "Stones", "Medallions", "Dungeon rewards", "Dungeons", "Tokens"}, {bridgeVanilla, bridgeOpen, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA); + Option Bridge = Option::U8 ("Rainbow Bridge", {"Vanilla", "Always open", "Stones", "Medallions", "Dungeon rewards", "Dungeons", "Tokens", "Greg"}, {bridgeVanilla, bridgeOpen, bridgeStones, bridgeMedallions, bridgeRewards, bridgeDungeons, bridgeTokens, bridgeGreg}, OptionCategory::Setting, RAINBOWBRIDGE_VANILLA); Option BridgeStoneCount = Option::U8 ("Stone Count", {NumOpts(0, 3)}, {bridgeStoneCountDesc}, OptionCategory::Setting, 1, true); Option BridgeMedallionCount= Option::U8 ("Medallion Count", {NumOpts(0, 6)}, {bridgeMedallionCountDesc}, OptionCategory::Setting, 1, true); Option BridgeRewardCount = Option::U8 ("Reward Count", {NumOpts(0, 9)}, {bridgeRewardCountDesc}, OptionCategory::Setting, 1, true); diff --git a/soh/soh/Enhancements/randomizer/3drando/settings.hpp b/soh/soh/Enhancements/randomizer/3drando/settings.hpp index aef944db6..84851a3d6 100644 --- a/soh/soh/Enhancements/randomizer/3drando/settings.hpp +++ b/soh/soh/Enhancements/randomizer/3drando/settings.hpp @@ -69,6 +69,7 @@ typedef enum { RAINBOWBRIDGE_REWARDS, RAINBOWBRIDGE_DUNGEONS, RAINBOWBRIDGE_TOKENS, + RAINBOWBRIDGE_GREG, } RainbowBridgeSetting; typedef enum { diff --git a/soh/soh/Enhancements/randomizer/randomizer.cpp b/soh/soh/Enhancements/randomizer/randomizer.cpp index cde1f65d8..b859b5031 100644 --- a/soh/soh/Enhancements/randomizer/randomizer.cpp +++ b/soh/soh/Enhancements/randomizer/randomizer.cpp @@ -690,6 +690,8 @@ void Randomizer::ParseRandomizerSettingsFile(const char* spoilerFileName) { gSaveContext.randoSettings[index].value = RO_BRIDGE_DUNGEONS; } else if(it.value() == "Tokens") { gSaveContext.randoSettings[index].value = RO_BRIDGE_TOKENS; + } else if(it.value() == "Greg") { + gSaveContext.randoSettings[index].value = RO_BRIDGE_GREG; } break; case RSK_RAINBOW_BRIDGE_STONE_COUNT: @@ -2987,8 +2989,8 @@ void DrawRandoEditor(bool& open) { static const char* randoDoorOfTime[3] = { "Closed", "Song only", "Open" }; static const char* randoZorasFountain[3] = { "Closed", "Closed as child", "Open" }; static const char* randoGerudoFortress[3] = { "Normal", "Fast", "Open" }; - static const char* randoRainbowBridge[7] = { "Vanilla", "Always open", "Stones", "Medallions", - "Dungeon rewards", "Dungeons", "Tokens" }; + static const char* randoRainbowBridge[8] = { "Vanilla", "Always open", "Stones", "Medallions", + "Dungeon rewards", "Dungeons", "Tokens", "Greg" }; static const char* randoGanonsTrial[3] = { "Skip", "Set Number", "Random Number" }; static const char* randoMqDungeons[3] = { "None", "Set Number", "Random Number" }; @@ -3228,7 +3230,9 @@ void DrawRandoEditor(bool& open) { "are considered complete after stepping in to the blue warp after " "the boss.\n" "\n" - "Tokens - Obtain the specified amount of Skulltula tokens." + "Tokens - Obtain the specified amount of Skulltula tokens.\n" + "\n" + "Greg - Find Greg the Green Rupee." ); UIWidgets::EnhancementCombobox("gRandomizeRainbowBridge", randoRainbowBridge, RO_BRIDGE_MAX, RO_BRIDGE_VANILLA); @@ -3263,6 +3267,8 @@ void DrawRandoEditor(bool& open) { UIWidgets::EnhancementSliderInt("Token Count: %d", "##RandoTokenCount", "gRandomizeTokenCount", 1, 100, "", 100, true); break; + case RO_BRIDGE_GREG: + break; } UIWidgets::PaddedSeparator(); diff --git a/soh/soh/Enhancements/randomizer/randomizerTypes.h b/soh/soh/Enhancements/randomizer/randomizerTypes.h index 1cfdeeacf..1fc7c7f0e 100644 --- a/soh/soh/Enhancements/randomizer/randomizerTypes.h +++ b/soh/soh/Enhancements/randomizer/randomizerTypes.h @@ -1175,6 +1175,7 @@ typedef enum { RO_BRIDGE_DUNGEON_REWARDS, RO_BRIDGE_DUNGEONS, RO_BRIDGE_TOKENS, + RO_BRIDGE_GREG, RO_BRIDGE_MAX, } RandoOptionRainbowBridge; diff --git a/soh/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c b/soh/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c index ef6716331..3d9649d79 100644 --- a/soh/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c +++ b/soh/src/overlays/actors/ovl_Bg_Gjyo_Bridge/z_bg_gjyo_bridge.c @@ -135,6 +135,12 @@ void BgGjyoBridge_TriggerCutscene(BgGjyoBridge* this, PlayState* play) { func_800F595C(NA_BGM_BRIDGE_TO_GANONS); } break; + case RO_BRIDGE_GREG: + if (Flags_GetRandomizerInf(RAND_INF_GREG_FOUND)) { + this->actionFunc = BgGjyoBridge_SpawnBridge; + func_800F595C(NA_BGM_BRIDGE_TO_GANONS); + } + break; } } }