From 6d9512d2905ff2ad5defd06de60e044ae5a79932 Mon Sep 17 00:00:00 2001
From: James R <justsomejames2@gmail.com>
Date: Fri, 10 Dec 2021 00:32:46 -0800
Subject: [PATCH] Do not factor roll and pitch into model rollangle

Those transformations are applied separately so the model
tilts in 3d space.
---
 src/hardware/hw_md2.c |  2 +-
 src/r_patch.h         |  1 +
 src/r_patchrotation.c | 12 ++++++------
 3 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/hardware/hw_md2.c b/src/hardware/hw_md2.c
index 0f9195a753..096d24f528 100644
--- a/src/hardware/hw_md2.c
+++ b/src/hardware/hw_md2.c
@@ -1611,7 +1611,7 @@ boolean HWR_DrawModel(gl_vissprite_t *spr)
 		}
 
 		{
-			fixed_t anglef = AngleFixed(R_SpriteRotationAngle(&interp));
+			fixed_t anglef = AngleFixed(R_ModelRotationAngle(&interp));
 
 			p.rollangle = 0.0f;
 
diff --git a/src/r_patch.h b/src/r_patch.h
index 27f7bddb6f..a0ab3e75ac 100644
--- a/src/r_patch.h
+++ b/src/r_patch.h
@@ -39,6 +39,7 @@ patch_t *Patch_GetRotatedSprite(
 	size_t frame, size_t spriteangle,
 	boolean flip, boolean adjustfeet,
 	void *info, INT32 rotationangle);
+angle_t R_ModelRotationAngle(interpmobjstate_t *interp);
 angle_t R_SpriteRotationAngle(interpmobjstate_t *interp);
 INT32 R_GetRollAngle(angle_t rollangle);
 #endif
diff --git a/src/r_patchrotation.c b/src/r_patchrotation.c
index f9c4ec797d..a17b725d61 100644
--- a/src/r_patchrotation.c
+++ b/src/r_patchrotation.c
@@ -19,11 +19,11 @@
 fixed_t rollcosang[ROTANGLES];
 fixed_t rollsinang[ROTANGLES];
 
-//
-// R_SpriteRotationAngle
-//
-// Gets the rollangle for the input object.
-//
+angle_t R_ModelRotationAngle(interpmobjstate_t *interp)
+{
+	return interp->spriteroll;
+}
+
 angle_t R_SpriteRotationAngle(interpmobjstate_t *interp)
 {
 	angle_t viewingAngle = R_PointToAngle(interp->x, interp->y);
@@ -33,7 +33,7 @@ angle_t R_SpriteRotationAngle(interpmobjstate_t *interp)
 
 	angle_t rollOrPitch = FixedMul(interp->pitch, pitchMul) + FixedMul(interp->roll, rollMul);
 
-	return (rollOrPitch + interp->spriteroll);
+	return (rollOrPitch + R_ModelRotationAngle(interp));
 }
 
 INT32 R_GetRollAngle(angle_t rollangle)
-- 
GitLab