diff --git a/src/lua_hook.h b/src/lua_hook.h index ce79cd1cb..47f9338c5 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -75,6 +75,7 @@ automatically. X (AddonLoaded),\ X (KeyDown),\ X (KeyUp),\ + X (PlayerHitFloor), /* P_PlayerHitFloor */ #define STRING_HOOK_LIST(X) \ X (BotAI),/* B_BuildTailsTiccmd by skin name */\ @@ -161,3 +162,4 @@ int LUA_HookPlayerCmd(player_t *, ticcmd_t *); int LUA_HookMusicChange(const char *oldname, struct MusicChange *); fixed_t LUA_HookPlayerHeight(player_t *player); int LUA_HookPlayerCanEnterSpinGaps(player_t *player); +int LUA_HookPlayerHitFloor(player_t* player); diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 1bf3caf65..d2e03be56 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -1261,3 +1261,14 @@ int LUA_HookPlayerCanEnterSpinGaps(player_t *player) } return hook.status; } + +int LUA_HookPlayerHitFloor(player_t *player) +{ + Hook_State hook; + if (prepare_hook(&hook, 0, HOOK(PlayerHitFloor))) + { + LUA_PushUserdata(gL, player, META_PLAYER); + call_hooks(&hook, 1, res_force); + } + return hook.status; +} \ No newline at end of file diff --git a/src/p_user.c b/src/p_user.c index ba22808ea..99fc71309 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -2379,6 +2379,13 @@ boolean P_PlayerHitFloor(player_t *player, boolean dorollstuff) if ((clipmomz = !(P_CheckDeathPitCollide(player->mo))) && player->mo->health && !player->spectator) { + UINT8 shouldForce = LUA_HookPlayerHitFloor(player); + + if (shouldForce == 1) + return true; + else if (shouldForce == 2) + return false; + if (dorollstuff) { if ((player->charability2 == CA2_SPINDASH) && !((player->pflags & (PF_SPINNING|PF_THOKKED)) == PF_THOKKED) && !(player->charability == CA_THOK && player->secondjump)