timesaver_hook_handlers: use COND_HOOK (#6309)
This commit is contained in:
@@ -1,7 +1,6 @@
|
|||||||
#include <soh/OTRGlobals.h>
|
#include <soh/OTRGlobals.h>
|
||||||
extern "C" {
|
extern "C" {
|
||||||
extern PlayState* gPlayState;
|
extern PlayState* gPlayState;
|
||||||
#include "variables.h"
|
|
||||||
#include "functions.h"
|
#include "functions.h"
|
||||||
#include "overlays/actors/ovl_En_Ossan/z_en_ossan.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) {
|
void BgSpot03Taki_KeepOpen(BgSpot03Taki* bgSpot03Taki, PlayState* play) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static int successChimeCooldown = 0;
|
static u32 successChimeCooldown = 0;
|
||||||
void RateLimitedSuccessChime() {
|
void RateLimitedSuccessChime() {
|
||||||
if (successChimeCooldown == 0) {
|
if (gPlayState->gameplayFrames > successChimeCooldown) {
|
||||||
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
|
Sfx_PlaySfxCentered(NA_SE_SY_CORRECT_CHIME);
|
||||||
successChimeCooldown = 120;
|
successChimeCooldown = gPlayState->gameplayFrames + 120;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,12 +125,6 @@ bool ForcedDialogIsDisabled(ForcedDialogMode type) {
|
|||||||
type) != 0;
|
type) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TimeSaverOnGameFrameUpdateHandler() {
|
|
||||||
if (successChimeCooldown > 0) {
|
|
||||||
successChimeCooldown--;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
void TimeSaverOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_list originalArgs) {
|
||||||
va_list args;
|
va_list args;
|
||||||
va_copy(args, originalArgs);
|
va_copy(args, originalArgs);
|
||||||
@@ -1223,7 +1217,7 @@ void TimeSaverOnFlagSetHandler(int16_t flagType, int16_t flag) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), IS_RANDO)) {
|
if (CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipCutscene.Story"), 0)) {
|
||||||
switch (flagType) {
|
switch (flagType) {
|
||||||
case FLAG_EVENT_CHECK_INF:
|
case FLAG_EVENT_CHECK_INF:
|
||||||
switch (flag) {
|
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) {
|
switch (flagType) {
|
||||||
case FLAG_RANDOMIZER_INF:
|
case FLAG_RANDOMIZER_INF:
|
||||||
switch (flag) {
|
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) {
|
switch (flagType) {
|
||||||
case FLAG_EVENT_CHECK_INF:
|
case FLAG_EVENT_CHECK_INF:
|
||||||
switch (flag) {
|
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() {
|
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;
|
vanillaQueuedItemEntry = GET_ITEM_NONE;
|
||||||
|
successChimeCooldown = 0;
|
||||||
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);
|
|
||||||
});
|
});
|
||||||
|
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") });
|
||||||
|
|||||||
Reference in New Issue
Block a user