From b1f402538f6df1139d4b7e19b83805ad47eb33ee Mon Sep 17 00:00:00 2001
From: mazmazz <mar.marcoz@outlook.com>
Date: Sun, 4 Aug 2019 21:32:41 -0400
Subject: [PATCH] Post-merge fixes (todo: spr2)

---
 src/hardware/hw_md2.c | 69 +++++++++++++++----------------------------
 1 file changed, 24 insertions(+), 45 deletions(-)

diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index f0783bfe4..0f1c89b99 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -860,13 +860,8 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 		GLPatch_t *gpatch;
 		INT32 durs = spr->mobj->state->tics;
 		INT32 tics = spr->mobj->tics;
-<<<<<<< HEAD
 		//mdlframe_t *next = NULL;
 		const UINT8 flip = (UINT8)((spr->mobj->eflags & MFE_VERTICALFLIP) == MFE_VERTICALFLIP);
-=======
-		md2_frame_t *curr, *next = NULL;
-		const UINT8 flip = (UINT8)(!(spr->mobj->eflags & MFE_VERTICALFLIP) != !(spr->mobj->frame & FF_VERTICALFLIP));
->>>>>>> origin/master
 		spritedef_t *sprdef;
 		spriteframe_t *sprframe;
 		float finalscale;
@@ -955,17 +950,10 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 			tics = spr->mobj->anim_duration;
 		}
 
-<<<<<<< HEAD
-		//FIXME: this is not yet correct
-		frame = (spr->mobj->frame & FF_FRAMEMASK) % md2->model->meshes[0].numFrames;
-
-#ifdef USE_MODEL_NEXTFRAME
-		if (cv_grmdls.value == 1 && tics <= durs)
-=======
 #define INTERPOLERATION_LIMIT TICRATE/4
 
+#if 0
 		if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY && md2->model->spr2frames)
->>>>>>> origin/master
 		{
 			UINT8 spr2 = P_GetModelSprite2(md2, spr->mobj->skin, spr->mobj->sprite2, spr->mobj->player);
 			UINT8 mod = md2->model->spr2frames[spr2*2 + 1] ? md2->model->spr2frames[spr2*2 + 1] : md2->model->header.numFrames;
@@ -979,13 +967,6 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 			curr = &md2->model->frames[md2->model->spr2frames[spr2*2] + frame];
 			if (cv_grmd2.value == 1 && tics <= durs && tics <= INTERPOLERATION_LIMIT)
 			{
-<<<<<<< HEAD
-				nextFrame = (spr->mobj->frame & FF_FRAMEMASK) + 1;
-				if (nextFrame >= spr->mobj->state->var1)
-					nextFrame = (spr->mobj->state->frame & FF_FRAMEMASK);
-				nextFrame %= md2->model->meshes[0].numFrames;
-				//next = &md2->model->meshes[0].frames[nextFrame];
-=======
 				if (durs > INTERPOLERATION_LIMIT)
 					durs = INTERPOLERATION_LIMIT;
 
@@ -999,46 +980,38 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 					if (frame || !(spr->mobj->state->frame & FF_SPR2ENDSTATE))
 						next = &md2->model->frames[md2->model->spr2frames[spr2*2] + frame];
 				}
->>>>>>> origin/master
 			}
 		}
 		else
+#endif
 		{
 			//FIXME: this is not yet correct
-			frame = (spr->mobj->frame & FF_FRAMEMASK) % md2->model->header.numFrames;
-			buff = md2->model->glCommandBuffer;
-			curr = &md2->model->frames[frame];
-			if (cv_grmd2.value == 1 && tics <= durs && tics <= INTERPOLERATION_LIMIT)
-			{
-				if (durs > INTERPOLERATION_LIMIT)
-					durs = INTERPOLERATION_LIMIT;
+			frame = (spr->mobj->frame & FF_FRAMEMASK) % md2->model->meshes[0].numFrames;
 
+#ifdef USE_MODEL_NEXTFRAME
+			if (cv_grmdls.value == 1 && tics <= durs)
+			{
 				// frames are handled differently for states with FF_ANIMATE, so get the next frame differently for the interpolation
 				if (spr->mobj->frame & FF_ANIMATE)
 				{
-<<<<<<< HEAD
-					nextFrame = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % md2->model->meshes[0].numFrames;
+					nextFrame = (spr->mobj->frame & FF_FRAMEMASK) + 1;
+					if (nextFrame >= spr->mobj->state->var1)
+						nextFrame = (spr->mobj->state->frame & FF_FRAMEMASK);
+					nextFrame %= md2->model->meshes[0].numFrames;
 					//next = &md2->model->meshes[0].frames[nextFrame];
-=======
-					UINT32 nextframe = (spr->mobj->frame & FF_FRAMEMASK) + 1;
-					if (nextframe >= (UINT32)spr->mobj->state->var1)
-						nextframe = (spr->mobj->state->frame & FF_FRAMEMASK);
-					nextframe %= md2->model->header.numFrames;
-					next = &md2->model->frames[nextframe];
->>>>>>> origin/master
 				}
 				else
 				{
-					if (spr->mobj->state->nextstate != S_NULL
-					&& states[spr->mobj->state->nextstate].sprite == spr->mobj->sprite)
+					if (spr->mobj->state->nextstate != S_NULL && states[spr->mobj->state->nextstate].sprite != SPR_NULL
+						&& !(spr->mobj->player && (spr->mobj->state->nextstate == S_PLAY_TAP1 || spr->mobj->state->nextstate == S_PLAY_TAP2) && spr->mobj->state == &states[S_PLAY_STND]))
 					{
-						const UINT32 nextframe = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % md2->model->header.numFrames;
-						next = &md2->model->frames[nextframe];
+						nextFrame = (states[spr->mobj->state->nextstate].frame & FF_FRAMEMASK) % md2->model->meshes[0].numFrames;
+						//next = &md2->model->meshes[0].frames[nextFrame];
 					}
 				}
 			}
-		}
 #endif
+		}
 
 #undef INTERPOLERATION_LIMIT
 
@@ -1046,13 +1019,13 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 		p.x = FIXED_TO_FLOAT(spr->mobj->x);
 		p.y = FIXED_TO_FLOAT(spr->mobj->y)+md2->offset;
 
-		if (flip)
+		if (spr->mobj->eflags & MFE_VERTICALFLIP)
 			p.z = FIXED_TO_FLOAT(spr->mobj->z + spr->mobj->height);
 		else
 			p.z = FIXED_TO_FLOAT(spr->mobj->z);
 
 		if (spr->mobj->skin && spr->mobj->sprite == SPR_PLAY)
-			sprdef = &((skin_t *)spr->mobj->skin)->sprites[spr->mobj->sprite2];
+			sprdef = &((skin_t *)spr->mobj->skin)->spritedef;
 		else
 			sprdef = &sprites[spr->mobj->sprite];
 
@@ -1060,7 +1033,13 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
 
 		if (sprframe->rotate)
 		{
-			const fixed_t anglef = AngleFixed((spr->mobj->player ? spr->mobj->player->drawangle : spr->mobj->angle));
+			fixed_t anglef = AngleFixed(spr->mobj->angle);
+
+			if (spr->mobj->player)
+				anglef = AngleFixed(spr->mobj->player->frameangle);
+			else
+				anglef = AngleFixed(spr->mobj->angle);
+
 			p.angley = FIXED_TO_FLOAT(anglef);
 		}
 		else