mirror of
				https://github.com/coop-deluxe/sm64coopdx.git
				synced 2025-10-30 08:01:01 +00:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									42f05cc790
								
							
						
					
					
						commit
						ce8350514c
					
				
					 15 changed files with 126 additions and 46 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12524,4 +12524,3 @@ s32 update_rom_hack_camera(struct Camera *c, Vec3f focus, Vec3f pos) {
 | 
			
		|||
    c->nextYaw = c->yaw;
 | 
			
		||||
    return camYaw;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
;
 | 
			
		||||
;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		
		Reference in a new issue