mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-04-23 08:14:31 +00:00
timesaver_hook_handlers: use COND_HOOK (#6309)
This commit is contained in:
parent
2a335b1cd8
commit
f19ad1e75b
|
|
@ -1,7 +1,6 @@
|
|||
#include <soh/OTRGlobals.h>
|
||||
extern "C" {
|
||||
extern PlayState* gPlayState;
|
||||
#include "variables.h"
|
||||
#include "functions.h"
|
||||
#include "overlays/actors/ovl_En_Ossan/z_en_ossan.h"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<GameInteractor::OnLoadGame>([](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<GameInteractor::OnSceneInit>(onSceneInitHook);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnVanillaBehavior>(onVanillaBehaviorHook);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnActorInit>(onActorInitHook);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnGameFrameUpdate>(onGameFrameUpdate);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnFlagSet>(onFlagSetHook);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnPlayerUpdate>(onPlayerUpdateHook);
|
||||
GameInteractor::Instance->UnregisterGameHook<GameInteractor::OnItemReceive>(onItemReceiveHook);
|
||||
|
||||
onSceneInitHook = 0;
|
||||
onVanillaBehaviorHook = 0;
|
||||
onActorInitHook = 0;
|
||||
onGameFrameUpdate = 0;
|
||||
onFlagSetHook = 0;
|
||||
onPlayerUpdateHook = 0;
|
||||
onItemReceiveHook = 0;
|
||||
|
||||
onSceneInitHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnSceneInit>(TimeSaverOnSceneInitHandler);
|
||||
onVanillaBehaviorHook = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnVanillaBehavior>(
|
||||
TimeSaverOnVanillaBehaviorHandler);
|
||||
onActorInitHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>(TimeSaverOnActorInitHandler);
|
||||
onGameFrameUpdate = GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>(
|
||||
TimeSaverOnGameFrameUpdateHandler);
|
||||
|
||||
if (IS_RANDO)
|
||||
return;
|
||||
|
||||
onFlagSetHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnFlagSet>(TimeSaverOnFlagSetHandler);
|
||||
onPlayerUpdateHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnPlayerUpdate>(TimeSaverOnPlayerUpdateHandler);
|
||||
onItemReceiveHook =
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnItemReceive>(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") });
|
||||
|
|
|
|||
Loading…
Reference in a new issue