From bf64d7a0c125277586cfafe991d631b5e651b550 Mon Sep 17 00:00:00 2001 From: toaster Date: Tue, 21 Mar 2023 18:31:07 +0000 Subject: [PATCH] K_BananaBallhogCollide: Handle use after deletes - Return early if t1 was removed - Don't call K_GetCollideAngle if t2 is removed - Only relevant here because this is one of the few contexts that causes a pre-K_GetCollideAngle deletion, other circumstances should be fine..? --- src/k_collide.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/k_collide.c b/src/k_collide.c index 1256263a8..ba1f84b5e 100644 --- a/src/k_collide.c +++ b/src/k_collide.c @@ -113,15 +113,25 @@ boolean K_BananaBallhogCollide(mobj_t *t1, mobj_t *t2) damageitem = true; } - if (damageitem) + if (damageitem && P_MobjWasRemoved(t1) == false) { - // This Item Damage - angle_t bounceangle = K_GetCollideAngle(t2, t1); + angle_t bounceangle; + if (P_MobjWasRemoved(t2) == false) + { + bounceangle = K_GetCollideAngle(t2, t1); + } + else + { + bounceangle = K_MomentumAngle(t1) + ANGLE_90; + } + + // This Item Damage S_StartSound(t1, t1->info->deathsound); P_KillMobj(t1, t2, t2, DMG_NORMAL); P_SetObjectMomZ(t1, 24*FRACUNIT, false); + P_InstaThrust(t1, bounceangle, 16*FRACUNIT); }