Only interpolate shadowcasters if they exist

# Conflicts:
#	src/hardware/hw_main.c
This commit is contained in:
Eidolon 2022-11-12 15:14:04 -06:00 committed by toaster
parent 10660411b8
commit ce15c47a4d

View file

@ -5362,7 +5362,12 @@ static void HWR_ProjectSprite(mobj_t *thing)
if (thing->renderflags & RF_SHADOWEFFECTS) if (thing->renderflags & RF_SHADOWEFFECTS)
{ {
mobj_t *caster = thing->target; mobj_t *caster = thing->target;
if (caster && !P_MobjWasRemoved(caster))
{
interpmobjstate_t casterinterp = {0}; interpmobjstate_t casterinterp = {0};
fixed_t groundz;
fixed_t floordiff;
if (R_UsingFrameInterpolation() && !paused) if (R_UsingFrameInterpolation() && !paused)
{ {
@ -5373,10 +5378,8 @@ static void HWR_ProjectSprite(mobj_t *thing)
R_InterpolateMobjState(caster, FRACUNIT, &casterinterp); R_InterpolateMobjState(caster, FRACUNIT, &casterinterp);
} }
if (caster && !P_MobjWasRemoved(caster)) groundz = R_GetShadowZ(thing, NULL);
{ floordiff = abs(((thing->eflags & MFE_VERTICALFLIP) ? caster->height : 0) + casterinterp.z - groundz);
fixed_t groundz = R_GetShadowZ(thing, NULL);
fixed_t floordiff = abs(((thing->eflags & MFE_VERTICALFLIP) ? caster->height : 0) + casterinterp.z - groundz);
shadowheight = FIXED_TO_FLOAT(floordiff); shadowheight = FIXED_TO_FLOAT(floordiff);
shadowscale = FIXED_TO_FLOAT(FixedMul(FRACUNIT - floordiff/640, casterinterp.scale)); shadowscale = FIXED_TO_FLOAT(FixedMul(FRACUNIT - floordiff/640, casterinterp.scale));