Merge branch 'bounceremoved' into 'master'

Attempt to fix invalid mobj ref during bouncing

See merge request KartKrew/Kart!526
This commit is contained in:
SteelT 2022-01-16 23:42:15 +00:00
commit b39853d7a1
2 changed files with 13 additions and 1 deletions

View file

@ -3732,7 +3732,7 @@ stairstep:
tmymove = 0;
}
if (!P_TryMove(mo, newx, newy, true)) {
if (success)
if (success || P_MobjWasRemoved(mo))
return; // Good enough!!
else
goto retry;
@ -3856,6 +3856,9 @@ void P_BounceMove(mobj_t *mo)
INT32 hitcount;
fixed_t mmomx = 0, mmomy = 0;
if (P_MobjWasRemoved(mo))
return;
if (mo->player)
{
P_BouncePlayerMove(mo);
@ -3979,7 +3982,11 @@ bounceback:
mo->momy = tmymove;
if (!P_TryMove(mo, mo->x + tmxmove, mo->y + tmymove, true))
{
if (P_MobjWasRemoved(mo))
return;
goto retry;
}
}
//

View file

@ -1694,6 +1694,8 @@ void P_XYMovement(mobj_t *mo)
else
{
P_BounceMove(mo);
if (P_MobjWasRemoved(mo))
return;
xmove = ymove = 0;
S_StartSound(mo, mo->info->activesound);
@ -1843,6 +1845,9 @@ void P_SceneryXYMovement(mobj_t *mo)
if (!P_SceneryTryMove(mo, mo->x + mo->momx, mo->y + mo->momy))
P_BounceMove(mo);
if (P_MobjWasRemoved(mo))
return;
if ((!(mo->eflags & MFE_VERTICALFLIP) && mo->z > mo->floorz) || (mo->eflags & MFE_VERTICALFLIP && mo->z+mo->height < mo->ceilingz))
return; // no friction when airborne