From 02ef33393aa26e3fd154dd3eb23f060332975e10 Mon Sep 17 00:00:00 2001 From: Malkierian Date: Tue, 15 Apr 2025 10:13:30 -0700 Subject: [PATCH] Implements a rand inf for Ruto's letter to apply to logic to track it separate from the underwater item check. (#5405) --- soh/soh/Enhancements/randomizer/logic.cpp | 6 +++--- soh/soh/Enhancements/randomizer/randomizer_inf.h | 1 + soh/src/code/z_parameter.c | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/soh/soh/Enhancements/randomizer/logic.cpp b/soh/soh/Enhancements/randomizer/logic.cpp index 9fd460d93..0c4ed2e89 100644 --- a/soh/soh/Enhancements/randomizer/logic.cpp +++ b/soh/soh/Enhancements/randomizer/logic.cpp @@ -121,8 +121,6 @@ bool Logic::HasItem(RandomizerGet itemName) { case RG_STONE_OF_AGONY: case RG_GERUDO_MEMBERSHIP_CARD: return CheckQuestItem(RandoGetToQuestItem.at(itemName)); - case RG_RUTOS_LETTER: - return CheckEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER); case RG_DOUBLE_DEFENSE: return GetSaveContext()->isDoubleDefenseAcquired; case RG_FISHING_POLE: @@ -171,6 +169,7 @@ 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(RandoGetToRandInf.at(itemName)); // Boss Keys case RG_EPONA: @@ -1455,6 +1454,7 @@ std::map Logic::RandoGetToEquipFlag = { std::map Logic::RandoGetToRandInf = { { RG_ZELDAS_LETTER, RAND_INF_ZELDAS_LETTER }, { RG_WEIRD_EGG, RAND_INF_WEIRD_EGG }, + { RG_RUTOS_LETTER, RAND_INF_OBTAINED_RUTOS_LETTER }, { RG_GOHMA_SOUL, RAND_INF_GOHMA_SOUL }, { RG_KING_DODONGO_SOUL, RAND_INF_KING_DODONGO_SOUL }, { RG_BARINADE_SOUL, RAND_INF_BARINADE_SOUL }, @@ -1819,7 +1819,7 @@ void Logic::ApplyItemEffect(Item& item, bool state) { mSaveContext->inventory.items[slot] = itemId; } break; case RG_RUTOS_LETTER: - SetEventChkInf(EVENTCHKINF_OBTAINED_RUTOS_LETTER, state); + SetRandoInf(RAND_INF_OBTAINED_RUTOS_LETTER, state); break; case RG_GOHMA_SOUL: case RG_KING_DODONGO_SOUL: diff --git a/soh/soh/Enhancements/randomizer/randomizer_inf.h b/soh/soh/Enhancements/randomizer/randomizer_inf.h index 048fcc86c..b6cb4d1dd 100644 --- a/soh/soh/Enhancements/randomizer/randomizer_inf.h +++ b/soh/soh/Enhancements/randomizer/randomizer_inf.h @@ -1952,6 +1952,7 @@ typedef enum { RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_7, RAND_INF_DEKU_TREE_QUEEN_GOHMA_GRASS_8, // End Grass + RAND_INF_OBTAINED_RUTOS_LETTER, // If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be // ceil(RAND_INF_MAX / 16) diff --git a/soh/src/code/z_parameter.c b/soh/src/code/z_parameter.c index 2a6d3369d..4ead0d268 100644 --- a/soh/src/code/z_parameter.c +++ b/soh/src/code/z_parameter.c @@ -2411,6 +2411,9 @@ u8 Item_Give(PlayState* play, u8 item) { } } } else { + if (item == ITEM_LETTER_RUTO) { + Flags_SetRandomizerInf(RAND_INF_OBTAINED_RUTOS_LETTER); + } for (i = 0; i < 4; i++) { if (gSaveContext.inventory.items[temp + i] == ITEM_NONE) { gSaveContext.inventory.items[temp + i] = item;