mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-28 06:53:40 +00:00
- Added CHF_STOPIFBLOCKED and CHF_DONTTURN macro.
- CHF_STOPIFBLOCKED simply prevents the actor from changing directions for movement. - CHF_DONTTURN implies NORANDOMTURN, NOPOSTATTACKTURN and STOPIFBLOCKED.
This commit is contained in:
parent
da9c3ff9d2
commit
bfd9e2bc1c
2 changed files with 28 additions and 13 deletions
|
@ -2195,6 +2195,7 @@ enum ChaseFlags
|
||||||
CHF_NORANDOMTURN = 32,
|
CHF_NORANDOMTURN = 32,
|
||||||
CHF_DONTANGLE = 64,
|
CHF_DONTANGLE = 64,
|
||||||
CHF_NOPOSTATTACKTURN = 128,
|
CHF_NOPOSTATTACKTURN = 128,
|
||||||
|
CHF_STOPIFBLOCKED = 256,
|
||||||
};
|
};
|
||||||
|
|
||||||
void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missilestate, bool playactive, bool nightmarefast, bool dontmove, int flags)
|
void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missilestate, bool playactive, bool nightmarefast, bool dontmove, int flags)
|
||||||
|
@ -2349,10 +2350,15 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
||||||
if (actor->flags & MF_JUSTATTACKED)
|
if (actor->flags & MF_JUSTATTACKED)
|
||||||
{
|
{
|
||||||
actor->flags &= ~MF_JUSTATTACKED;
|
actor->flags &= ~MF_JUSTATTACKED;
|
||||||
if (!actor->isFast() && !dontmove && !(flags & CHF_NOPOSTATTACKTURN))
|
if (!actor->isFast() && !dontmove && !(flags & CHF_NOPOSTATTACKTURN) && !(flags & CHF_STOPIFBLOCKED))
|
||||||
{
|
{
|
||||||
P_NewChaseDir (actor);
|
P_NewChaseDir (actor);
|
||||||
}
|
}
|
||||||
|
//Because P_TryWalk would never be reached if the actor is stopped by a blocking object,
|
||||||
|
//need to make sure the movecount is reset, otherwise they will just keep attacking
|
||||||
|
//over and over again.
|
||||||
|
if (flags & CHF_STOPIFBLOCKED)
|
||||||
|
actor->movecount = pr_trywalk() & 15;
|
||||||
actor->flags &= ~MF_INCHASE;
|
actor->flags &= ~MF_INCHASE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -2510,6 +2516,8 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
||||||
if (actor->strafecount)
|
if (actor->strafecount)
|
||||||
actor->strafecount--;
|
actor->strafecount--;
|
||||||
|
|
||||||
|
bool movecheck = P_Move(actor);
|
||||||
|
|
||||||
// class bosses don't do this when strafing
|
// class bosses don't do this when strafing
|
||||||
if ((!fastchase || !actor->FastChaseStrafeCount) && !dontmove)
|
if ((!fastchase || !actor->FastChaseStrafeCount) && !dontmove)
|
||||||
{
|
{
|
||||||
|
@ -2521,24 +2529,25 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
||||||
// chase towards player
|
// chase towards player
|
||||||
if (actor->movecount >= 0)
|
if (actor->movecount >= 0)
|
||||||
actor->movecount--;
|
actor->movecount--;
|
||||||
if (((!(flags & CHF_NORANDOMTURN)) && (actor->movecount < 0)) || !P_Move(actor))
|
if (!(flags & CHF_STOPIFBLOCKED))
|
||||||
{
|
{
|
||||||
P_NewChaseDir (actor);
|
if ((!(flags & CHF_NORANDOMTURN) && (actor->movecount < 0)) || !movecheck)
|
||||||
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the move was illegal, reset it
|
// if the move was illegal, reset it
|
||||||
// (copied from A_SerpentChase - it applies to everything with CANTLEAVEFLOORPIC!)
|
// (copied from A_SerpentChase - it applies to everything with CANTLEAVEFLOORPIC!)
|
||||||
if (actor->flags2&MF2_CANTLEAVEFLOORPIC && actor->floorpic != oldFloor )
|
if (actor->flags2&MF2_CANTLEAVEFLOORPIC && actor->floorpic != oldFloor )
|
||||||
{
|
{
|
||||||
if (P_TryMove (actor, oldX, oldY, false))
|
if (!(flags & CHF_STOPIFBLOCKED) && P_TryMove(actor, oldX, oldY, false))
|
||||||
{
|
{
|
||||||
if (nomonsterinterpolation)
|
if (nomonsterinterpolation)
|
||||||
{
|
{
|
||||||
actor->PrevX = oldX;
|
actor->PrevX = oldX;
|
||||||
actor->PrevY = oldY;
|
actor->PrevY = oldY;
|
||||||
}
|
}
|
||||||
|
P_NewChaseDir(actor);
|
||||||
}
|
}
|
||||||
P_NewChaseDir (actor);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (dontmove && actor->movecount > 0) actor->movecount--;
|
else if (dontmove && actor->movecount > 0) actor->movecount--;
|
||||||
|
|
|
@ -79,14 +79,20 @@ const int SXF_ISMASTER = 1 << 27;
|
||||||
const int SXF_ISTRACER = 1 << 28;
|
const int SXF_ISTRACER = 1 << 28;
|
||||||
|
|
||||||
// Flags for A_Chase
|
// Flags for A_Chase
|
||||||
const int CHF_FASTCHASE = 1;
|
enum
|
||||||
const int CHF_NOPLAYACTIVE = 2;
|
{
|
||||||
const int CHF_NIGHTMAREFAST = 4;
|
CHF_FASTCHASE = 1,
|
||||||
const int CHF_RESURRECT = 8;
|
CHF_NOPLAYACTIVE = 2,
|
||||||
const int CHF_DONTMOVE = 16;
|
CHF_NIGHTMAREFAST = 4,
|
||||||
const int CHF_NORANDOMTURN = 32;
|
CHF_RESURRECT = 8,
|
||||||
const int CHF_DONTANGLE = 64;
|
CHF_DONTMOVE = 16,
|
||||||
const int CHF_NOPOSTATTACKTURN = 128;
|
CHF_NORANDOMTURN = 32,
|
||||||
|
CHF_DONTANGLE = 64,
|
||||||
|
CHF_NOPOSTATTACKTURN = 128,
|
||||||
|
CHF_STOPIFBLOCKED = 256,
|
||||||
|
|
||||||
|
CHF_DONTTURN = CHF_NORANDOMTURN|CHF_NOPOSTATTACKTURN|CHF_STOPIFBLOCKED,
|
||||||
|
};
|
||||||
|
|
||||||
// Flags for A_LookEx
|
// Flags for A_LookEx
|
||||||
const int LOF_NOSIGHTCHECK = 1;
|
const int LOF_NOSIGHTCHECK = 1;
|
||||||
|
|
Loading…
Reference in a new issue