From df02c4f657d15aa15b6d12cc65ba2ff197f87db1 Mon Sep 17 00:00:00 2001 From: "Guilherme M. Miranda" Date: Fri, 19 Sep 2025 11:49:20 -0300 Subject: [PATCH] fix zokumbsp seg manipulation horizon line effect in software renderring --- prboom2/src/p_setup.c | 19 +++++++++++++++++++ prboom2/src/r_segs.c | 4 ++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/prboom2/src/p_setup.c b/prboom2/src/p_setup.c index 60f619186..928a4c02a 100644 --- a/prboom2/src/p_setup.c +++ b/prboom2/src/p_setup.c @@ -36,6 +36,7 @@ #include #include "doomstat.h" +#include "doomtype.h" #include "m_bbox.h" #include "g_game.h" #include "w_wad.h" @@ -3288,6 +3289,18 @@ static void P_RemoveSlimeTrails(void) // killough 10/98 Z_Free(hit); } +// [crispy] fix long wall wobble +static angle_t anglediff(angle_t a, angle_t b) +{ + if (b > a) + return anglediff(b, a); + + if (a - b < ANG180) + return a - b; + else // [crispy] wrap around + return b - a; +} + static void R_CalcSegsLength(void) { int i; @@ -3301,6 +3314,12 @@ static void R_CalcSegsLength(void) li->halflength = (uint32_t)(length / 2.0); // [crispy] re-calculate angle used for rendering li->pangle = R_PointToAngleEx2(li->v1->px, li->v1->py, li->v2->px, li->v2->py); + // [crispy] more than just a little adjustment? + // back to the original angle then + if (anglediff(li->pangle, li->angle) > ANG60/2) + { + li->pangle = li->angle; + } } } diff --git a/prboom2/src/r_segs.c b/prboom2/src/r_segs.c index 7dca17770..7378ed016 100644 --- a/prboom2/src/r_segs.c +++ b/prboom2/src/r_segs.c @@ -206,8 +206,8 @@ void R_FixWiggle(sector_t *sec) static fixed_t R_ScaleFromGlobalAngle(angle_t visangle) { - int anglea = ANG90 + (visangle - viewangle); - int angleb = ANG90 + (visangle - rw_normalangle); + angle_t anglea = ANG90 + (visangle - viewangle); + angle_t angleb = ANG90 + (visangle - rw_normalangle); int den = FixedMul(rw_distance, finesine[anglea >> ANGLETOFINESHIFT]); // proff 11/06/98: Changed for high-res fixed_t num = FixedMul(projectiony, finesine[angleb >> ANGLETOFINESHIFT]);