code:
static dboolean P_CheckMeleeRange(mobj_t *actor)
{
mobj_t *pl = actor->target;
return // killough 7/18/98: friendly monsters don't attack other friends
pl && !(actor->flags & pl->flags & MF_FRIEND) &&
(P_AproxDistance(pl->x-actor->x, pl->y-actor->y) <
(compatibility_level == doom_12_compatibility ?
MELEERANGE :
MELEERANGE - 20*FRACUNIT + pl->info->radius)) &&
P_CheckSight(actor, actor->target);
}
code:
void A_SargAttack(mobj_t *actor)
{
if (!actor->target)
return;
A_FaceTarget(actor);
if (compatibility_level == doom_12_compatibility)
{
int damage = ((P_Random(pr_sargattack)%10)+1)*4;
P_LineAttack(actor, actor->angle, MELEERANGE, 0, damage);
}
else
{
if (P_CheckMeleeRange(actor))
{
int damage = ((P_Random(pr_sargattack)%10)+1)*4;
P_DamageMobj(actor->target, actor, actor, damage);
}
}
}