From ce8350514cb189f438103cead1d9184a07b61ae6 Mon Sep 17 00:00:00 2001 From: Baconator2558 <77943363+Baconator2558@users.noreply.github.com> Date: Mon, 7 Apr 2025 17:47:52 -0500 Subject: [PATCH] Add HOOK_ALLOW_FORCE_WATER_ACTION (#731) * Update constants.md * Update constants.lua * Update smlua_constants_autogen.c * Update surface_terrains.h * Update hooks.md * Add files via upload * Update constants.lua * Update smlua_hooks.h * Update smlua_constants_autogen.c * Update constants.md * Update mario_actions_airborne.c * Update mario_actions_airborne.c * Update mario_actions_stationary.c * Update mario_actions_automatic.c * Update mario_actions_object.c * Update mario_actions_moving.c * Update mario_actions_submerged.c * Update mario_actions_airborne.c * Update mario_actions_stationary.c * Update mario_actions_automatic.c * Update mario_actions_object.c * Update mario_actions_moving.c * Update mario_actions_submerged.c * Update hooks.md * Update hooks.md * Update mario_actions_submerged.c * Update hooks.md * deal with gCamera being exposed incorrectly * update gCamera as the pointer is updated * served time for crimes against C * Update revamped flying damage (#722) * forgot to null check it * lois (#5) * deal with gCamera being exposed incorrectly * update gCamera as the pointer is updated * served time for crimes against C * Update revamped flying damage (#722) * forgot to null check it * Fix/optimize/improve lighting engine * Camera fixes --------- Co-authored-by: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Co-authored-by: Sunk <69110309+Sunketchupm@users.noreply.github.com> Co-authored-by: Agent X <44549182+AgentXLP@users.noreply.github.com> * Update lighting_engine.c * Update lighting_engine.c * bart (#6) * deal with gCamera being exposed incorrectly * update gCamera as the pointer is updated * served time for crimes against C * Update revamped flying damage (#722) * forgot to null check it * Fix/optimize/improve lighting engine * Camera fixes * Fix small LE whoopsie * Update CS to v1.13 * New coopnet libraries for macOS (#725) * Fix camera issues (#726) * Fix vanilla camera in automatic * Correct dpad movement direction Matches the same direction as romhack camera now * Make Git hash only dev or debug * Fixes * fix some script errors in mods that pass in nil objects technically this is the mod's fault, but this is more consistent behavior for a cheap fix * Further fix camera (#727) * Further fix camera * Remove re-override * fix scrolling textures simply not scrolling this was caused by the duplicated vertices commit * free stuff --------- Co-authored-by: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Co-authored-by: Sunk <69110309+Sunketchupm@users.noreply.github.com> Co-authored-by: Agent X <44549182+AgentXLP@users.noreply.github.com> Co-authored-by: EmeraldLockdown <86802223+EmeraldLoc@users.noreply.github.com> * Update smlua_cobject.c * Update mario_step.c * Update bettercamera.inc.h * Update camera.c * Update smlua_cobject.h * Update camera.c * Add files via upload * Update constants.lua * Update constants.md * Update hooks.md * Update smlua_constants_autogen.c * Update smlua_hooks.h * Update smlua_hooks.h * Update smlua_hooks.c * Update mario_actions_airborne.c * Update mario_actions_automatic.c * Update mario_actions_moving.c * Update mario_actions_object.c * Update mario_actions_stationary.c * Update mario_actions_submerged.c * Update mario_step.c * Update mario_actions_airborne.c * Update mario_actions_automatic.c * Update mario_actions_moving.c * Update mario_actions_object.c * Update mario_actions_stationary.c * Update mario_actions_submerged.c * Update hooks.md * Update mario_actions_airborne.c * Update mario_actions_automatic.c * Update mario_actions_moving.c * Update mario_actions_object.c * Update mario_actions_stationary.c * Update mario_actions_submerged.c * Update mario_actions_submerged.c * Update mario_step.c * Update mario_actions_stationary.c * Update mario_actions_submerged.c * Update mario_step.c * Update mario_actions_airborne.c * Update mario_actions_airborne.c * Update mario_actions_automatic.c * Update mario_actions_moving.c * Update mario_actions_object.c * Update mario_actions_submerged.c --------- Co-authored-by: Isaac0-dev <62234577+Isaac0-dev@users.noreply.github.com> Co-authored-by: Sunk <69110309+Sunketchupm@users.noreply.github.com> Co-authored-by: Agent X <44549182+AgentXLP@users.noreply.github.com> Co-authored-by: EmeraldLockdown <86802223+EmeraldLoc@users.noreply.github.com> --- autogen/lua_definitions/constants.lua | 4 ++- docs/lua/constants.md | 3 +- docs/lua/guides/hooks.md | 1 + src/game/camera.c | 1 - src/game/mario_actions_airborne.c | 17 +++++++--- src/game/mario_actions_automatic.c | 6 +++- src/game/mario_actions_moving.c | 6 +++- src/game/mario_actions_object.c | 9 +++-- src/game/mario_actions_stationary.c | 15 +++++---- src/game/mario_actions_submerged.c | 47 +++++++++++++++++---------- src/game/mario_step.c | 20 ++++++++---- src/pc/lua/smlua_cobject.h | 2 +- src/pc/lua/smlua_constants_autogen.c | 5 +-- src/pc/lua/smlua_hooks.c | 33 +++++++++++++++++++ src/pc/lua/smlua_hooks.h | 3 ++ 15 files changed, 126 insertions(+), 46 deletions(-) diff --git a/autogen/lua_definitions/constants.lua b/autogen/lua_definitions/constants.lua index f06e52a0f..dccfea3c1 100644 --- a/autogen/lua_definitions/constants.lua +++ b/autogen/lua_definitions/constants.lua @@ -8865,7 +8865,8 @@ HOOK_BEFORE_GEO_PROCESS = 49 --- @type LuaHookedEventType HOOK_ON_GEO_PROCESS_CHILDREN = 50 --- @type LuaHookedEventType HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS = 51 --- @type LuaHookedEventType HOOK_ON_INTERACTIONS = 52 --- @type LuaHookedEventType -HOOK_MAX = 53 --- @type LuaHookedEventType +HOOK_ALLOW_FORCE_WATER_ACTION = 53 --- @type LuaHookedEventType +HOOK_MAX = 54 --- @type LuaHookedEventType --- @alias LuaHookedEventType --- | `HOOK_UPDATE` @@ -8921,6 +8922,7 @@ HOOK_MAX = 53 --- @type LuaHookedEventType --- | `HOOK_ON_GEO_PROCESS_CHILDREN` --- | `HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS` --- | `HOOK_ON_INTERACTIONS` +--- | `HOOK_ALLOW_FORCE_WATER_ACTION` --- | `HOOK_MAX` ACTION_HOOK_EVERY_FRAME = 0 --- @type LuaActionHookType diff --git a/docs/lua/constants.md b/docs/lua/constants.md index a99e82acc..1ce6304e3 100644 --- a/docs/lua/constants.md +++ b/docs/lua/constants.md @@ -3769,7 +3769,8 @@ | HOOK_ON_GEO_PROCESS_CHILDREN | 50 | | HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS | 51 | | HOOK_ON_INTERACTIONS | 52 | -| HOOK_MAX | 53 | +| HOOK_ALLOW_FORCE_WATER_ACTION | 53 | +| HOOK_MAX | 54 | ### [enum LuaActionHookType](#LuaActionHookType) | Identifier | Value | diff --git a/docs/lua/guides/hooks.md b/docs/lua/guides/hooks.md index f167f7302..c44c4275f 100644 --- a/docs/lua/guides/hooks.md +++ b/docs/lua/guides/hooks.md @@ -145,6 +145,7 @@ The lua functions sent to `hook_event()` will be automatically called by SM64 wh | HOOK_ON_GEO_PROCESS_CHILDREN | Called when the children of a GeoLayout node is processed **Note:** You must set the `hookProcess` field of the parent graph node to a non-zero value | [GraphNode](../structs.md#GraphNode) graphNode, `integer` matStackIndex | | HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS | Called before running Mario's geometry input logic, return `false` to not run it. | [MarioState](../structs.md) m | | HOOK_ON_INTERACTIONS | Called when the Mario interactions are processed | [MarioState](../structs.md#MarioState) mario | +| HOOK_ALLOW_FORCE_WATER_ACTION | Called when executing a non-water action while under the water's surface, or vice versa. Return `false` to prevent the player from being forced out of the action at the water's surface | [MarioState](../structs.md#MarioState) mario, `boolean` isInWaterAction | ### Parameters diff --git a/src/game/camera.c b/src/game/camera.c index ac69d689d..f912fbdfd 100644 --- a/src/game/camera.c +++ b/src/game/camera.c @@ -12524,4 +12524,3 @@ s32 update_rom_hack_camera(struct Camera *c, Vec3f focus, Vec3f pos) { c->nextYaw = c->yaw; return camYaw; } - diff --git a/src/game/mario_actions_airborne.c b/src/game/mario_actions_airborne.c index 706e3e825..5bf9454b1 100644 --- a/src/game/mario_actions_airborne.c +++ b/src/game/mario_actions_airborne.c @@ -2297,18 +2297,25 @@ if on certain wind surfaces. Also resets `m.quicksandDepth` |descriptionEnd| */ s32 check_common_airborne_cancels(struct MarioState *m) { if (!m) { return 0; } + bool allow = true; if (m->pos[1] < m->waterLevel - 100) { - return set_water_plunge_action(m); + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + return set_water_plunge_action(m); + } } + allow = true; if (m->input & INPUT_SQUISHED) { return drop_and_set_mario_action(m, ACT_SQUISHED, 0); } - bool allow = true; - smlua_call_event_hooks_mario_param_and_int_ret_bool(HOOK_ALLOW_HAZARD_SURFACE, m, HAZARD_TYPE_VERTICAL_WIND, &allow); - if (allow && m->floor && m->floor->type == SURFACE_VERTICAL_WIND && (m->action & ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)) { - return drop_and_set_mario_action(m, ACT_VERTICAL_WIND, 0); + + if (m->floor && m->floor->type == SURFACE_VERTICAL_WIND && (m->action & ACT_FLAG_ALLOW_VERTICAL_WIND_ACTION)) { + smlua_call_event_hooks_mario_param_and_int_ret_bool(HOOK_ALLOW_HAZARD_SURFACE, m, HAZARD_TYPE_VERTICAL_WIND, &allow); + if (allow) { + return drop_and_set_mario_action(m, ACT_VERTICAL_WIND, 0); + } } m->quicksandDepth = 0.0f; diff --git a/src/game/mario_actions_automatic.c b/src/game/mario_actions_automatic.c index 355957bfa..fd274eb7f 100644 --- a/src/game/mario_actions_automatic.c +++ b/src/game/mario_actions_automatic.c @@ -1161,7 +1161,11 @@ Checks if Mario should cancel his current automatic action, primarily by detecti s32 check_common_automatic_cancels(struct MarioState *m) { if (!m) { return 0; } if (m->pos[1] < m->waterLevel - 100) { - return set_water_plunge_action(m); + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + return set_water_plunge_action(m); + } } return FALSE; diff --git a/src/game/mario_actions_moving.c b/src/game/mario_actions_moving.c index e77cd7b02..c3fe4aa19 100644 --- a/src/game/mario_actions_moving.c +++ b/src/game/mario_actions_moving.c @@ -2175,7 +2175,11 @@ Performs common checks when Mario is in a moving state, transitions to water plu s32 check_common_moving_cancels(struct MarioState *m) { if (!m) { return FALSE; } if (m->pos[1] < m->waterLevel - 100) { - return set_water_plunge_action(m); + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + return set_water_plunge_action(m); + } } if (!(m->action & ACT_FLAG_INVULNERABLE) && (m->input & INPUT_UNKNOWN_10)) { diff --git a/src/game/mario_actions_object.c b/src/game/mario_actions_object.c index c1b362496..bfd310239 100644 --- a/src/game/mario_actions_object.c +++ b/src/game/mario_actions_object.c @@ -478,9 +478,12 @@ s32 check_common_object_cancels(struct MarioState *m) { if (!m) { return 0; } if (m->playerIndex != 0) { return FALSE; } - f32 waterSurface = m->waterLevel - 100; - if (m->pos[1] < waterSurface) { - return set_water_plunge_action(m); + if (m->pos[1] < m->waterLevel - 100) { + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + return set_water_plunge_action(m); + } } if (m->input & INPUT_SQUISHED) { diff --git a/src/game/mario_actions_stationary.c b/src/game/mario_actions_stationary.c index 5e40013da..393b1c083 100644 --- a/src/game/mario_actions_stationary.c +++ b/src/game/mario_actions_stationary.c @@ -1151,15 +1151,18 @@ s32 act_first_person(struct MarioState *m) { s32 check_common_stationary_cancels(struct MarioState *m) { if (!m) { return 0; } if (m->playerIndex != 0) { return FALSE; } - if (m->pos[1] < m->waterLevel - 100) { - if (m->action == ACT_SPAWN_SPIN_LANDING) { - if (m == &gMarioStates[0]) { - load_level_init_text(0); + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + if (m->action == ACT_SPAWN_SPIN_LANDING) { + if (m == &gMarioStates[0]) { + load_level_init_text(0); + } } + update_mario_sound_and_camera(m); + return set_water_plunge_action(m); } - update_mario_sound_and_camera(m); - return set_water_plunge_action(m); } if (m->input & INPUT_SQUISHED) { diff --git a/src/game/mario_actions_submerged.c b/src/game/mario_actions_submerged.c index 54468b5bc..8874c28ff 100644 --- a/src/game/mario_actions_submerged.c +++ b/src/game/mario_actions_submerged.c @@ -203,10 +203,14 @@ u32 perform_water_step(struct MarioState *m) { nextPos[0] = m->pos[0] + step[0]; nextPos[1] = m->pos[1] + step[1]; nextPos[2] = m->pos[2] + step[2]; - + if (nextPos[1] > m->waterLevel - 80) { - nextPos[1] = m->waterLevel - 80; - m->vel[1] = 0.0f; + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, true, &allow); + if (allow) { + nextPos[1] = m->waterLevel - 80; + m->vel[1] = 0.0f; + } } stepResult = perform_water_full_step(m, nextPos); @@ -528,7 +532,10 @@ static s32 check_water_jump(struct MarioState *m) { s32 probe = (s32)(m->pos[1] + 1.5f); if (m->input & INPUT_A_PRESSED) { - if (probe >= m->waterLevel - 80 && m->faceAngle[0] >= 0 && m->controller->stickY < -60.0f) { + if (probe >= m->waterLevel - 80 && m->faceAngle[0] >= 0 && m->controller->stickY < -60.0f) { + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, true, &allow); + if (!allow) { return FALSE; } vec3s_set(m->angleVel, 0, 0, 0); m->vel[1] = 62.0f; @@ -1614,20 +1621,24 @@ static s32 act_hold_metal_water_fall_land(struct MarioState *m) { static s32 check_common_submerged_cancels(struct MarioState *m) { if (!m) { return 0; } if (m->pos[1] > m->waterLevel - 80) { - if (m->waterLevel - 80 > m->floorHeight) { - m->pos[1] = m->waterLevel - 80; - } else { - //! If you press B to throw the shell, there is a ~5 frame window - // where your held object is the shell, but you are not in the - // water shell swimming action. This allows you to hold the water - // shell on land (used for cloning in DDD). - if (m->action == ACT_WATER_SHELL_SWIMMING && m->heldObj != NULL && m->playerIndex == 0) { - m->heldObj->oInteractStatus = INT_STATUS_STOP_RIDING; - m->heldObj = NULL; - stop_shell_music(); - } - - return transition_submerged_to_walking(m); + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, true, &allow); + if (allow) { + if (m->waterLevel - 80 > m->floorHeight) { + m->pos[1] = m->waterLevel - 80; + } else { + //! If you press B to throw the shell, there is a ~5 frame window + // where your held object is the shell, but you are not in the + // water shell swimming action. This allows you to hold the water + // shell on land (used for cloning in DDD). + if (m->action == ACT_WATER_SHELL_SWIMMING && m->heldObj != NULL && m->playerIndex == 0) { + m->heldObj->oInteractStatus = INT_STATUS_STOP_RIDING; + m->heldObj = NULL; + stop_shell_music(); + } + + return transition_submerged_to_walking(m); + } } } diff --git a/src/game/mario_step.c b/src/game/mario_step.c index 963e72832..a36f03d5a 100644 --- a/src/game/mario_step.c +++ b/src/game/mario_step.c @@ -310,9 +310,13 @@ static s32 perform_ground_quarter_step(struct MarioState *m, Vec3f nextPos) { } if ((m->action & ACT_FLAG_RIDING_SHELL) && floorHeight < waterLevel) { - floorHeight = waterLevel; - floor = &gWaterSurfacePseudoFloor; - floor->originOffset = floorHeight; //! Wrong origin offset (no effect) + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + floorHeight = waterLevel; + floor = &gWaterSurfacePseudoFloor; + floor->originOffset = floorHeight; //! Wrong origin offset (no effect) + } } if (nextPos[1] > floorHeight + 100.0f) { @@ -495,9 +499,13 @@ s32 perform_air_quarter_step(struct MarioState *m, Vec3f intendedPos, u32 stepAr } if ((m->action & ACT_FLAG_RIDING_SHELL) && floorHeight < waterLevel) { - floorHeight = waterLevel; - floor = &gWaterSurfacePseudoFloor; - floor->originOffset = floorHeight; //! Incorrect origin offset (no effect) + bool allow = true; + smlua_call_event_hooks_mario_param_and_bool_ret_bool(HOOK_ALLOW_FORCE_WATER_ACTION, m, false, &allow); + if (allow) { + floorHeight = waterLevel; + floor = &gWaterSurfacePseudoFloor; + floor->originOffset = floorHeight; //! Incorrect origin offset (no effect) + } } //! This check uses f32, but findFloor uses short (overflow jumps) diff --git a/src/pc/lua/smlua_cobject.h b/src/pc/lua/smlua_cobject.h index 717240798..403f4e828 100644 --- a/src/pc/lua/smlua_cobject.h +++ b/src/pc/lua/smlua_cobject.h @@ -84,4 +84,4 @@ void smlua_cobject_init_globals(void); void smlua_cobject_init_per_file_globals(const char* path); void smlua_bind_cobject(void); -#endif \ No newline at end of file +#endif diff --git a/src/pc/lua/smlua_constants_autogen.c b/src/pc/lua/smlua_constants_autogen.c index e351eb2e1..a18561e20 100644 --- a/src/pc/lua/smlua_constants_autogen.c +++ b/src/pc/lua/smlua_constants_autogen.c @@ -3630,7 +3630,8 @@ char gSmluaConstants[] = "" "HOOK_ON_GEO_PROCESS_CHILDREN=50\n" "HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS=51\n" "HOOK_ON_INTERACTIONS=52\n" -"HOOK_MAX=53\n" +"HOOK_ALLOW_FORCE_WATER_ACTION=53\n" +"HOOK_MAX=54\n" "ACTION_HOOK_EVERY_FRAME=0\n" "ACTION_HOOK_GRAVITY=1\n" "ACTION_HOOK_MAX=2\n" @@ -4749,4 +4750,4 @@ char gSmluaConstants[] = "" "VERSION_NUMBER=40\n" "MINOR_VERSION_NUMBER=0\n" "MAX_VERSION_LENGTH=128\n" -; \ No newline at end of file +; diff --git a/src/pc/lua/smlua_hooks.c b/src/pc/lua/smlua_hooks.c index 6eee3dbaa..aaaed5510 100644 --- a/src/pc/lua/smlua_hooks.c +++ b/src/pc/lua/smlua_hooks.c @@ -955,6 +955,39 @@ bool smlua_call_event_hooks_mario_param_and_int_ret_int(enum LuaHookedEventType return false; } +void smlua_call_event_hooks_mario_param_and_bool_ret_bool(enum LuaHookedEventType hookType, struct MarioState* m, bool param, bool* returnValue) { + lua_State* L = gLuaState; + if (L == NULL) { return; } + struct LuaHookedEvent* hook = &sHookedEvents[hookType]; + for (int i = 0; i < hook->count; i++) { + s32 prevTop = lua_gettop(L); + + // push the callback onto the stack + lua_rawgeti(L, LUA_REGISTRYINDEX, hook->reference[i]); + + // push mario state + lua_getglobal(L, "gMarioStates"); + lua_pushinteger(L, m->playerIndex); + lua_gettable(L, -2); + lua_remove(L, -2); + + // push param + lua_pushboolean(L, param); + + // call the callback + if (0 != smlua_call_hook(L, 2, 1, 0, hook->mod[i])) { + LOG_LUA("Failed to call the callback: %u", hookType); + continue; + } + + // output the return value + if (lua_type(L, -1) == LUA_TBOOLEAN) { + *returnValue = smlua_to_boolean(L, -1); + } + lua_settop(L, prevTop); + } +} + bool smlua_call_event_hooks_mario_param_ret_float(enum LuaHookedEventType hookType, struct MarioState* m, f32* returnValue) { lua_State* L = gLuaState; if (L == NULL) { return false; } diff --git a/src/pc/lua/smlua_hooks.h b/src/pc/lua/smlua_hooks.h index eb7119fac..8fea7c460 100644 --- a/src/pc/lua/smlua_hooks.h +++ b/src/pc/lua/smlua_hooks.h @@ -65,6 +65,7 @@ enum LuaHookedEventType { HOOK_ON_GEO_PROCESS_CHILDREN, HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS, HOOK_ON_INTERACTIONS, + HOOK_ALLOW_FORCE_WATER_ACTION, HOOK_MAX, }; @@ -122,6 +123,7 @@ static const char* LuaHookedEventTypeName[] = { "HOOK_ON_GEO_PROCESS_CHILDREN", "HOOK_MARIO_OVERRIDE_GEOMETRY_INPUTS", "HOOK_ON_INTERACTIONS", + "HOOK_ALLOW_FORCE_WATER_ACTION", "HOOK_MAX" }; @@ -196,6 +198,7 @@ bool smlua_call_event_hooks_mario_character_sound_param_ret_int(enum LuaHookedEv void smlua_call_event_hooks_mario_action_params_ret_int(enum LuaHookedEventType hookType, struct MarioState *m, u32 action, u32* returnValue); void smlua_call_event_hooks_mario_param_and_int_ret_bool(enum LuaHookedEventType hookType, struct MarioState* m, s32 param, bool* returnValue); bool smlua_call_event_hooks_mario_param_and_int_ret_int(enum LuaHookedEventType hookType, struct MarioState* m, s32 param, s32* returnValue); +void smlua_call_event_hooks_mario_param_and_bool_ret_bool(enum LuaHookedEventType hookType, struct MarioState* m, bool param, bool* returnValue); bool smlua_call_event_hooks_mario_param_ret_float(enum LuaHookedEventType hookType, struct MarioState* m, f32* returnValue); bool smlua_call_event_hooks_mario_param_and_int_and_int_ret_int(enum LuaHookedEventType hookType, struct MarioState* m, s32 param, u32 args, s32* returnValue); void smlua_call_event_hooks_graph_node_object_and_int_param(enum LuaHookedEventType hookType, struct GraphNodeObject* node, s32 param);