diff --git a/soh/soh/Enhancements/randomizer/ShuffleSpeak.cpp b/soh/soh/Enhancements/randomizer/ShuffleSpeak.cpp index b775bd0eb..62aecce61 100644 --- a/soh/soh/Enhancements/randomizer/ShuffleSpeak.cpp +++ b/soh/soh/Enhancements/randomizer/ShuffleSpeak.cpp @@ -1,7 +1,6 @@ #include extern "C" { extern PlayState* gPlayState; -#include "variables.h" #include "functions.h" #include "overlays/actors/ovl_En_Ossan/z_en_ossan.h" } diff --git a/soh/soh/Enhancements/timesaver_hook_handlers.cpp b/soh/soh/Enhancements/timesaver_hook_handlers.cpp index 6b3353778..2e1c269b7 100644 --- a/soh/soh/Enhancements/timesaver_hook_handlers.cpp +++ b/soh/soh/Enhancements/timesaver_hook_handlers.cpp @@ -111,11 +111,11 @@ void EnDntDemo_JudgeSkipToReward(EnDntDemo* enDntDemo, PlayState* play) { void BgSpot03Taki_KeepOpen(BgSpot03Taki* bgSpot03Taki, PlayState* play) { } -static int successChimeCooldown = 0; +static u32 successChimeCooldown = 0; void RateLimitedSuccessChime() { - if (successChimeCooldown == 0) { + if (gPlayState->gameplayFrames > successChimeCooldown) { Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME); - successChimeCooldown = 120; + successChimeCooldown = gPlayState->gameplayFrames + 120; } } @@ -125,12 +125,6 @@ bool ForcedDialogIsDisabled(ForcedDialogMode type) { type) != 0; } -void TimeSaverOnGameFrameUpdateHandler() { - if (successChimeCooldown > 0) { - successChimeCooldown--; - } -} - void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) { va_list args; va_copy(args, originalArgs); @@ -1223,7 +1217,7 @@ void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) { return; } - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 0)) { switch (flagType) { case FLAG_EVENT_CHECK_INF: switch (flag) { @@ -1269,7 +1263,7 @@ void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) { } } - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), 0)) { switch (flagType) { case FLAG_RANDOMIZER_INF: switch (flag) { @@ -1310,7 +1304,7 @@ void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) { } } - if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), IS_RANDO)) { + if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), 0)) { switch (flagType) { case FLAG_EVENT_CHECK_INF: switch (flag) { @@ -1395,52 +1389,30 @@ void TimeSaverOnItemReceiveHandler(GetItemEntry receivedItemEntry) { } } -static uint32_t onSceneInitHook = 0; -static uint32_t onVanillaBehaviorHook = 0; -static uint32_t onActorInitHook = 0; -static uint32_t onGameFrameUpdate = 0; -static uint32_t onFlagSetHook = 0; -static uint32_t onPlayerUpdateHook = 0; -static uint32_t onItemReceiveHook = 0; static void TimeSaverRegisterHooks() { - GameInteractor::Instance->RegisterGameHook([](int32_t fileNum) mutable { + COND_HOOK(OnSceneInit, + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO) || + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), IS_RANDO), + TimeSaverOnSceneInitHandler); + COND_HOOK(OnVanillaBehavior, true, TimeSaverOnVanillaBehaviorHandler); + COND_HOOK(OnActorInit, true, TimeSaverOnActorInitHandler); + + // item queue for use outside rando, rando has its own queue + COND_HOOK(OnLoadGame, !IS_RANDO, [](int32_t fileNum) { vanillaQueuedItemEntry = GET_ITEM_NONE; - - GameInteractor::Instance->UnregisterGameHook(onSceneInitHook); - GameInteractor::Instance->UnregisterGameHook(onVanillaBehaviorHook); - GameInteractor::Instance->UnregisterGameHook(onActorInitHook); - GameInteractor::Instance->UnregisterGameHook(onGameFrameUpdate); - GameInteractor::Instance->UnregisterGameHook(onFlagSetHook); - GameInteractor::Instance->UnregisterGameHook(onPlayerUpdateHook); - GameInteractor::Instance->UnregisterGameHook(onItemReceiveHook); - - onSceneInitHook = 0; - onVanillaBehaviorHook = 0; - onActorInitHook = 0; - onGameFrameUpdate = 0; - onFlagSetHook = 0; - onPlayerUpdateHook = 0; - onItemReceiveHook = 0; - - onSceneInitHook = - GameInteractor::Instance->RegisterGameHook(TimeSaverOnSceneInitHandler); - onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook( - TimeSaverOnVanillaBehaviorHandler); - onActorInitHook = - GameInteractor::Instance->RegisterGameHook(TimeSaverOnActorInitHandler); - onGameFrameUpdate = GameInteractor::Instance->RegisterGameHook( - TimeSaverOnGameFrameUpdateHandler); - - if (IS_RANDO) - return; - - onFlagSetHook = - GameInteractor::Instance->RegisterGameHook(TimeSaverOnFlagSetHandler); - onPlayerUpdateHook = - GameInteractor::Instance->RegisterGameHook(TimeSaverOnPlayerUpdateHandler); - onItemReceiveHook = - GameInteractor::Instance->RegisterGameHook(TimeSaverOnItemReceiveHandler); + successChimeCooldown = 0; }); + COND_HOOK(OnItemReceive, !IS_RANDO, TimeSaverOnItemReceiveHandler); + COND_HOOK(OnPlayerUpdate, !IS_RANDO, TimeSaverOnPlayerUpdateHandler); + COND_HOOK(OnFlagSet, + !IS_RANDO && (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), 0) || + CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong"), 0)), + TimeSaverOnFlagSetHandler); } -static RegisterShipInitFunc initFunc_RegisterHooks(TimeSaverRegisterHooks); +static RegisterShipInitFunc initFunc_RegisterHooks(TimeSaverRegisterHooks, + { "IS_RANDO", CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), + CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.BossIntro"), + CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), + CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.LearnSong") });