diff --git a/src/d_clisrv.c b/src/d_clisrv.c index 990f8401a..53bbaf0b6 100644 --- a/src/d_clisrv.c +++ b/src/d_clisrv.c @@ -561,6 +561,16 @@ void D_ResetTiccmds(void) D_Clearticcmd(textcmds[i]->tic); } +void D_ResetTiccmdAngle(UINT8 ss, angle_t angle) +{ + INT32 i; + + for (i = 0; i < MAXGENTLEMENDELAY; ++i) + { + localcmds[ss][i].angle = angle >> TICCMD_REDUCE; + } +} + ticcmd_t *D_LocalTiccmd(UINT8 ss) { return &localcmds[ss][0]; diff --git a/src/d_clisrv.h b/src/d_clisrv.h index 79d5c16cf..e2dd85bff 100644 --- a/src/d_clisrv.h +++ b/src/d_clisrv.h @@ -617,6 +617,7 @@ INT32 D_NumPlayers(void); boolean D_IsPlayerHumanAndGaming(INT32 player_number); void D_ResetTiccmds(void); +void D_ResetTiccmdAngle(UINT8 ss, angle_t angle); ticcmd_t *D_LocalTiccmd(UINT8 ss); tic_t GetLag(INT32 node); diff --git a/src/p_user.c b/src/p_user.c index f7a7967b6..c199eea76 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -4689,6 +4689,22 @@ void P_ForceLocalAngle(player_t *player, angle_t angle) break; } } + + // jartha: OK, I don't really know how ticcmds work. The + // specific problem I'm trying to fix is that, on level + // load, the player angle gets reset. But the ticcmds + // copied in afterward don't match this angle, and they + // influence the player steering. + for (i = 0; i <= splitscreen; i++) + { + if (player == &players[g_localplayers[i]]) + { + D_ResetTiccmdAngle(i, angle); + localsteering[i] = angle; + + break; + } + } } boolean P_PlayerFullbright(player_t *player)