mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-26 22:11:43 +00:00
- scriptified P_CheckMeleeRange2.
This commit is contained in:
parent
e4e86dd4f8
commit
2e7e6cba9d
4 changed files with 45 additions and 51 deletions
|
@ -317,56 +317,6 @@ DEFINE_ACTION_FUNCTION(AActor, CheckMeleeRange)
|
||||||
ACTION_RETURN_INT(self->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
|
// P_CheckMissileRange
|
||||||
|
|
|
@ -663,7 +663,6 @@ class Actor : Thinker native
|
||||||
|
|
||||||
native void SetIdle(bool nofunction = false);
|
native void SetIdle(bool nofunction = false);
|
||||||
native bool CheckMeleeRange();
|
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 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 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);
|
native double AimLineAttack(double angle, double distance, out FTranslatedLineTarget pLineTarget = null, double vrange = 0., int flags = 0, Actor target = null, Actor friender = null);
|
||||||
|
|
|
@ -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 -----------------------------------------------------------
|
// Serpent Leader -----------------------------------------------------------
|
||||||
|
|
||||||
class SerpentLeader : Serpent
|
class SerpentLeader : Serpent
|
||||||
|
|
|
@ -334,6 +334,7 @@ struct Sector native play
|
||||||
SECF_ENDGODMODE = 256, // getting damaged by this sector ends god mode
|
SECF_ENDGODMODE = 256, // getting damaged by this sector ends god mode
|
||||||
SECF_ENDLEVEL = 512, // ends level when health goes below 10
|
SECF_ENDLEVEL = 512, // ends level when health goes below 10
|
||||||
SECF_HAZARD = 1024, // Change to Strife's delayed damage handling.
|
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_WASSECRET = 1 << 30, // a secret that was discovered
|
||||||
SECF_SECRET = 1 << 31, // a secret sector
|
SECF_SECRET = 1 << 31, // a secret sector
|
||||||
|
|
Loading…
Reference in a new issue