- moved MF_INCHASE to flags7.

Due to how the MBF21 flag checkers work the first flag word may not repurpose any unused flags in it. We still need MF_SLIDE to be usable by them, despite being totally unused.
This commit is contained in:
Christoph Oelckers 2021-07-01 00:57:50 +02:00
parent 29f6dd23b9
commit 7ade3b829b
3 changed files with 16 additions and 19 deletions

View file

@ -142,7 +142,7 @@ enum ActorFlag
MF_DROPOFF = 0x00000400, // allow jumps from high places MF_DROPOFF = 0x00000400, // allow jumps from high places
MF_PICKUP = 0x00000800, // for players to pick up items MF_PICKUP = 0x00000800, // for players to pick up items
MF_NOCLIP = 0x00001000, // player cheat MF_NOCLIP = 0x00001000, // player cheat
MF_INCHASE = 0x00002000, // [RH] used by A_Chase and A_Look to avoid recursion MF_SLIDE = 0x00002000, // Not used anymore but needed for MBF21 flag checkers.
MF_FLOAT = 0x00004000, // allow moves to any height, no gravity MF_FLOAT = 0x00004000, // allow moves to any height, no gravity
MF_TELEPORT = 0x00008000, // don't cross lines or look at heights MF_TELEPORT = 0x00008000, // don't cross lines or look at heights
MF_MISSILE = 0x00010000, // don't hit same species, explode on block MF_MISSILE = 0x00010000, // don't hit same species, explode on block
@ -167,9 +167,6 @@ enum ActorFlag
MF_NOLIFTDROP = 0x20000000, // [RH] Used with MF_NOGRAVITY to avoid dropping with lifts MF_NOLIFTDROP = 0x20000000, // [RH] Used with MF_NOGRAVITY to avoid dropping with lifts
MF_STEALTH = 0x40000000, // [RH] Andy Baker's stealth monsters MF_STEALTH = 0x40000000, // [RH] Andy Baker's stealth monsters
MF_ICECORPSE = 0x80000000, // a frozen corpse (for blasting) [RH] was 0x800000 MF_ICECORPSE = 0x80000000, // a frozen corpse (for blasting) [RH] was 0x800000
// --- dummies for unknown/unimplemented Strife flags ---
MF_STRIFEx8000000 = 0, // seems related to MF_SHADOW
}; };
// --- mobj.flags2 --- // --- mobj.flags2 ---
@ -399,6 +396,7 @@ enum ActorFlag7
MF7_FORCEZERORADIUSDMG = 0x10000000, // passes zero radius damage on to P_DamageMobj, this is necessary in some cases where DoSpecialDamage gets overrideen. MF7_FORCEZERORADIUSDMG = 0x10000000, // passes zero radius damage on to P_DamageMobj, this is necessary in some cases where DoSpecialDamage gets overrideen.
MF7_NOINFIGHTSPECIES = 0x20000000, // don't start infights with one's own species. MF7_NOINFIGHTSPECIES = 0x20000000, // don't start infights with one's own species.
MF7_FORCEINFIGHTING = 0x40000000, // overrides a map setting of 'no infighting'. MF7_FORCEINFIGHTING = 0x40000000, // overrides a map setting of 'no infighting'.
MF7_INCHASE = 0x80000000, // [RH] used by A_Chase and A_Look to avoid recursion
}; };
enum ActorFlag8 enum ActorFlag8
{ {

View file

@ -1964,7 +1964,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LookEx)
} }
// Let the self wander around aimlessly looking for a fight // Let the self wander around aimlessly looking for a fight
if (!(self->flags & MF_INCHASE)) if (!(self->flags7 & MF7_INCHASE))
{ {
if (seestate) if (seestate)
{ {
@ -2040,7 +2040,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_LookEx)
} }
} }
if (self->target && !(self->flags & MF_INCHASE)) if (self->target && !(self->flags7 & MF7_INCHASE))
{ {
if (!(flags & LOF_NOJUMP)) if (!(flags & LOF_NOJUMP))
{ {
@ -2204,15 +2204,14 @@ nosee:
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)
{ {
if (actor->flags5 & MF5_INCONVERSATION) if (actor->flags5 & MF5_INCONVERSATION)
return; return;
if (actor->flags & MF_INCHASE) if (actor->flags7 & MF7_INCHASE)
{ {
return; return;
} }
actor->flags |= MF_INCHASE; actor->flags7 |= MF7_INCHASE;
// [RH] Andy Baker's stealth monsters // [RH] Andy Baker's stealth monsters
if (actor->flags & MF_STEALTH) if (actor->flags & MF_STEALTH)
@ -2325,7 +2324,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
} }
if (P_LookForPlayers (actor, true, NULL) && actor->target != actor->goal) if (P_LookForPlayers (actor, true, NULL) && actor->target != actor->goal)
{ // got a new target { // got a new target
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
if (actor->target == NULL) if (actor->target == NULL)
@ -2336,14 +2335,14 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
if (actor->target == NULL) if (actor->target == NULL)
{ {
if (!dontmove) A_Wander(actor); if (!dontmove) A_Wander(actor);
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
} }
else else
{ {
actor->SetIdle(); actor->SetIdle();
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
} }
@ -2362,7 +2361,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
//over and over again. //over and over again.
if (flags & CHF_STOPIFBLOCKED) if (flags & CHF_STOPIFBLOCKED)
actor->movecount = pr_trywalk() & 15; actor->movecount = pr_trywalk() & 15;
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
@ -2410,7 +2409,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
actor->flags4 |= MF4_INCOMBAT; actor->flags4 |= MF4_INCOMBAT;
actor->SetIdle(); actor->SetIdle();
} }
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
actor->goal = newgoal; actor->goal = newgoal;
return; return;
} }
@ -2461,7 +2460,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
S_Sound (actor, CHAN_WEAPON, 0, actor->AttackSound, 1, ATTN_NORM); S_Sound (actor, CHAN_WEAPON, 0, actor->AttackSound, 1, ATTN_NORM);
actor->SetState (meleestate); actor->SetState (meleestate);
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
@ -2479,7 +2478,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
actor->SetState (missilestate); actor->SetState (missilestate);
actor->flags |= MF_JUSTATTACKED; actor->flags |= MF_JUSTATTACKED;
actor->flags4 |= MF4_INCOMBAT; actor->flags4 |= MF4_INCOMBAT;
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; return;
} }
} }
@ -2505,7 +2504,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
} }
if (gotNew && actor->target != oldtarget) if (gotNew && actor->target != oldtarget)
{ {
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
return; // got a new target return; // got a new target
} }
} }
@ -2555,7 +2554,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
actor->PlayActiveSound (); actor->PlayActiveSound ();
} }
actor->flags &= ~MF_INCHASE; actor->flags7 &= ~MF7_INCHASE;
} }
//========================================================================== //==========================================================================

View file

@ -81,7 +81,7 @@ extern float BackbuttonAlpha;
// internal flags. These do not get exposed to actor definitions but scripts need to be able to access them as variables. // internal flags. These do not get exposed to actor definitions but scripts need to be able to access them as variables.
static FFlagDef InternalActorFlagDefs[]= static FFlagDef InternalActorFlagDefs[]=
{ {
DEFINE_FLAG(MF, INCHASE, AActor, flags), DEFINE_FLAG(MF7, INCHASE, AActor, flags7),
DEFINE_FLAG(MF, UNMORPHED, AActor, flags), DEFINE_FLAG(MF, UNMORPHED, AActor, flags),
DEFINE_FLAG(MF2, FLY, AActor, flags2), DEFINE_FLAG(MF2, FLY, AActor, flags2),
DEFINE_FLAG(MF2, ONMOBJ, AActor, flags2), DEFINE_FLAG(MF2, ONMOBJ, AActor, flags2),