diff --git a/soh/soh/Enhancements/randomizer/hook_handlers.cpp b/soh/soh/Enhancements/randomizer/hook_handlers.cpp index 445b75088..8651e74a4 100644 --- a/soh/soh/Enhancements/randomizer/hook_handlers.cpp +++ b/soh/soh/Enhancements/randomizer/hook_handlers.cpp @@ -257,9 +257,10 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) { Rando::Context::GetInstance()->GetOption(RSK_SHUFFLE_TOKENS).Is(RO_TOKENSANITY_OFF)) return; auto loc = Rando::Context::GetInstance()->GetItemLocation(rc); - if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) - return; - + if(rc != RC_HF_OCARINA_OF_TIME_ITEM) { + if (loc == nullptr || loc->HasObtained() || loc->GetPlacedRandomizerGet() == RG_NONE) + return; + } SPDLOG_INFO("Queuing RC: {}", static_cast(rc)); randomizerQueuedChecks.push(rc); } @@ -301,6 +302,12 @@ void RandomizerOnExternalCheckHandler(uint32_t randomizerCheck) { inSameArea = scene == gPlayState->sceneNum; } + // setting the ocarinina obtained event flag + if(rc == RC_HF_OCARINA_OF_TIME_ITEM) { + randomizerQueuedChecks.push(rc); + return; + } + std::string logMessage = ""; switch (loc->GetCollectionCheck().type) { @@ -375,6 +382,10 @@ void RandomizerOnPlayerUpdateForRCQueueHandler() { getItemEntry = Rando::Context::GetInstance()->GetFinalGIEntry(rc, true, (GetItemID)vanillaRandomizerGet); } + if(rc == RC_HF_OCARINA_OF_TIME_ITEM && loc->HasObtained()) { + RandomizerOnExternalCheckHandler(RC_SONG_FROM_OCARINA_OF_TIME); + } + if (loc->HasObtained()) { SPDLOG_INFO("RC {} already obtained, skipping", static_cast(rc)); } else {