mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-21 03:11:03 +00:00
Merge branch 'fix-remove-facetarget-action' into 'next'
Fix segfault when P_RemoveMobj is called within A_FaceTarget action See merge request STJr/SRB2!1974
This commit is contained in:
commit
d6d424f102
1 changed files with 57 additions and 0 deletions
|
@ -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--;
|
||||
|
|
Loading…
Reference in a new issue