From 5e37a847f0208cad8bd90bbe891a351d6be688de Mon Sep 17 00:00:00 2001 From: James R Date: Mon, 17 Jan 2022 21:18:38 -0800 Subject: [PATCH] Interpolate viewrollangle before R_CheckViewMorph --- src/d_main.c | 2 ++ src/r_fps.c | 7 ++++++- src/r_fps.h | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index 20f73ea69..477f96436 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -293,6 +293,8 @@ static void D_Display(void) { for (i = 0; i <= r_splitscreen; ++i) { + R_SetViewContext(VIEWCONTEXT_PLAYER1 + i); + R_InterpolateViewRollAngle(rendertimefrac); R_CheckViewMorph(i); } } diff --git a/src/r_fps.c b/src/r_fps.c index 59f10bae8..9d3bf12ee 100644 --- a/src/r_fps.c +++ b/src/r_fps.c @@ -80,6 +80,11 @@ static void R_SetupFreelook(player_t *player, boolean skybox) #undef AIMINGTODY +void R_InterpolateViewRollAngle(fixed_t frac) +{ + viewroll = oldview->roll + R_LerpAngle(oldview->roll, newview->roll, frac); +} + void R_InterpolateView(fixed_t frac) { if (frac < 0) @@ -93,7 +98,7 @@ void R_InterpolateView(fixed_t frac) viewangle = oldview->angle + R_LerpAngle(oldview->angle, newview->angle, frac); aimingangle = oldview->aim + R_LerpAngle(oldview->aim, newview->aim, frac); - viewroll = oldview->roll + R_LerpAngle(oldview->roll, newview->roll, frac); + R_InterpolateViewRollAngle(frac); viewsin = FINESINE(viewangle>>ANGLETOFINESHIFT); viewcos = FINECOSINE(viewangle>>ANGLETOFINESHIFT); diff --git a/src/r_fps.h b/src/r_fps.h index 246c16e64..c93c4701e 100644 --- a/src/r_fps.h +++ b/src/r_fps.h @@ -51,6 +51,8 @@ extern viewvars_t *newview; // Interpolates the current view variables (r_state.h) against the selected view context in R_SetViewContext void R_InterpolateView(fixed_t frac); +// Special function just for software +void R_InterpolateViewRollAngle(fixed_t frac); // Buffer the current new views into the old views. Call once after each real tic. void R_UpdateViewInterpolation(void); // Set the current view context (the viewvars pointed to by newview)