From 8e7cce8b61aa8e3e2b3ec0db101646ef6a8fb9a6 Mon Sep 17 00:00:00 2001 From: spherallic Date: Thu, 27 Jun 2024 17:16:03 +0200 Subject: [PATCH 1/2] Fix dynamic slope height changes not always being considered as "moved" --- src/p_slopes.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/p_slopes.c b/src/p_slopes.c index c2bacad9e..ce276a672 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -181,8 +181,8 @@ void T_DynamicSlopeLine (dynlineplanethink_t* th) { pslope_t* slope = th->slope; line_t* srcline = th->sourceline; - - fixed_t zdelta; + + fixed_t zdelta, oldoz = slope->o.z; switch(th->type) { case DP_FRONTFLOOR: @@ -209,7 +209,7 @@ void T_DynamicSlopeLine (dynlineplanethink_t* th) return; } - if (slope->zdelta != FixedDiv(zdelta, th->extent)) { + if (slope->zdelta != FixedDiv(zdelta, th->extent) || oldoz != slope->o.z) { slope->zdelta = FixedDiv(zdelta, th->extent); slope->zangle = R_PointToAngle2(0, 0, th->extent, -zdelta); slope->moved = true; From 32bbc48be5c9c0a13ca3a2822c1a68f738640b27 Mon Sep 17 00:00:00 2001 From: spherallic Date: Thu, 27 Jun 2024 18:51:33 +0200 Subject: [PATCH 2/2] Fix light level issue with walls and FOF planes --- src/hardware/hw_main.c | 28 ++++++++++++++-------------- src/r_bsp.c | 4 ++-- src/r_segs.c | 24 ++++++++++++------------ 3 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index c70b6dd01..f395a8390 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -309,39 +309,39 @@ static FUINT HWR_CalcSlopeLight(FUINT lightnum, angle_t dir, fixed_t delta) return (FUINT)finallight; } -static FUINT HWR_SideLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 HWR_SideLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light + - ((side->lightabsolute) ? 0 : base_lightlevel); + return max(0, min(255, side->light + + ((side->lightabsolute) ? 0 : base_lightlevel))); } /* TODO: implement per-texture lighting -static FUINT HWR_TopLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 HWR_TopLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_top + - ((side->lightabsolute_top) ? 0 : HWR_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_top + + ((side->lightabsolute_top) ? 0 : HWR_SideLightLevel(side, base_lightlevel)))); } -static FUINT HWR_MidLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 HWR_MidLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_mid + - ((side->lightabsolute_mid) ? 0 : HWR_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_mid + + ((side->lightabsolute_mid) ? 0 : HWR_SideLightLevel(side, base_lightlevel)))); } -static FUINT HWR_BottomLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 HWR_BottomLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_bottom + - ((side->lightabsolute_bottom) ? 0 : HWR_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_bottom + + ((side->lightabsolute_bottom) ? 0 : HWR_SideLightLevel(side, base_lightlevel)))); } */ -static UINT8 HWR_FloorLightLevel(sector_t *sector, UINT8 base_lightlevel) +static UINT8 HWR_FloorLightLevel(sector_t *sector, INT16 base_lightlevel) { return max(0, min(255, sector->floorlightlevel + ((sector->floorlightabsolute) ? 0 : base_lightlevel))); } -static UINT8 HWR_CeilingLightLevel(sector_t *sector, UINT8 base_lightlevel) +static UINT8 HWR_CeilingLightLevel(sector_t *sector, INT16 base_lightlevel) { return max(0, min(255, sector->ceilinglightlevel + ((sector->ceilinglightabsolute) ? 0 : base_lightlevel))); diff --git a/src/r_bsp.c b/src/r_bsp.c index 4b4c81b88..373a170c9 100644 --- a/src/r_bsp.c +++ b/src/r_bsp.c @@ -230,13 +230,13 @@ static INT32 R_DoorClosed(void) && (backsector->floorheight <= frontsector->floorheight || curline->sidedef->bottomtexture); } -static UINT8 R_FloorLightLevel(sector_t *sector, UINT8 base_lightlevel) +static UINT8 R_FloorLightLevel(sector_t *sector, INT16 base_lightlevel) { return max(0, min(255, sector->floorlightlevel + ((sector->floorlightabsolute) ? 0 : base_lightlevel))); } -static UINT8 R_CeilingLightLevel(sector_t *sector, UINT8 base_lightlevel) +static UINT8 R_CeilingLightLevel(sector_t *sector, INT16 base_lightlevel) { return max(0, min(255, sector->ceilinglightlevel + ((sector->ceilinglightabsolute) ? 0 : base_lightlevel))); diff --git a/src/r_segs.c b/src/r_segs.c index 637e528fe..a8a065c9b 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -94,29 +94,29 @@ transnum_t R_GetLinedefTransTable(fixed_t alpha) return (20*(FRACUNIT - alpha - 1) + FRACUNIT) >> (FRACBITS+1); } -static INT16 R_SideLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 R_SideLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light + - ((side->lightabsolute) ? 0 : base_lightlevel); + return max(0, min(255, side->light + + ((side->lightabsolute) ? 0 : base_lightlevel))); } /* TODO: implement per-texture lighting -static INT16 R_TopLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 R_TopLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_top + - ((side->lightabsolute_top) ? 0 : R_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_top + + ((side->lightabsolute_top) ? 0 : R_SideLightLevel(side, base_lightlevel)))); } -static INT16 R_MidLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 R_MidLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_mid + - ((side->lightabsolute_mid) ? 0 : R_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_mid + + ((side->lightabsolute_mid) ? 0 : R_SideLightLevel(side, base_lightlevel)))); } -static INT16 R_BottomLightLevel(side_t *side, UINT8 base_lightlevel) +static UINT8 R_BottomLightLevel(side_t *side, INT16 base_lightlevel) { - return side->light_bottom + - ((side->lightabsolute_bottom) ? 0 : R_SideLightLevel(side, base_lightlevel)); + return max(0, min(255, side->light_bottom + + ((side->lightabsolute_bottom) ? 0 : R_SideLightLevel(side, base_lightlevel)))); } */