- scriptified P_CheckMeleeRange2.

This commit is contained in:
Christoph Oelckers 2018-12-05 18:58:15 +01:00
parent e4e86dd4f8
commit 2e7e6cba9d
4 changed files with 45 additions and 51 deletions

View file

@ -317,56 +317,6 @@ DEFINE_ACTION_FUNCTION(AActor, CheckMeleeRange)
ACTION_RETURN_INT(self->CheckMeleeRange());
}
//----------------------------------------------------------------------------
//
// FUNC P_CheckMeleeRange2
//
//----------------------------------------------------------------------------
bool P_CheckMeleeRange2 (AActor *actor)
{
AActor *mo;
double dist;
if (!actor->target || (actor->Sector->Flags & SECF_NOATTACK))
{
return false;
}
mo = actor->target;
dist = mo->Distance2D (actor);
if (dist >= 128 || dist < actor->meleerange + mo->radius)
{
return false;
}
if (mo->Z() > actor->Top())
{ // Target is higher than the attacker
return false;
}
else if (actor->Z() > mo->Top())
{ // Attacker is higher
return false;
}
else if (actor->IsFriend(mo))
{
// killough 7/18/98: friendly monsters don't attack other friends
return false;
}
if (!P_CheckSight(actor, mo))
{
return false;
}
return true;
}
DEFINE_ACTION_FUNCTION(AActor, CheckMeleeRange2)
{
PARAM_SELF_PROLOGUE(AActor);
ACTION_RETURN_INT(P_CheckMeleeRange2(self));
}
//=============================================================================
//
// P_CheckMissileRange

View file

@ -663,7 +663,6 @@ class Actor : Thinker native
native void SetIdle(bool nofunction = false);
native bool CheckMeleeRange();
native bool CheckMeleeRange2();
native virtual int DamageMobj(Actor inflictor, Actor source, int damage, Name mod, int flags = 0, double angle = 0);
native void PoisonMobj (Actor inflictor, Actor source, int damage, int duration, int period, Name type);
native double AimLineAttack(double angle, double distance, out FTranslatedLineTarget pLineTarget = null, double vrange = 0., int flags = 0, Actor target = null, Actor friender = null);

View file

@ -290,6 +290,50 @@ class Serpent : Actor
}
}
extend class Actor
{
//----------------------------------------------------------------------------
//
// FUNC P_CheckMeleeRange2
//
// This belongs to the Serpent but was initially exported on Actor
// so it needs to remain there.
//
//----------------------------------------------------------------------------
bool CheckMeleeRange2 ()
{
Actor mo;
double dist;
if (!target || (CurSector.Flags & Sector.SECF_NOATTACK))
{
return false;
}
mo = target;
dist = mo.Distance2D (self);
if (dist >= 128 || dist < meleerange + mo.radius)
{
return false;
}
if (mo.pos.Z > pos.Z + height)
{ // Target is higher than the attacker
return false;
}
else if (pos.Z > mo.pos.Z + mo.height)
{ // Attacker is higher
return false;
}
else if (IsFriend(mo))
{
// killough 7/18/98: friendly monsters don't attack other friends
return false;
}
return CheckSight(mo);
}
}
// Serpent Leader -----------------------------------------------------------
class SerpentLeader : Serpent

View file

@ -334,6 +334,7 @@ struct Sector native play
SECF_ENDGODMODE = 256, // getting damaged by this sector ends god mode
SECF_ENDLEVEL = 512, // ends level when health goes below 10
SECF_HAZARD = 1024, // Change to Strife's delayed damage handling.
SECF_NOATTACK = 2048, // monsters cannot start attacks in this sector.
SECF_WASSECRET = 1 << 30, // a secret that was discovered
SECF_SECRET = 1 << 31, // a secret sector