From b4a09405a77d5bb5ec1c677a123f763ff2193ebb Mon Sep 17 00:00:00 2001
From: Jaime Ita Passos <jp6781615@gmail.com>
Date: Thu, 29 Apr 2021 19:24:37 -0300
Subject: [PATCH] Use 64-bit math for calculating the texture origin X/Z

---
 src/r_plane.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/src/r_plane.c b/src/r_plane.c
index c56a222dff..d26c124ef8 100644
--- a/src/r_plane.c
+++ b/src/r_plane.c
@@ -707,15 +707,18 @@ static void R_SetSlopePlaneOrigin(pslope_t *slope, fixed_t xpos, fixed_t ypos, f
 {
 	floatv3_t *p = &ds_slope_origin;
 
-	float vx = FixedToFloat(xpos + xoff);
-	float vy = FixedToFloat(ypos - yoff);
+	INT64 vx = (INT64)xpos + (INT64)xoff;
+	INT64 vy = (INT64)ypos - (INT64)yoff;
+
+	float vxf = vx / (float)FRACUNIT;
+	float vyf = vy / (float)FRACUNIT;
 	float ang = ANG2RAD(ANGLE_270 - angle);
 
 	// p is the texture origin in view space
 	// Don't add in the offsets at this stage, because doing so can result in
 	// errors if the flat is rotated.
-	p->x = vx * cos(ang) - vy * sin(ang);
-	p->z = vx * sin(ang) + vy * cos(ang);
+	p->x = vxf * cos(ang) - vyf * sin(ang);
+	p->z = vxf * sin(ang) + vyf * cos(ang);
 	p->y = (R_GetSlopeZAt(slope, -xoff, yoff) - zpos) / (float)FRACUNIT;
 }
 
-- 
GitLab