Modularize Floor Switches fix hook (#5870)
* Modularizes Floor Switches fix hook * Remove unused include for z_obj_switch.h * Convert to ID hook
This commit is contained in:
26
soh/soh/Enhancements/Fixes/FloorSwitches.cpp
Normal file
26
soh/soh/Enhancements/Fixes/FloorSwitches.cpp
Normal file
@@ -0,0 +1,26 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
|
||||
extern "C" {
|
||||
#include "macros.h"
|
||||
#include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
||||
}
|
||||
|
||||
static constexpr int32_t CVAR_FLOOR_SWITCHES_DEFAULT = 0;
|
||||
#define CVAR_FLOOR_SWITCHES_NAME CVAR_ENHANCEMENT("FixFloorSwitches")
|
||||
#define CVAR_FLOOR_SWITCHES_VALUE CVarGetInteger(CVAR_FLOOR_SWITCHES_NAME, CVAR_FLOOR_SWITCHES_DEFAULT)
|
||||
|
||||
static void OnInitFloorSwitches(void* refActor) {
|
||||
ObjSwitch* switchActor = reinterpret_cast<ObjSwitch*>(refActor);
|
||||
s32 type = (switchActor->dyna.actor.params & 7);
|
||||
|
||||
if (switchActor->dyna.actor.params == 0x1200 || switchActor->dyna.actor.params == 0x3A00) {
|
||||
switchActor->dyna.actor.world.pos.y -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void RegisterFloorSwitchesFix() {
|
||||
COND_ID_HOOK(OnActorInit, ACTOR_OBJ_SWITCH, CVAR_FLOOR_SWITCHES_VALUE, OnInitFloorSwitches);
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(RegisterFloorSwitchesFix, { CVAR_FLOOR_SWITCHES_NAME });
|
||||
@@ -28,7 +28,6 @@
|
||||
#include "src/overlays/actors/ovl_En_Firefly/z_en_firefly.h"
|
||||
#include "src/overlays/actors/ovl_En_Xc/z_en_xc.h"
|
||||
#include "src/overlays/actors/ovl_Fishing/z_fishing.h"
|
||||
#include "src/overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
||||
#include "src/overlays/actors/ovl_Door_Shutter/z_door_shutter.h"
|
||||
#include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h"
|
||||
#include "src/overlays/actors/ovl_En_Elf/z_en_elf.h"
|
||||
@@ -842,22 +841,6 @@ void RegisterToTMedallions() {
|
||||
});
|
||||
}
|
||||
|
||||
void RegisterFloorSwitchesHook() {
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnActorInit>([](void* refActor) {
|
||||
Actor* actor = static_cast<Actor*>(refActor);
|
||||
if (actor->id != ACTOR_OBJ_SWITCH || !CVarGetInteger(CVAR_ENHANCEMENT("FixFloorSwitches"), 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
ObjSwitch* switchActor = reinterpret_cast<ObjSwitch*>(actor);
|
||||
s32 type = (switchActor->dyna.actor.params & 7);
|
||||
|
||||
if (switchActor->dyna.actor.params == 0x1200 || switchActor->dyna.actor.params == 0x3A00) {
|
||||
switchActor->dyna.actor.world.pos.y -= 1;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void RegisterPauseMenuHooks() {
|
||||
static bool pauseWarpHooksRegistered = false;
|
||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([&]() {
|
||||
@@ -914,7 +897,6 @@ void InitMods() {
|
||||
RegisterBossDefeatTimestamps();
|
||||
RegisterRandomizedEnemySizes();
|
||||
RegisterToTMedallions();
|
||||
RegisterFloorSwitchesHook();
|
||||
RegisterPatchHandHandler();
|
||||
RegisterHurtContainerModeHandler();
|
||||
RegisterPauseMenuHooks();
|
||||
|
||||
Reference in New Issue
Block a user