diff --git a/src/d_player.h b/src/d_player.h index d817c4231..cb527bdc1 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -333,6 +333,7 @@ typedef struct player_s // Caveat: ticcmd_t is ATTRPACK! Be careful what precedes it. ticcmd_t cmd; + ticcmd_t oldcmd; // from the previous tic playerstate_t playerstate; diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index cfab3696e..ad1669373 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -192,6 +192,8 @@ static int player_get(lua_State *L) LUA_PushUserdata(L, plr->mo, META_MOBJ); else if (fastcmp(field,"cmd")) LUA_PushUserdata(L, &plr->cmd, META_TICCMD); + else if (fastcmp(field,"oldcmd")) + LUA_PushUserdata(L, &plr->oldcmd, META_TICCMD); else if (fastcmp(field,"respawn")) LUA_PushUserdata(L, &plr->respawn, META_RESPAWN); else if (fastcmp(field,"playerstate")) @@ -526,6 +528,8 @@ static int player_set(lua_State *L) } else if (fastcmp(field,"cmd")) return NOSET; + else if (fastcmp(field,"oldcmd")) + return NOSET; else if (fastcmp(field,"respawn")) return NOSET; else if (fastcmp(field,"playerstate")) diff --git a/src/p_tick.c b/src/p_tick.c index 58b11406f..1f396a5fd 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -768,6 +768,11 @@ void P_Ticker(boolean run) K_TimerInit(); } + for (i = 0; i < MAXPLAYERS; i++) + { + G_CopyTiccmd(&players[i].oldcmd, &players[i].cmd, 1); + } + // Z_CheckMemCleanup(); }