Merge branch 'maint'

This commit is contained in:
Christoph Oelckers 2013-08-12 20:42:21 +02:00
commit be1a00c537
10 changed files with 32 additions and 10 deletions

View File

@ -236,7 +236,7 @@ enum
MF4_RANDOMIZE = 0x00000010, // Missile has random initial tic count MF4_RANDOMIZE = 0x00000010, // Missile has random initial tic count
MF4_NOSKIN = 0x00000020, // Player cannot use skins MF4_NOSKIN = 0x00000020, // Player cannot use skins
MF4_FIXMAPTHINGPOS = 0x00000040, // Fix this actor's position when spawned as a map thing MF4_FIXMAPTHINGPOS = 0x00000040, // Fix this actor's position when spawned as a map thing
MF4_ACTLIKEBRIDGE = 0x00000080, // Pickups can "stand" on this actor MF4_ACTLIKEBRIDGE = 0x00000080, // Pickups can "stand" on this actor / cannot be moved by any sector action.
MF4_STRIFEDAMAGE = 0x00000100, // Strife projectiles only do up to 4x damage, not 8x MF4_STRIFEDAMAGE = 0x00000100, // Strife projectiles only do up to 4x damage, not 8x
MF4_CANUSEWALLS = 0x00000200, // Can activate 'use' specials MF4_CANUSEWALLS = 0x00000200, // Can activate 'use' specials
@ -266,7 +266,7 @@ enum
// --- mobj.flags5 --- // --- mobj.flags5 ---
MF5_DONTDRAIN = 0x00000001, // cannot be drained health from. MF5_DONTDRAIN = 0x00000001, // cannot be drained health from.
/* = 0x00000002, */ /* = 0x00000002, reserved for use by scripting branch */
MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances. MF5_NODROPOFF = 0x00000004, // cannot drop off under any circumstances.
MF5_NOFORWARDFALL = 0x00000008, // Does not make any actor fall forward by being damaged by this MF5_NOFORWARDFALL = 0x00000008, // Does not make any actor fall forward by being damaged by this
MF5_COUNTSECRET = 0x00000010, // From Doom 64: actor acts like a secret MF5_COUNTSECRET = 0x00000010, // From Doom 64: actor acts like a secret
@ -284,7 +284,7 @@ enum
MF5_NEVERFAST = 0x00010000, // never uses 'fast' attacking logic MF5_NEVERFAST = 0x00010000, // never uses 'fast' attacking logic
MF5_ALWAYSRESPAWN = 0x00020000, // always respawns, regardless of skill setting MF5_ALWAYSRESPAWN = 0x00020000, // always respawns, regardless of skill setting
MF5_NEVERRESPAWN = 0x00040000, // never respawns, regardless of skill setting MF5_NEVERRESPAWN = 0x00040000, // never respawns, regardless of skill setting
MF5_DONTRIP = 0x00080000, // Ripping projectiles explode when hittin this actor MF5_DONTRIP = 0x00080000, // Ripping projectiles explode when hitting this actor
MF5_NOINFIGHTING = 0x00100000, // This actor doesn't switch target when it's hurt MF5_NOINFIGHTING = 0x00100000, // This actor doesn't switch target when it's hurt
MF5_NOINTERACTION = 0x00200000, // Thing is completely excluded from any gameplay related checks MF5_NOINTERACTION = 0x00200000, // Thing is completely excluded from any gameplay related checks
MF5_NOTIMEFREEZE = 0x00400000, // Actor is not affected by time freezer MF5_NOTIMEFREEZE = 0x00400000, // Actor is not affected by time freezer
@ -334,6 +334,11 @@ enum
MF6_NOTONAUTOMAP = 0x40000000, // will not be shown on automap with the 'scanner' powerup. MF6_NOTONAUTOMAP = 0x40000000, // will not be shown on automap with the 'scanner' powerup.
MF6_RELATIVETOFLOOR = 0x80000000, // [RC] Make flying actors be affected by lifts. MF6_RELATIVETOFLOOR = 0x80000000, // [RC] Make flying actors be affected by lifts.
// --- mobj.flags6 ---
MF7_NEVERTARGET = 0x00000001, // can not be targetted at all, even if monster friendliness is considered.
MF7_NOTELESTOMP = 0x00000002, // cannot telefrag under any circumstances (even when set by MAPINFO)
// --- mobj.renderflags --- // --- mobj.renderflags ---
RF_XFLIP = 0x0001, // Flip sprite horizontally RF_XFLIP = 0x0001, // Flip sprite horizontally
@ -838,6 +843,7 @@ public:
DWORD flags4; // [RH] Even more flags! DWORD flags4; // [RH] Even more flags!
DWORD flags5; // OMG! We need another one. DWORD flags5; // OMG! We need another one.
DWORD flags6; // Shit! Where did all the flags go? DWORD flags6; // Shit! Where did all the flags go?
DWORD flags7; //
// [BB] If 0, everybody can see the actor, if > 0, only members of team (VisibleToTeam-1) can see it. // [BB] If 0, everybody can see the actor, if > 0, only members of team (VisibleToTeam-1) can see it.
DWORD VisibleToTeam; DWORD VisibleToTeam;

