diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index c02490420..b49be43d8 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -4069,10 +4069,6 @@ void AActor::Tick () return; } - // This is necessary to properly interpolate movement outside this function - // like from an ActorMover - ClearInterpolation(); - if (flags5 & MF5_NOINTERACTION) { // only do the minimally necessary things here to save time: diff --git a/src/p_tick.cpp b/src/p_tick.cpp index 78dfa9abb..820a4ff68 100644 --- a/src/p_tick.cpp +++ b/src/p_tick.cpp @@ -119,6 +119,15 @@ void P_Ticker (void) P_ResetSightCounters (false); R_ClearInterpolationPath(); + // Reset all actor interpolations for all actors before the current thinking turn so that indirect actor movement gets properly interpolated. + TThinkerIterator it; + AActor *ac; + + while ((ac = it.Next())) + { + ac->ClearInterpolation(); + } + // Since things will be moving, it's okay to interpolate them in the renderer. r_NoInterpolate = false;