diff --git a/src/p_enemy.c b/src/p_enemy.c index 618665c97487be8d3db4a191090529f40580b6c6..c7d87b88ada52c2ab1c45c947431f0a984243d20 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -1571,6 +1571,8 @@ void A_PointyThink(mobj_t *actor) // Okay, we found the closest player. Let's move based on his movement. P_SetTarget(&actor->target, player->mo); A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (P_AproxDistance(player->mo->x - actor->x, player->mo->y - actor->y) < P_AproxDistance(player->mo->x + player->mo->momx - actor->x, player->mo->y + player->mo->momy - actor->y)) sign = -1; // Player is moving away @@ -1690,6 +1692,8 @@ void A_HoodFire(mobj_t *actor) } A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (!(arrow = P_SpawnMissile(actor, actor->target, (mobjtype_t)locvar1))) return; @@ -2270,6 +2274,8 @@ void A_VultureVtol(mobj_t *actor) actor->flags |= MF_FLOAT; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; S_StopSound(actor); @@ -2368,6 +2374,9 @@ void A_VultureHover(mobj_t *actor) P_VultureHoverParticle(actor); A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + targetz = actor->target->z + actor->target->height / 2; for (i = -1; i <= 1; i++) { @@ -2684,6 +2693,8 @@ void A_LobShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (actor->eflags & MFE_VERTICALFLIP) { @@ -2779,6 +2790,8 @@ void A_FireShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (actor->eflags & MFE_VERTICALFLIP) z = actor->z + actor->height - FixedMul(48*FRACUNIT + locvar2*FRACUNIT, actor->scale); @@ -2817,6 +2830,8 @@ void A_SuperFireShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (actor->eflags & MFE_VERTICALFLIP) z = actor->z + actor->height - FixedMul(48*FRACUNIT + locvar2*FRACUNIT, actor->scale); @@ -2864,6 +2879,8 @@ void A_BossFireShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; switch (locvar2) { @@ -2951,6 +2968,8 @@ void A_Boss7FireMissiles(mobj_t *actor) } A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; S_StartSound(NULL, locvar2); @@ -3335,6 +3354,8 @@ void A_SkullAttack(mobj_t *actor) if (actor->info->activesound) S_StartSound(actor, actor->info->activesound); A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; dist = P_AproxDistance(dest->x - actor->x, dest->y - actor->y); @@ -3446,6 +3467,9 @@ void A_BossZoom(mobj_t *actor) if (actor->info->attacksound) S_StartAttackSound(actor, actor->info->attacksound); A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + an = actor->angle >> ANGLETOFINESHIFT; actor->momx = FixedMul(FixedMul(actor->info->speed*5*FRACUNIT, actor->scale), FINECOSINE(an)); actor->momy = FixedMul(FixedMul(actor->info->speed*5*FRACUNIT, actor->scale), FINESINE(an)); @@ -5543,6 +5567,9 @@ void A_JetgShoot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + P_SpawnMissile(actor, actor->target, (mobjtype_t)actor->info->raisestate); if (ultimatemode) @@ -5577,6 +5604,9 @@ void A_ShootBullet(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + P_SpawnMissile(actor, actor->target, (mobjtype_t)actor->info->raisestate); if (actor->info->attacksound) @@ -7435,6 +7465,8 @@ void A_Boss7Chase(mobj_t *actor) && (actor->target->player->powers[pw_carry] == CR_GENERIC)) { A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; P_SetMobjState(actor, S_BLACKEGG_SHOOT1); actor->movecount = TICRATE + P_RandomByte()/2; return; @@ -7452,6 +7484,8 @@ void A_Boss7Chase(mobj_t *actor) if (actor->z < 1056*FRACUNIT) { A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; P_SetMobjState(actor, actor->info->xdeathstate); actor->movecount = 7*TICRATE + P_RandomByte(); break; @@ -7460,6 +7494,8 @@ void A_Boss7Chase(mobj_t *actor) /* FALLTHRU */ case 1: // Chaingun Goop A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; P_SetMobjState(actor, S_BLACKEGG_SHOOT1); if (actor->health > actor->info->damage) @@ -7469,6 +7505,8 @@ void A_Boss7Chase(mobj_t *actor) break; case 2: // Homing Missile A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; P_SetMobjState(actor, actor->info->missilestate); S_StartSound(0, sfx_beflap); break; @@ -8186,6 +8224,9 @@ void A_Boss3Path(mobj_t *actor) P_SetTarget(&actor->target, actor->tracer->target); var1 = 0, var2 = 0; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + if (actor->tracer->state == &states[actor->tracer->info->missilestate]) P_SetMobjState(actor, actor->info->missilestate); return; @@ -9860,6 +9901,8 @@ void A_SplitShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; { const angle_t an = (actor->angle + ANGLE_90) >> ANGLETOFINESHIFT; const fixed_t fasin = FINESINE(an); @@ -9924,6 +9967,9 @@ void A_MultiShot(mobj_t *actor) if (actor->target) A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + if(loc1lw > 90) ad = FixedMul(90*FRACUNIT, actor->scale); else @@ -11068,6 +11114,8 @@ void A_VileTarget(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; // Determine object to spawn if (locvar1 <= 0 || locvar1 >= NUMMOBJTYPES) @@ -11155,6 +11203,8 @@ void A_VileAttack(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (locvar1 <= 0 || locvar1 >= NUMSFX) soundtoplay = sfx_brakrx; @@ -11473,6 +11523,8 @@ void A_BrakFireShot(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; x = actor->x + P_ReturnThrustX(actor, actor->angle, FixedMul(64*FRACUNIT, actor->scale)) @@ -11590,6 +11642,9 @@ void A_BrakLobShot(mobj_t *actor) // Okay, complicated math done. Let's fire our object already, sheesh. A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; + if (locvar1 <= 0 || locvar1 >= NUMMOBJTYPES) typeOfShot = MT_CANNONBALL; else typeOfShot = (mobjtype_t)locvar1; @@ -12674,6 +12729,8 @@ void A_WhoCaresIfYourSonIsABee(mobj_t *actor) return; A_FaceTarget(actor); + if (P_MobjWasRemoved(actor)) + return; if (actor->extravalue1) actor->extravalue1--;