From 79dab78fd33170e4ba907a6b8fa46c5ad8bdfccf Mon Sep 17 00:00:00 2001
From: toasterbabe <rollerorbital@gmail.com>
Date: Sun, 27 Aug 2017 16:35:19 +0100
Subject: [PATCH] * Support FF_SPR2ENDSTATE in interpoleration. * Fix skidding
 interpoleration bug.

---
 src/hardware/hw_md2.c | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index 967dfa03fe..f89a7dc4df 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -1322,16 +1322,20 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 				if (durs > INTERPOLERATION_LIMIT)
 					durs = INTERPOLERATION_LIMIT;
 
-				if (spr->mobj->frame & FF_ANIMATE
+				if (spr->mobj->player && spr->mobj->player->skidtime && spr->mobj->state-states == S_PLAY_WALK) // temporary hack
+					;
+				else if (spr->mobj->frame & FF_ANIMATE
 					|| (spr->mobj->state->nextstate != S_NULL
 					&& states[spr->mobj->state->nextstate].sprite == spr->mobj->sprite
 					&& (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) == spr->mobj->sprite2))
 				{
 					UINT32 nextframe = (spr->mobj->frame & FF_FRAMEMASK) + 1;
-					if (nextframe >= (UINT32)((skin_t*)spr->mobj->skin)->sprites[spr->mobj->sprite2].numframes)
-						nextframe = 0;
-					nextframe = md2->model->spr2frames[spr2*2] + (nextframe % mod);
-					next = &md2->model->frames[nextframe];
+					nextframe %= mod;
+					if (nextframe || !(spr->mobj->state->frame & FF_SPR2ENDSTATE))
+					{
+						nextframe += md2->model->spr2frames[spr2*2];
+						next = &md2->model->frames[nextframe];
+					}
 				}
 			}
 		}
-- 
GitLab