From 9a9a16183f02b3570faa24c949c4fc68eda9d48f Mon Sep 17 00:00:00 2001
From: Eidolon <furyhunter600@gmail.com>
Date: Fri, 24 Feb 2023 18:48:10 -0600
Subject: [PATCH] Disable floor splat slope interpolation

Getting these to interpolate correctly is proving to be an absolute
ordeal and I would rather have them look correct-but-not-interpolated
than completely broken.
---
 src/hardware/hw_main.c |  6 +++---
 src/r_splats.c         | 15 ++++++++-------
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c
index 05d1be28fe..321ed215f3 100644
--- a/src/hardware/hw_main.c
+++ b/src/hardware/hw_main.c
@@ -4102,7 +4102,7 @@ static void HWR_DrawSprite(gl_vissprite_t *spr)
 			scale *= spr->shadowscale;
 
 		if (spr->rotateflags & SRF_3D || renderflags & RF_NOSPLATBILLBOARD)
-			angle = spr->angle;
+			angle = spr->mobj->angle;
 		else
 			angle = viewangle;
 
@@ -4157,8 +4157,8 @@ static void HWR_DrawSprite(gl_vissprite_t *spr)
 		// Translate
 		for (i = 0; i < 4; i++)
 		{
-			wallVerts[i].x = rotated[i].x + spr->x1;
-			wallVerts[i].z = rotated[i].y + spr->z1;
+			wallVerts[i].x = rotated[i].x + FIXED_TO_FLOAT(spr->mobj->x);
+			wallVerts[i].z = rotated[i].y + FIXED_TO_FLOAT(spr->mobj->y);
 		}
 
 		if (renderflags & (RF_SLOPESPLAT | RF_OBJECTSLOPESPLAT))
diff --git a/src/r_splats.c b/src/r_splats.c
index a58cfe5365..bab89c89e5 100644
--- a/src/r_splats.c
+++ b/src/r_splats.c
@@ -11,6 +11,7 @@
 /// \brief Floor splats
 
 #include "r_draw.h"
+#include "r_fps.h"
 #include "r_main.h"
 #include "r_splats.h"
 #include "r_bsp.h"
@@ -185,7 +186,7 @@ void R_DrawFloorSplat(vissprite_t *spr)
 		splat.scale = FixedMul(splat.scale, ((skin_t *)mobj->skin)->highresscale);
 
 	if (spr->rotateflags & SRF_3D || renderflags & RF_NOSPLATBILLBOARD)
-		splatangle = spr->centerangle;
+		splatangle = mobj->angle;
 	else
 		splatangle = spr->viewpoint.angle;
 
@@ -209,8 +210,8 @@ void R_DrawFloorSplat(vissprite_t *spr)
 	xoffset = FixedMul(leftoffset, splat.xscale);
 	yoffset = FixedMul(topoffset, splat.yscale);
 
-	x = spr->gx;
-	y = spr->gy;
+	x = mobj->x;
+	y = mobj->y;
 	w = (splat.width * splat.xscale);
 	h = (splat.height * splat.yscale);
 
@@ -263,8 +264,8 @@ void R_DrawFloorSplat(vissprite_t *spr)
 	// Translate
 	for (i = 0; i < 4; i++)
 	{
-		tr_x = rotated[i].x + x;
-		tr_y = rotated[i].y + y;
+		tr_x = rotated[i].x + mobj->x;
+		tr_y = rotated[i].y + mobj->y;
 
 		if (splat.slope)
 		{
@@ -292,8 +293,8 @@ void R_DrawFloorSplat(vissprite_t *spr)
 		tr_y = v3d->y - spr->viewpoint.y;
 
 		// rotation around vertical y axis
-		rot_x = FixedMul(tr_x, sa) - FixedMul(tr_y, ca);
-		rot_y = FixedMul(tr_x, ca) + FixedMul(tr_y, sa);
+		rot_x = FixedMul(tr_x - (mobj->x - x), sa) - FixedMul(tr_y - (mobj->y - y), ca);
+		rot_y = FixedMul(tr_x - (mobj->x - x), ca) + FixedMul(tr_y - (mobj->y - y), sa);
 		rot_z = v3d->z - spr->viewpoint.z;
 
 		if (rot_y < FRACUNIT)
-- 
GitLab