diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 2e05008ca..23aa060fe 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -913,6 +913,83 @@ static int lib_pRailThinker(lua_State *L) return 1; } +static int lib_pXYMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + P_XYMovement(actor); + return 0; +} + +static int lib_pRingXYMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + P_RingXYMovement(actor); + return 0; +} + +static int lib_pSceneryXYMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + P_SceneryXYMovement(actor); + return 0; +} + +static int lib_pZMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + lua_pushboolean(L, P_ZMovement(actor)); + return 1; +} + +static int lib_pRingZMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + P_RingZMovement(actor); + return 0; +} + +static int lib_pSceneryZMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + lua_pushboolean(L, P_SceneryZMovement(actor)); + return 1; +} + +static int lib_pPlayerZMovement(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + P_PlayerZMovement(actor); + return 0; +} + // P_USER //////////// @@ -1283,6 +1360,17 @@ static int lib_pSpawnSkidDust(lua_State *L) return 0; } +static int lib_pMovePlayer(lua_State *L) +{ + player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); + NOHUD + INLEVEL + if (!player) + return LUA_ErrInvalid(L, "player_t"); + P_MovePlayer(player); + return 0; +} + static int lib_pDoPlayerFinish(lua_State *L) { player_t *player = *((player_t **)luaL_checkudata(L, 1, META_PLAYER)); @@ -3271,6 +3359,13 @@ static luaL_Reg lib[] = { {"P_CanRunOnWater",lib_pCanRunOnWater}, {"P_MaceRotate",lib_pMaceRotate}, {"P_RailThinker",lib_pRailThinker}, + {"P_XYMovement",lib_pXYMovement}, + {"P_RingXYMovement",lib_pRingXYMovement}, + {"P_SceneryXYMovement",lib_pSceneryXYMovement}, + {"P_ZMovement",lib_pZMovement}, + {"P_RingZMovement",lib_pRingZMovement}, + {"P_SceneryZMovement",lib_pSceneryZMovement}, + {"P_PlayerZMovement",lib_pPlayerZMovement}, // p_user {"P_GetPlayerHeight",lib_pGetPlayerHeight}, @@ -3302,6 +3397,7 @@ static luaL_Reg lib[] = { {"P_BlackOw",lib_pBlackOw}, {"P_ElementalFire",lib_pElementalFire}, {"P_SpawnSkidDust", lib_pSpawnSkidDust}, + {"P_MovePlayer",lib_pMovePlayer}, {"P_DoPlayerFinish",lib_pDoPlayerFinish}, {"P_DoPlayerExit",lib_pDoPlayerExit}, {"P_InstaThrust",lib_pInstaThrust}, diff --git a/src/p_local.h b/src/p_local.h index 9873a20af..b6c34f357 100644 --- a/src/p_local.h +++ b/src/p_local.h @@ -177,6 +177,7 @@ void P_BlackOw(player_t *player); void P_ElementalFire(player_t *player, boolean cropcircle); void P_SpawnSkidDust(player_t *player, fixed_t radius, boolean sound); +void P_MovePlayer(player_t *player); void P_DoPityCheck(player_t *player); void P_PlayerThink(player_t *player); void P_PlayerAfterThink(player_t *player); diff --git a/src/p_mobj.c b/src/p_mobj.c index c26308a59..6f3f53559 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -2102,7 +2102,7 @@ void P_XYMovement(mobj_t *mo) P_XYFriction(mo, oldx, oldy); } -static void P_RingXYMovement(mobj_t *mo) +void P_RingXYMovement(mobj_t *mo) { I_Assert(mo != NULL); I_Assert(!P_MobjWasRemoved(mo)); @@ -2111,7 +2111,7 @@ static void P_RingXYMovement(mobj_t *mo) P_SlideMove(mo); } -static void P_SceneryXYMovement(mobj_t *mo) +void P_SceneryXYMovement(mobj_t *mo) { fixed_t oldx, oldy; // reducing bobbing/momentum on ice when up against walls @@ -2270,7 +2270,7 @@ static void P_AdjustMobjFloorZ_PolyObjs(mobj_t *mo, subsector_t *subsec) } } -static void P_RingZMovement(mobj_t *mo) +void P_RingZMovement(mobj_t *mo) { I_Assert(mo != NULL); I_Assert(!P_MobjWasRemoved(mo)); @@ -2337,7 +2337,7 @@ boolean P_CheckSolidLava(ffloor_t *rover) // P_ZMovement // Returns false if the mobj was killed/exploded/removed, true otherwise. // -static boolean P_ZMovement(mobj_t *mo) +boolean P_ZMovement(mobj_t *mo) { fixed_t dist, delta; boolean onground; @@ -2891,7 +2891,7 @@ static boolean P_PlayerPolyObjectZMovement(mobj_t *mo) return stopmovecut; } -static void P_PlayerZMovement(mobj_t *mo) +void P_PlayerZMovement(mobj_t *mo) { boolean onground; @@ -3069,7 +3069,7 @@ nightsdone: } } -static boolean P_SceneryZMovement(mobj_t *mo) +boolean P_SceneryZMovement(mobj_t *mo) { // Intercept the stupid 'fall through 3dfloors' bug if (mo->subsector->sector->ffloors) diff --git a/src/p_mobj.h b/src/p_mobj.h index c94dbd650..643e3d04c 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -471,6 +471,12 @@ void P_NullPrecipThinker(precipmobj_t *mobj); void P_RemovePrecipMobj(precipmobj_t *mobj); void P_SetScale(mobj_t *mobj, fixed_t newscale); void P_XYMovement(mobj_t *mo); +void P_RingXYMovement(mobj_t *mo); +void P_SceneryXYMovement(mobj_t *mo); +boolean P_ZMovement(mobj_t *mo); +void P_RingZMovement(mobj_t *mo); +boolean P_SceneryZMovement(mobj_t *mo); +void P_PlayerZMovement(mobj_t *mo); void P_EmeraldManager(void); extern INT32 modulothing; diff --git a/src/p_user.c b/src/p_user.c index c62606970..679f4064b 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -7889,7 +7889,7 @@ static void P_SkidStuff(player_t *player) // // P_MovePlayer -static void P_MovePlayer(player_t *player) +void P_MovePlayer(player_t *player) { ticcmd_t *cmd; INT32 i;