mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 04:22:34 +00:00
- Fixed: The minimum parameter count for ACS_Execute and ACS_ExecuteAlways for
DECORATE was wrong (2 instead of 1.) - Changed: Hexen set every cluster to be a hub if it hadn't been defined before a level using this cluster. Now it will only do that if HexenHack is true, i.e. when original Hexen format MAPINFOs are parsed. For ZDoom format MAPINFOs it will now be the same as for the other games which means that 'hub' has to be declared explicitly. - Added an Idle state that is entered in place of the spawn state if a monster has to return to its inactive state if it can't find any more targets. - Added MF5_NOINTERACTION flag which completely disables all physics related code for any actor with this flag. Mostly useful for particle effects where the actors just move a certain distance and then disappear. - Removed the last remains of the antialias precalculation code from am_map.cpp because it was no longer used. - Fixed: Two-sided lines bordering a secret sector were not drawn in the proper color - Fixed: The automap didn't check ACS_LockedExecuteDoor for its lock color. SVN r876 (trunk)
This commit is contained in:
parent
799a4ea1bb
commit
d780c2e3a4
11 changed files with 455 additions and 455 deletions
|
@ -1,3 +1,24 @@
|
|||
April 3, 2008 (Changes by Graf Zahl)
|
||||
- Fixed: The minimum parameter count for ACS_Execute and ACS_ExecuteAlways for
|
||||
DECORATE was wrong (2 instead of 1.)
|
||||
|
||||
April 2, 2008 (Changes by Graf Zahl)
|
||||
- Changed: Hexen set every cluster to be a hub if it hadn't been defined before
|
||||
a level using this cluster. Now it will only do that if HexenHack is true,
|
||||
i.e. when original Hexen format MAPINFOs are parsed. For ZDoom format
|
||||
MAPINFOs it will now be the same as for the other games which means that
|
||||
'hub' has to be declared explicitly.
|
||||
- Added an Idle state that is entered in place of the spawn state if a monster
|
||||
has to return to its inactive state if it can't find any more targets.
|
||||
- Added MF5_NOINTERACTION flag which completely disables all physics related
|
||||
code for any actor with this flag. Mostly useful for particle effects where
|
||||
the actors just move a certain distance and then disappear.
|
||||
- Removed the last remains of the antialias precalculation code from
|
||||
am_map.cpp because it was no longer used.
|
||||
- Fixed: Two-sided lines bordering a secret sector were not drawn in the
|
||||
proper color
|
||||
- Fixed: The automap didn't check ACS_LockedExecuteDoor for its lock color.
|
||||
|
||||
April 2, 2008
|
||||
- Switched sounds local to the listener from head-relative 3D sounds to 2D
|
||||
sounds so stereo sounds have full separation. I tried using set3DSpread,
|
||||
|
|
|
@ -72,7 +72,7 @@ DEFINE_SPECIAL(TeleportOther, 76, 3, 3)
|
|||
DEFINE_SPECIAL(TeleportGroup, 77, 5, 5)
|
||||
DEFINE_SPECIAL(TeleportInSector, 78, 4, 5)
|
||||
|
||||
DEFINE_SPECIAL(ACS_Execute, 80, 2, 5)
|
||||
DEFINE_SPECIAL(ACS_Execute, 80, 1, 5)
|
||||
DEFINE_SPECIAL(ACS_Suspend, 81, 2, 2)
|
||||
DEFINE_SPECIAL(ACS_Terminate, 82, 2, 2)
|
||||
DEFINE_SPECIAL(ACS_LockedExecute, 83, 5, 5)
|
||||
|
@ -197,7 +197,7 @@ DEFINE_SPECIAL(Scroll_Texture_Model, 222, -1, -1)
|
|||
DEFINE_SPECIAL(Scroll_Floor, 223, 4, 4)
|
||||
DEFINE_SPECIAL(Scroll_Ceiling, 224, 4, 4)
|
||||
DEFINE_SPECIAL(Scroll_Texture_Offsets, 225, -1, -1)
|
||||
DEFINE_SPECIAL(ACS_ExecuteAlways, 226, 2, 5)
|
||||
DEFINE_SPECIAL(ACS_ExecuteAlways, 226, 1, 5)
|
||||
DEFINE_SPECIAL(PointPush_SetForce, 227, -1, -1)
|
||||
DEFINE_SPECIAL(Plat_RaiseAndStayTx0, 228, 2, 2)
|
||||
DEFINE_SPECIAL(Thing_SetGoal, 229, 3, 4)
|
||||
|
|
|
@ -298,6 +298,7 @@ enum
|
|||
MF5_NEVERRESPAWN = 0x00040000, // never respawns, regardless of skill setting
|
||||
MF5_DONTRIP = 0x00080000, // Ripping projectiles explode when hittin this actor
|
||||
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
|
||||
|
||||
|
||||
// --- mobj.renderflags ---
|
||||
|
@ -758,6 +759,7 @@ public:
|
|||
bool SetStateNF (FState *newstate);
|
||||
virtual bool UpdateWaterLevel (fixed_t oldz, bool splash=true);
|
||||
bool isFast();
|
||||
void SetIdle();
|
||||
|
||||
FState *FindState (FName label) const;
|
||||
FState *FindState (FName label, FName sublabel, bool exact = false) const;
|
||||
|
|
|
@ -115,8 +115,6 @@ inline fixed_t MTOF(fixed_t x)
|
|||
return MulScale24 (x, scale_mtof);
|
||||
}
|
||||
|
||||
//static int WeightingScale;
|
||||
|
||||
CVAR (Int, am_rotate, 0, CVAR_ARCHIVE);
|
||||
CVAR (Int, am_overlay, 0, CVAR_ARCHIVE);
|
||||
CVAR (Bool, am_showsecrets, true, CVAR_ARCHIVE);
|
||||
|
@ -347,16 +345,6 @@ static fixed_t mapxstart=0; //x-value for the bitmap.
|
|||
static bool stopped = true;
|
||||
|
||||
|
||||
/*
|
||||
#define NUMALIASES 3
|
||||
#define WALLCOLORS -1
|
||||
#define FDWALLCOLORS -2
|
||||
#define CDWALLCOLORS -3
|
||||
|
||||
static BYTE antialias[NUMALIASES][NUMWEIGHTS];
|
||||
*/
|
||||
|
||||
|
||||
void AM_rotatePoint (fixed_t *x, fixed_t *y);
|
||||
void AM_rotate (fixed_t *x, fixed_t *y, angle_t an);
|
||||
void AM_doFollowPlayer ();
|
||||
|
@ -733,57 +721,6 @@ static void AM_initColors (bool overlayed)
|
|||
NotSeenColor = DoomColors[10];
|
||||
}
|
||||
|
||||
#if 0
|
||||
// Due to a bug (marked below) precalculated antialiasing was never working properly.
|
||||
// Also, tests show it provides no measurable performance improvement.
|
||||
// And since it only complicates matters it's disabled for now.
|
||||
|
||||
// initialize the anti-aliased lines
|
||||
static struct
|
||||
{
|
||||
int *color;
|
||||
int prevcolor;
|
||||
int falseColor;
|
||||
} aliasedLines[3] = {
|
||||
{ &WallColor, -1, WALLCOLORS },
|
||||
{ &FDWallColor, -1, FDWALLCOLORS },
|
||||
{ &CDWallColor, -1, CDWALLCOLORS }
|
||||
};
|
||||
float backRed, backGreen, backBlue;
|
||||
|
||||
GetComponents (Background, palette, backRed, backGreen, backBlue);
|
||||
|
||||
for (int alias = 0; alias < NUMALIASES; alias++)
|
||||
{
|
||||
if (aliasedLines[alias].prevcolor != *(aliasedLines[alias].color) ||
|
||||
lastpal != palette || lastback != Background)
|
||||
{
|
||||
float foreRed, foreGreen, foreBlue;
|
||||
|
||||
aliasedLines[alias].prevcolor = *(aliasedLines[alias].color);
|
||||
GetComponents (*(aliasedLines[alias].color), palette, foreRed, foreGreen, foreBlue);
|
||||
|
||||
for (int i = 0; i < NUMWEIGHTS; i++)
|
||||
{
|
||||
float step = (float)i;
|
||||
float fore = (NUMWEIGHTS-1 - step) / (NUMWEIGHTS-1);
|
||||
float back = step / (NUMWEIGHTS-1);
|
||||
int red = (int)(backRed * back + foreRed * fore);
|
||||
int green = (int)(backGreen * back + foreGreen * fore);
|
||||
int blue = (int)(backGreen * back + foreBlue * fore);
|
||||
// [RH] What was I thinking here?
|
||||
// if (palette)
|
||||
antialias[alias][i] = ColorMatcher.Pick (red, green, blue);
|
||||
// else
|
||||
// antialias[alias][i] = MAKERGB(red, green, blue);
|
||||
}
|
||||
}
|
||||
// This line was inside the 'if' block rendering the whole
|
||||
// precalculation inoperable.
|
||||
*(aliasedLines[alias].color) = aliasedLines[alias].falseColor;
|
||||
}
|
||||
lastback = Background;
|
||||
#endif
|
||||
lastpal = palette;
|
||||
}
|
||||
|
||||
|
@ -1357,6 +1294,22 @@ void AM_drawGrid (const AMColor &color)
|
|||
}
|
||||
}
|
||||
|
||||
static bool AM_CheckSecret(line_t *line)
|
||||
{
|
||||
if (line->frontsector != NULL)
|
||||
{
|
||||
if (line->frontsector->oldspecial &&
|
||||
(am_map_secrets==2 || (am_map_secrets==1 && !(line->frontsector->special&SECRET_MASK))))
|
||||
return true;
|
||||
}
|
||||
if (line->backsector != NULL)
|
||||
{
|
||||
if (line->backsector->oldspecial &&
|
||||
(am_map_secrets==2 || (am_map_secrets==1 && !(line->backsector->special&SECRET_MASK))))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
//
|
||||
// Determines visible lines, draws them.
|
||||
// This is LineDef based, not LineSeg based.
|
||||
|
@ -1384,19 +1337,15 @@ void AM_drawWalls (bool allmap)
|
|||
if ((lines[i].flags & ML_DONTDRAW) && am_cheat == 0)
|
||||
continue;
|
||||
|
||||
if (!lines[i].backsector)
|
||||
{
|
||||
if (lines[i].frontsector->oldspecial &&
|
||||
(am_map_secrets==2 || (am_map_secrets==1 && !(lines[i].frontsector->special&SECRET_MASK))))
|
||||
if (AM_CheckSecret(&lines[i]))
|
||||
{
|
||||
// map secret sectors like Boom
|
||||
AM_drawMline(&l, SecretSectorColor);
|
||||
}
|
||||
else
|
||||
else if (!lines[i].backsector)
|
||||
{
|
||||
AM_drawMline(&l, WallColor);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((lines[i].special == Teleport ||
|
||||
|
@ -1424,6 +1373,7 @@ void AM_drawWalls (bool allmap)
|
|||
}
|
||||
else if (lines[i].special == Door_LockedRaise ||
|
||||
lines[i].special == ACS_LockedExecute ||
|
||||
lines[i].special == ACS_LockedExecuteDoor ||
|
||||
(lines[i].special == Generic_Door && lines[i].args[4]!=0))
|
||||
{
|
||||
if (am_usecustomcolors)
|
||||
|
@ -1805,7 +1755,6 @@ void AM_Drawer ()
|
|||
f_w = screen->GetWidth ();
|
||||
f_h = ST_Y;
|
||||
f_p = screen->GetPitch ();
|
||||
//WeightingScale = 0;
|
||||
|
||||
AM_clearFB(Background);
|
||||
}
|
||||
|
@ -1816,13 +1765,6 @@ void AM_Drawer ()
|
|||
f_w = realviewwidth;
|
||||
f_h = realviewheight;
|
||||
f_p = screen->GetPitch ();
|
||||
/*
|
||||
WeightingScale = (int)(am_ovtrans * 256.f);
|
||||
if (WeightingScale < 0 || WeightingScale >= 256)
|
||||
{
|
||||
WeightingScale = 0;
|
||||
}
|
||||
*/
|
||||
}
|
||||
AM_activateNewScale();
|
||||
|
||||
|
|
|
@ -1060,7 +1060,7 @@ static void ParseMapInfoLower (FScanner &sc,
|
|||
clusterinfo = &wadclusterinfos[clusterindex];
|
||||
memset (clusterinfo, 0, sizeof(cluster_info_t));
|
||||
clusterinfo->cluster = sc.Number;
|
||||
if (gameinfo.gametype == GAME_Hexen)
|
||||
if (HexenHack)
|
||||
{
|
||||
clusterinfo->flags |= CLUSTER_HUB;
|
||||
}
|
||||
|
|
|
@ -543,7 +543,7 @@ void A_KlaxonBlare (AActor *self)
|
|||
A_TurretLook (self);
|
||||
if (self->target == NULL)
|
||||
{
|
||||
self->SetState (self->SpawnState);
|
||||
self->SetIdle();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -140,6 +140,7 @@ xx(Crush)
|
|||
xx(Yes)
|
||||
xx(No)
|
||||
xx(Greetings)
|
||||
xx(Idle)
|
||||
|
||||
// Compatible death names for the decorate parser.
|
||||
xx(XDeath)
|
||||
|
|
|
@ -1884,7 +1884,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
|||
}
|
||||
else
|
||||
{
|
||||
actor->SetState (actor->SpawnState);
|
||||
actor->SetIdle();
|
||||
actor->flags &= ~MF_INCHASE;
|
||||
return;
|
||||
}
|
||||
|
@ -1945,7 +1945,7 @@ void A_DoChase (AActor *actor, bool fastchase, FState *meleestate, FState *missi
|
|||
if (newgoal != NULL && delay != 0)
|
||||
{
|
||||
actor->flags4 |= MF4_INCOMBAT;
|
||||
actor->SetState (actor->SpawnState);
|
||||
actor->SetIdle();
|
||||
}
|
||||
actor->flags &= ~MF_INCHASE;
|
||||
actor->goal = newgoal;
|
||||
|
|
|
@ -1432,11 +1432,12 @@ void P_XYMovement (AActor *mo, fixed_t scrollx, fixed_t scrolly)
|
|||
mo->momx = mo->momy = mo->momz = 0;
|
||||
if (!(mo->flags2 & MF2_DORMANT))
|
||||
{
|
||||
mo->SetState (mo->SeeState != NULL ? mo->SeeState : mo->SpawnState);
|
||||
if (mo->SeeState != NULL) mo->SetState (mo->SeeState);
|
||||
else mo->SetIdle();
|
||||
}
|
||||
else
|
||||
{
|
||||
mo->SetState (mo->SpawnState);
|
||||
mo->SetIdle();
|
||||
mo->tics = -1;
|
||||
}
|
||||
}
|
||||
|
@ -2398,11 +2399,12 @@ bool AActor::Slam (AActor *thing)
|
|||
int dam = GetMissileDamage (7, 1);
|
||||
P_DamageMobj (thing, this, this, dam, NAME_Melee);
|
||||
P_TraceBleed (dam, thing, this);
|
||||
SetState (SeeState != NULL ? SeeState : SpawnState);
|
||||
if (SeeState != NULL) SetState (SeeState);
|
||||
else SetIdle();
|
||||
}
|
||||
else
|
||||
{
|
||||
SetState (SpawnState);
|
||||
SetIdle();
|
||||
tics = -1;
|
||||
}
|
||||
}
|
||||
|
@ -2542,6 +2544,19 @@ void AActor::Tick ()
|
|||
PrevY = y;
|
||||
PrevZ = z;
|
||||
|
||||
if (flags5 & MF5_NOINTERACTION)
|
||||
{
|
||||
// only do the minimally necessary things here to save time.
|
||||
UnlinkFromWorld ();
|
||||
flags |= MF_NOBLOCKMAP;
|
||||
x += momx;
|
||||
y += momy;
|
||||
z += momz;
|
||||
LinkToWorld ();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
AInventory * item = Inventory;
|
||||
|
||||
// Handle powerup effects here so that the order is controlled
|
||||
|
@ -2940,6 +2955,7 @@ void AActor::Tick ()
|
|||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// cycle through states, calling action functions at transitions
|
||||
if (tics != -1)
|
||||
|
@ -3195,7 +3211,7 @@ AActor *AActor::StaticSpawn (const PClass *type, fixed_t ix, fixed_t iy, fixed_t
|
|||
actor->ceilingsector = actor->Sector;
|
||||
actor->ceilingpic = actor->ceilingsector->ceilingpic;
|
||||
}
|
||||
else
|
||||
else if (!(actor->flags5 & MF5_NOINTERACTION))
|
||||
{
|
||||
P_FindFloorCeiling (actor);
|
||||
actor->floorz = tmffloorz;
|
||||
|
@ -3206,6 +3222,16 @@ AActor *AActor::StaticSpawn (const PClass *type, fixed_t ix, fixed_t iy, fixed_t
|
|||
actor->ceilingpic = tmfceilingpic;
|
||||
actor->ceilingsector = tmfceilingsector;
|
||||
}
|
||||
else
|
||||
{
|
||||
actor->floorz = FIXED_MIN;
|
||||
actor->dropoffz = FIXED_MIN;
|
||||
actor->ceilingz = FIXED_MAX;
|
||||
actor->floorpic = 0;
|
||||
actor->floorsector = actor->Sector;
|
||||
actor->ceilingpic = 0;
|
||||
actor->ceilingsector = actor->Sector;
|
||||
}
|
||||
|
||||
actor->SpawnPoint[0] = ix >> FRACBITS;
|
||||
actor->SpawnPoint[1] = iy >> FRACBITS;
|
||||
|
@ -4922,6 +4948,13 @@ void AActor::Crash()
|
|||
}
|
||||
}
|
||||
|
||||
void AActor::SetIdle()
|
||||
{
|
||||
FState *idle = FindState (NAME_Idle);
|
||||
if (idle == NULL) idle = SpawnState;
|
||||
SetState(idle);
|
||||
}
|
||||
|
||||
FArchive &operator<< (FArchive &arc, FSoundIndex &snd)
|
||||
{
|
||||
if (arc.IsStoring ())
|
||||
|
|
|
@ -235,6 +235,7 @@ static flagdef ActorFlags[]=
|
|||
DEFINE_FLAG(MF5, NEVERRESPAWN, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, DONTRIP, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, NOINFIGHTING, AActor, flags5),
|
||||
DEFINE_FLAG(MF5, NOINTERACTION, AActor, flags5),
|
||||
|
||||
// Effect flags
|
||||
DEFINE_FLAG(FX, VISIBILITYPULSE, AActor, effects),
|
||||
|
|
Loading…
Reference in a new issue