From 9a9a16183f02b3570faa24c949c4fc68eda9d48f Mon Sep 17 00:00:00 2001 From: Eidolon 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 05d1be28f..321ed215f 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 a58cfe536..bab89c89e 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)