diff --git a/src/g_game.c b/src/g_game.c index 5791fc7db..faade2de5 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -2090,8 +2090,6 @@ void G_ResetView(UINT8 viewnum, INT32 playernum, boolean onlyactive) camerap = &camera[viewnum-1]; P_ResetCamera(&players[(*displayplayerp)], camerap); - // Why does it need to be done twice? - R_ResetViewInterpolation(viewnum); R_ResetViewInterpolation(viewnum); } diff --git a/src/g_party.cpp b/src/g_party.cpp index 7d2d57e34..1c82a2d1d 100644 --- a/src/g_party.cpp +++ b/src/g_party.cpp @@ -150,7 +150,6 @@ public: // all into its new position -- just snap // instantly into place. R_ResetViewInterpolation(1 + i); - R_ResetViewInterpolation(1 + i); // (Why does it need to be called twice?) } r_splitscreen = size() - 1; diff --git a/src/p_setup.c b/src/p_setup.c index 32f0766eb..e1fbaf15f 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -8093,7 +8093,6 @@ boolean P_LoadLevel(boolean fromnetsave, boolean reloadinggamestate) if (rendermode != render_none && reloadinggamestate == false) { - R_ResetViewInterpolation(0); R_ResetViewInterpolation(0); R_UpdateMobjInterpolators(); diff --git a/src/p_tick.c b/src/p_tick.c index b7e907e6b..54ce0a21f 100644 --- a/src/p_tick.c +++ b/src/p_tick.c @@ -646,6 +646,13 @@ void P_Ticker(boolean run) } } + if (run) + { + // Update old view state BEFORE ticking so resetting + // the old interpolation state from game logic works. + R_UpdateViewInterpolation(); + } + if (objectplacing) { if (OP_FreezeObjectplace()) @@ -982,7 +989,6 @@ void P_Ticker(boolean run) if (run) { R_UpdateLevelInterpolators(); - R_UpdateViewInterpolation(); // Hack: ensure newview is assigned every tic. // Ensures view interpolation is T-1 to T in poor network conditions diff --git a/src/p_user.c b/src/p_user.c index 80afd5aaf..fe15573c4 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -3606,7 +3606,6 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall { P_MoveChaseCamera(player, thiscam, false); R_ResetViewInterpolation(num + 1); - R_ResetViewInterpolation(num + 1); } return (x == thiscam->x && y == thiscam->y && z == thiscam->z && angle == thiscam->aiming);