Skip to content

Commit f24b195

Browse files
fix zokumbsp seg manipulation horizon line effect in software renderring (#773)
1 parent a329d6c commit f24b195

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

prboom2/src/p_setup.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <zlib.h>
3737

3838
#include "doomstat.h"
39+
#include "doomtype.h"
3940
#include "m_bbox.h"
4041
#include "g_game.h"
4142
#include "w_wad.h"
@@ -3288,6 +3289,18 @@ static void P_RemoveSlimeTrails(void) // killough 10/98
32883289
Z_Free(hit);
32893290
}
32903291

3292+
// [crispy] fix long wall wobble
3293+
static angle_t anglediff(angle_t a, angle_t b)
3294+
{
3295+
if (b > a)
3296+
return anglediff(b, a);
3297+
3298+
if (a - b < ANG180)
3299+
return a - b;
3300+
else // [crispy] wrap around
3301+
return b - a;
3302+
}
3303+
32913304
static void R_CalcSegsLength(void)
32923305
{
32933306
int i;
@@ -3301,6 +3314,12 @@ static void R_CalcSegsLength(void)
33013314
li->halflength = (uint32_t)(length / 2.0);
33023315
// [crispy] re-calculate angle used for rendering
33033316
li->pangle = R_PointToAngleEx2(li->v1->px, li->v1->py, li->v2->px, li->v2->py);
3317+
// [crispy] more than just a little adjustment?
3318+
// back to the original angle then
3319+
if (anglediff(li->pangle, li->angle) > ANG60/2)
3320+
{
3321+
li->pangle = li->angle;
3322+
}
33043323
}
33053324
}
33063325

prboom2/src/r_segs.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -206,8 +206,8 @@ void R_FixWiggle(sector_t *sec)
206206

207207
static fixed_t R_ScaleFromGlobalAngle(angle_t visangle)
208208
{
209-
int anglea = ANG90 + (visangle - viewangle);
210-
int angleb = ANG90 + (visangle - rw_normalangle);
209+
angle_t anglea = ANG90 + (visangle - viewangle);
210+
angle_t angleb = ANG90 + (visangle - rw_normalangle);
211211
int den = FixedMul(rw_distance, finesine[anglea >> ANGLETOFINESHIFT]);
212212
// proff 11/06/98: Changed for high-res
213213
fixed_t num = FixedMul(projectiony, finesine[angleb >> ANGLETOFINESHIFT]);

0 commit comments

Comments
 (0)