View File

@ -311,6 +311,7 @@ void cht_DoCheat (player_t *player, int cheat)
player->mo->flags4 = player->mo->GetDefault()->flags4; player->mo->flags4 = player->mo->GetDefault()->flags4;
player->mo->flags5 = player->mo->GetDefault()->flags5; player->mo->flags5 = player->mo->GetDefault()->flags5;
player->mo->flags6 = player->mo->GetDefault()->flags6; player->mo->flags6 = player->mo->GetDefault()->flags6;
player->mo->flags7 = player->mo->GetDefault()->flags7;
player->mo->renderflags &= ~RF_INVISIBLE; player->mo->renderflags &= ~RF_INVISIBLE;
player->mo->height = player->mo->GetDefault()->height; player->mo->height = player->mo->GetDefault()->height;
player->mo->radius = player->mo->GetDefault()->radius; player->mo->radius = player->mo->GetDefault()->radius;

View File

@ -2644,6 +2644,7 @@ static bool P_CheckForResurrection(AActor *self, bool usevilestates)
corpsehit->flags4 = info->flags4; corpsehit->flags4 = info->flags4;
corpsehit->flags5 = info->flags5; corpsehit->flags5 = info->flags5;
corpsehit->flags6 = info->flags6; corpsehit->flags6 = info->flags6;
corpsehit->flags7 = info->flags7;
corpsehit->health = info->health; corpsehit->health = info->health;
corpsehit->target = NULL; corpsehit->target = NULL;
corpsehit->lastenemy = NULL; corpsehit->lastenemy = NULL;

View File

@ -1508,6 +1508,9 @@ bool AActor::OkayToSwitchTarget (AActor *other)
if (other == this) if (other == this)
return false; // [RH] Don't hate self (can happen when shooting barrels) return false; // [RH] Don't hate self (can happen when shooting barrels)
if (other->flags7 & MF7_NEVERTARGET)
return false; // never EVER target me!
if (!(other->flags & MF_SHOOTABLE)) if (!(other->flags & MF_SHOOTABLE))
return false; // Don't attack things that can't be hurt return false; // Don't attack things that can't be hurt

View File

