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_Firefly/z_en_firefly.h"
|
||||||
#include "src/overlays/actors/ovl_En_Xc/z_en_xc.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_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_Shutter/z_door_shutter.h"
|
||||||
#include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h"
|
#include "src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.h"
|
||||||
#include "src/overlays/actors/ovl_En_Elf/z_en_elf.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() {
|
void RegisterPauseMenuHooks() {
|
||||||
static bool pauseWarpHooksRegistered = false;
|
static bool pauseWarpHooksRegistered = false;
|
||||||
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([&]() {
|
GameInteractor::Instance->RegisterGameHook<GameInteractor::OnGameFrameUpdate>([&]() {
|
||||||
@@ -914,7 +897,6 @@ void InitMods() {
|
|||||||
RegisterBossDefeatTimestamps();
|
RegisterBossDefeatTimestamps();
|
||||||
RegisterRandomizedEnemySizes();
|
RegisterRandomizedEnemySizes();
|
||||||
RegisterToTMedallions();
|
RegisterToTMedallions();
|
||||||
RegisterFloorSwitchesHook();
|
|
||||||
RegisterPatchHandHandler();
|
RegisterPatchHandHandler();
|
||||||
RegisterHurtContainerModeHandler();
|
RegisterHurtContainerModeHandler();
|
||||||
RegisterPauseMenuHooks();
|
RegisterPauseMenuHooks();
|
||||||
|
|||||||
Reference in New Issue
Block a user