From c46c92d605efa401fbb24193eef170b64ecb99ca Mon Sep 17 00:00:00 2001 From: fickleheart <fickle@tinted.red> Date: Sun, 29 Dec 2019 18:30:29 -0600 Subject: [PATCH] Prevent linkdraw sprites from connecting to shadows --- src/r_things.c | 11 ++++++++++- src/r_things.h | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/r_things.c b/src/r_things.c index 558ea280ef..953952c56b 100644 --- a/src/r_things.c +++ b/src/r_things.c @@ -1122,6 +1122,8 @@ static void R_ProjectDropShadow(mobj_t *thing, vissprite_t *vis, fixed_t tx, fix } } + if (abs(floorz-viewz)/tz > 4) return; // Prevent stretchy shadows and possible crashes + floordiff = abs(thing->z - floorz); trans = floordiff / (100*FRACUNIT) + 3; @@ -1173,7 +1175,7 @@ static void R_ProjectDropShadow(mobj_t *thing, vissprite_t *vis, fixed_t tx, fix shadow->sector = vis->sector; shadow->szt = (INT16)((centeryfrac - FixedMul(shadow->gzt - viewz, yscale))>>FRACBITS); shadow->sz = (INT16)((centeryfrac - FixedMul(shadow->gz - viewz, yscale))>>FRACBITS); - shadow->cut = SC_ISSCALED; //check this + shadow->cut = SC_ISSCALED|SC_SHADOW; //check this shadow->startfrac = 0; @@ -2069,6 +2071,9 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e if (!(ds->cut & SC_LINKDRAW)) continue; + if (ds->cut & SC_SHADOW) + continue; + // reuse dsfirst... for (dsfirst = unsorted.prev; dsfirst != &unsorted; dsfirst = dsfirst->prev) { @@ -2076,6 +2081,10 @@ static void R_SortVisSprites(vissprite_t* vsprsortedhead, UINT32 start, UINT32 e if (dsfirst->cut & SC_LINKDRAW) continue; + // don't connect to your shadow! + if (dsfirst->cut & SC_SHADOW) + continue; + // don't connect if it's not the tracer if (dsfirst->mobj != ds->mobj) continue; diff --git a/src/r_things.h b/src/r_things.h index 1b74dd74eb..a6ef928023 100644 --- a/src/r_things.h +++ b/src/r_things.h @@ -153,7 +153,8 @@ typedef enum SC_LINKDRAW = 1<<3, SC_FULLBRIGHT = 1<<4, SC_VFLIP = 1<<5, - SC_ISSCALED = 1>>6, + SC_ISSCALED = 1<<6, + SC_SHADOW = 1<<7, // masks SC_CUTMASK = SC_TOP|SC_BOTTOM, SC_FLAGMASK = ~SC_CUTMASK -- GitLab