diff --git a/src/d_player.h b/src/d_player.h index 755926480..0111083d0 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -382,6 +382,7 @@ typedef struct player_s // fun thing for player sprite angle_t drawangle; + angle_t old_drawangle; // player's ring count INT16 rings; diff --git a/src/p_mobj.c b/src/p_mobj.c index d9910b1ee..90707eae5 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -902,6 +902,12 @@ void P_ResetInterpolationState(mobj_t *mobj) mobj->old_x = mobj->x; mobj->old_y = mobj->y; mobj->old_z = mobj->z; + mobj->old_angle = mobj->angle; + + if (mobj->player) + { + mobj->player->old_drawangle = mobj->player->drawangle; + } } // @@ -914,6 +920,7 @@ void P_ResetPrecipitationInterpolationState(precipmobj_t *mobj) mobj->old_x = mobj->x; mobj->old_y = mobj->y; mobj->old_z = mobj->z; + mobj->old_angle = mobj->angle; } // diff --git a/src/p_mobj.h b/src/p_mobj.h index 7f2736801..9975075a1 100644 --- a/src/p_mobj.h +++ b/src/p_mobj.h @@ -287,6 +287,7 @@ typedef struct mobj_s // More drawing info: to determine current sprite. angle_t angle, pitch, roll; // orientation + angle_t old_angle; angle_t rollangle; spritenum_t sprite; // used to find patch_t and flip value UINT32 frame; // frame number, plus bits see p_pspr.h @@ -415,6 +416,7 @@ typedef struct precipmobj_s // More drawing info: to determine current sprite. angle_t angle, pitch, roll; // orientation + angle_t old_angle; angle_t rollangle; spritenum_t sprite; // used to find patch_t and flip value UINT32 frame; // frame number, plus bits see p_pspr.h diff --git a/src/r_fps.c b/src/r_fps.c index 559520c5d..819df0325 100644 --- a/src/r_fps.c +++ b/src/r_fps.c @@ -185,11 +185,11 @@ void R_InterpolateMobjState(mobj_t *mobj, fixed_t frac, interpmobjstate_t *out) if (mobj->player) { - out->angle = mobj->player->drawangle; + out->angle = R_LerpAngle(mobj->player->old_drawangle, mobj->player->drawangle, frac); } else { - out->angle = mobj->angle; + out->angle = R_LerpAngle(mobj->old_angle, mobj->angle, frac); } } @@ -198,7 +198,7 @@ void R_InterpolatePrecipMobjState(precipmobj_t *mobj, fixed_t frac, interpmobjst out->x = R_LerpFixed(mobj->old_x, mobj->x, frac); out->y = R_LerpFixed(mobj->old_y, mobj->y, frac); out->z = R_LerpFixed(mobj->old_z, mobj->z, frac); - out->angle = mobj->angle; + out->angle = R_LerpAngle(mobj->old_angle, mobj->angle, frac); } static void AddInterpolator(levelinterpolator_t* interpolator)