From 17fb0222e9a07864169b4e86b5e7aa5ce75c8090 Mon Sep 17 00:00:00 2001 From: pastel <hazepastel@proton.me> Date: Fri, 31 Jan 2025 14:17:59 -0600 Subject: [PATCH] Cleanup A_AttractChase --- src/p_enemy.c | 55 ++++++++++++++++++--------------------------------- 1 file changed, 19 insertions(+), 36 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index 29fcf50c2..9161aff6d 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -575,7 +575,7 @@ static boolean P_LookForShield(mobj_t *actor) } } - //return false; + return false; } #ifdef WEIGHTEDRECYCLER @@ -4595,51 +4595,34 @@ void A_AttractChase(mobj_t *actor) else actor->flags2 &= ~MF2_DONTDRAW; - // Turn rings into flingrings if shield is lost or out of range - if (actor->tracer && actor->tracer->player - && !(actor->tracer->player->powers[pw_shield] & SH_PROTECTELECTRIC) && actor->info->reactiontime && actor->type != (mobjtype_t)actor->info->reactiontime) + // check if player has SH_PROTECTELECTRIC and is within distance + if (P_LookForShield(actor)) { - mobj_t *newring; - newring = P_SpawnMobj(actor->x, actor->y, actor->z, actor->info->reactiontime); - if (!P_MobjWasRemoved(newring)) - { - newring->momx = actor->momx; - newring->momy = actor->momy; - newring->momz = actor->momz; - } - P_RemoveMobj(actor); + // Keep stuff from going down inside floors and junk + actor->flags &= ~MF_NOCLIPHEIGHT; + + // Let attracted rings move through walls and such. + actor->flags |= MF_NOCLIP; + + if (!P_MobjWasRemoved(actor->tracer)) + P_Attract(actor, actor->tracer, false); + return; } - P_LookForShield(actor); // Go find 'em, boy! - - if (!actor->tracer + // Lost attracted rings don't clip through walls anymore, and turn into fling rings + if ((actor->flags & MF_NOCLIP) && + (P_MobjWasRemoved(actor->tracer) || !actor->tracer->player || !actor->tracer->health - || !P_CheckSight(actor, actor->tracer)) // You have to be able to SEE it...sorta + || !(actor->tracer->player->powers[pw_shield] & SH_PROTECTELECTRIC) + || !P_CheckSight(actor, actor->tracer))) // You have to be able to SEE it...sorta { - // Lost attracted rings don't through walls anymore. - actor->flags &= ~MF_NOCLIP; P_SetTarget(&actor->tracer, NULL); - return; + actor->type = mobjinfo[actor->type].reactiontime; // Become the reactiontime of MT_RING, currently MT_FLINGRING + actor->flags = mobjinfo[actor->type].flags; // Reset actor flags } - // If a FlingRing gets attracted by a shield, change it into a normal ring. - if (actor->type == (mobjtype_t)actor->info->reactiontime) - { - actor->type = mobjinfo[actor->type].painchance; // Become the regular version of the fling object. - actor->flags = mobjinfo[actor->type].flags; // Reset actor flags. - P_SetMobjState(actor, actor->info->spawnstate); // Go to regular object's spawn state. - return; - } - - // Keep stuff from going down inside floors and junk - actor->flags &= ~MF_NOCLIPHEIGHT; - - // Let attracted rings move through walls and such. - actor->flags |= MF_NOCLIP; - - P_Attract(actor, actor->tracer, false); } // Function: A_DropMine -- GitLab