@ -334,8 +334,7 @@ bool P_TeleportMove (AActor *thing, fixed_t x, fixed_t y, fixed_t z, bool telefr
spechit.Clear (); spechit.Clear ();
bool StompAlwaysFrags = (thing->flags2 & MF2_TELESTOMP) || bool StompAlwaysFrags = ((thing->flags2 & MF2_TELESTOMP) || (level.flags & LEVEL_MONSTERSTELEFRAG) || telefrag) && !(thing->flags7 & MF7_NOTELESTOMP);
(level.flags & LEVEL_MONSTERSTELEFRAG) || telefrag;
FBoundingBox box(x, y, thing->radius); FBoundingBox box(x, y, thing->radius);
FBlockLinesIterator it(box); FBlockLinesIterator it(box);

View File

@ -200,8 +200,12 @@ void AActor::Serialize (FArchive &arc)
<< flags3 << flags3
<< flags4 << flags4
<< flags5 << flags5
<< flags6 << flags6;
<< special1 if (SaveVersion >= 4504)
{
arc << flags7;
}
arc << special1
<< special2 << special2
<< health << health
<< movedir << movedir
@ -826,7 +830,7 @@ void AActor::CopyFriendliness (AActor *other, bool changeTarget, bool resetHealt
flags4 = (flags4 & ~(MF4_NOHATEPLAYERS | MF4_BOSSSPAWNED)) | (other->flags4 & (MF4_NOHATEPLAYERS | MF4_BOSSSPAWNED)); flags4 = (flags4 & ~(MF4_NOHATEPLAYERS | MF4_BOSSSPAWNED)) | (other->flags4 & (MF4_NOHATEPLAYERS | MF4_BOSSSPAWNED));
FriendPlayer = other->FriendPlayer; FriendPlayer = other->FriendPlayer;
DesignatedTeam = other->DesignatedTeam; DesignatedTeam = other->DesignatedTeam;
if (changeTarget && other->target != NULL && !(other->target->flags3 & MF3_NOTARGET)) if (changeTarget && other->target != NULL && !(other->target->flags3 & MF3_NOTARGET) && !(other->target->flags7 & MF7_NEVERTARGET))
{ {
// LastHeard must be set as well so that A_Look can react to the new target if called // LastHeard must be set as well so that A_Look can react to the new target if called
LastHeard = target = other->target; LastHeard = target = other->target;
@ -6133,6 +6137,9 @@ void PrintMiscActorInfo(AActor *query)
Printf("\n\tflags6: %x", query->flags6); Printf("\n\tflags6: %x", query->flags6);
for (flagi = 0; flagi <= 31; flagi++) for (flagi = 0; flagi <= 31; flagi++)
if (query->flags6 & 1<<flagi) Printf(" %s", FLAG_NAME(1<<flagi, flags6)); if (query->flags6 & 1<<flagi) Printf(" %s", FLAG_NAME(1<<flagi, flags6));
Printf("\n\tflags7: %x", query->flags7);
for (flagi = 0; flagi <= 31; flagi++)
if (query->flags7 & 1<<flagi) Printf(" %s", FLAG_NAME(1<<flagi, flags7));
Printf("\nBounce flags: %x\nBounce factors: f:%f, w:%f", Printf("\nBounce flags: %x\nBounce factors: f:%f, w:%f",
query->BounceFlags, FIXED2FLOAT(query->bouncefactor), query->BounceFlags, FIXED2FLOAT(query->bouncefactor),
FIXED2FLOAT(query->wallbouncefactor)); FIXED2FLOAT(query->wallbouncefactor));

View File

@ -452,6 +452,7 @@ bool P_Thing_Raise(AActor *thing)
thing->flags4 = info->flags4; thing->flags4 = info->flags4;
thing->flags5 = info->flags5; thing->flags5 = info->flags5;
thing->flags6 = info->flags6; thing->flags6 = info->flags6;
thing->flags7 = info->flags7;
thing->health = info->health; thing->health = info->health;
thing->target = NULL; thing->target = NULL;
thing->lastenemy = NULL; thing->lastenemy = NULL;

View File

@ -237,6 +237,9 @@ static FFlagDef ActorFlags[]=
DEFINE_FLAG(MF6, NOTONAUTOMAP, AActor, flags6), DEFINE_FLAG(MF6, NOTONAUTOMAP, AActor, flags6),
DEFINE_FLAG(MF6, RELATIVETOFLOOR, AActor, flags6), DEFINE_FLAG(MF6, RELATIVETOFLOOR, AActor, flags6),
DEFINE_FLAG(MF7, NEVERTARGET, AActor, flags7),
DEFINE_FLAG(MF7, NOTELESTOMP, AActor, flags7),
// Effect flags // Effect flags
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects), DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
DEFINE_FLAG2(FX_ROCKET, ROCKETTRAIL, AActor, effects), DEFINE_FLAG2(FX_ROCKET, ROCKETTRAIL, AActor, effects),

View File

@ -1286,7 +1286,8 @@ DEFINE_PROPERTY(clearflags, 0, Actor)
defaults->flags3 = defaults->flags3 =
defaults->flags4 = defaults->flags4 =
defaults->flags5 = defaults->flags5 =
defaults->flags6 = 0; defaults->flags6 =
defaults->flags7 = 0;
defaults->flags2 &= MF2_ARGSDEFINED; // this flag must not be cleared defaults->flags2 &= MF2_ARGSDEFINED; // this flag must not be cleared
} }

View File

@ -76,7 +76,7 @@ const char *GetVersionString();
// Use 4500 as the base git save version, since it's higher than the // Use 4500 as the base git save version, since it's higher than the
// SVN revision ever got. // SVN revision ever got.
#define SAVEVER 4503 #define SAVEVER 4504
#define SAVEVERSTRINGIFY2(x) #x #define SAVEVERSTRINGIFY2(x) #x
#define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x) #define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x)