From 24de2968a352249176d156943ac19e5834f791e7 Mon Sep 17 00:00:00 2001 From: MascaraSnake Date: Mon, 10 Feb 2020 20:26:29 +0100 Subject: [PATCH] Some fixes for the linedef alpha field --- src/hardware/hw_main.c | 3 ++- src/p_setup.c | 4 ++-- src/r_segs.c | 3 +++ 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index ef7a19208..9181dc3d3 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -895,6 +895,7 @@ FBITFIELD HWR_TranstableToAlpha(INT32 transtablenum, FSurfaceInfo *pSurf) { switch (transtablenum) { + case 0 : pSurf->FlatColor.s.alpha = 0x00;return PF_Masked; case tr_trans10 : pSurf->FlatColor.s.alpha = 0xe6;return PF_Translucent; case tr_trans20 : pSurf->FlatColor.s.alpha = 0xcc;return PF_Translucent; case tr_trans30 : pSurf->FlatColor.s.alpha = 0xb3;return PF_Translucent; @@ -1842,7 +1843,7 @@ static void HWR_StoreWallRange(double startfrac, double endfrac) blendmode = PF_Translucent; break; default: - if (gr_linedef->alpha > 0 && gr_linedef->alpha < FRACUNIT) + if (gr_linedef->alpha >= 0 && gr_linedef->alpha < FRACUNIT) blendmode = HWR_TranstableToAlpha(R_GetLinedefTransTable(gr_linedef->alpha), &Surf); else blendmode = PF_Masked; diff --git a/src/p_setup.c b/src/p_setup.c index 36786eb95..78fe32d27 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -960,8 +960,6 @@ static void P_InitializeLinedef(line_t *ld) ld->dx = v2->x - v1->x; ld->dy = v2->y - v1->y; - ld->alpha = FRACUNIT; - ld->bbox[BOXLEFT] = min(v1->x, v2->x); ld->bbox[BOXRIGHT] = max(v1->x, v2->x); ld->bbox[BOXBOTTOM] = min(v1->y, v2->y); @@ -1059,6 +1057,7 @@ static void P_LoadLinedefs(UINT8 *data) ld->tag = SHORT(mld->tag); memset(ld->args, 0, NUMLINEARGS*sizeof(*ld->args)); memset(ld->stringargs, 0x00, NUMLINESTRINGARGS*sizeof(*ld->stringargs)); + ld->alpha = FRACUNIT; P_SetLinedefV1(i, SHORT(mld->v1)); P_SetLinedefV2(i, SHORT(mld->v2)); @@ -1654,6 +1653,7 @@ static void P_LoadTextmap(void) ld->tag = 0; memset(ld->args, 0, NUMLINEARGS*sizeof(*ld->args)); memset(ld->stringargs, 0x00, NUMLINESTRINGARGS*sizeof(*ld->stringargs)); + ld->alpha = FRACUNIT; ld->sidenum[0] = 0xffff; ld->sidenum[1] = 0xffff; diff --git a/src/r_segs.c b/src/r_segs.c index 3ed6bee77..2f0514256 100644 --- a/src/r_segs.c +++ b/src/r_segs.c @@ -337,6 +337,9 @@ void R_RenderMaskedSegRange(drawseg_t *ds, INT32 x1, INT32 x2) windowbottom = windowtop = sprbotscreen = INT32_MAX; ldef = curline->linedef; + if (!ldef->alpha) + return; + if (ldef->alpha > 0 && ldef->alpha < FRACUNIT) { dc_transmap = transtables + ((R_GetLinedefTransTable(ldef->alpha) - 1) << FF_TRANSSHIFT);