- Fixed: P_StartScript was missing a NULL pointer check for the error

message. When trying to puke a script outside a map it crashed.
- Fixed: The random number generator for large numbers must mask out the
  sign bit before performing a modulo.
- Now that the conversation states are pointers there is no need to make
  AActor::ConversationAnimation virtual. No class overrides this method 
  anymore.
- Replaced AMacil1::TakeSpecialDamage with MF5_NODAMAGE.
- Fixed: AMacil2::TakeSpecialDamage and AOracle::TakeSpecialDamage didn't
  check whether inflictor was NULL and crashed when used with 'kill monsters'.
- Fixed: Some Strife decorations didn't loop their animation


SVN r113 (trunk)
This commit is contained in:
Christoph Oelckers 2006-05-13 21:22:08 +00:00
parent bb617dfbfd
commit b97c417101
12 changed files with 27 additions and 32 deletions

View file

@ -1,4 +1,15 @@
May 13, 2006 (Changes by Graf Zahl) May 13, 2006 (Changes by Graf Zahl)
- Fixed: P_StartScript was missing a NULL pointer check for the error
message. When trying to puke a script outside a map it crashed.
- Fixed: The random number generator for large numbers must mask out the
sign bit before performing a modulo.
- Now that the conversation states are pointers there is no need to make
AActor::ConversationAnimation virtual. No class overrides this method
anymore.
- Replaced AMacil1::TakeSpecialDamage with MF5_NODAMAGE.
- Fixed: AMacil2::TakeSpecialDamage and AOracle::TakeSpecialDamage didn't
check whether inflictor was NULL and crashed when used with 'kill monsters'.
- Fixed: Some Strife decorations didn't loop their animation
- Changed: The decision whether blood splatter sprites are spawned is no - Changed: The decision whether blood splatter sprites are spawned is no
longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER longer determined by game. Instead there's a new flag, MF5_BLOODSPLATTER
which is deciding what to do. To keep backwards compatibility this flag which is deciding what to do. To keep backwards compatibility this flag

View file

@ -555,7 +555,7 @@ public:
void SetShade (int r, int g, int b); void SetShade (int r, int g, int b);
// Plays a conversation animation // Plays a conversation animation
virtual void ConversationAnimation (int animnum); void ConversationAnimation (int animnum);
// Make this actor hate the same things as another actor // Make this actor hate the same things as another actor
void CopyFriendliness (const AActor *other, bool changeTarget); void CopyFriendliness (const AActor *other, bool changeTarget);

View file

@ -1863,10 +1863,10 @@ void D_DoomMain (void)
// [RH] Make sure zdoom.pk3 is always loaded, // [RH] Make sure zdoom.pk3 is always loaded,
// as it contains magic stuff we need. // as it contains magic stuff we need.
wad = BaseFileSearch ("zdoom.pk3", NULL, true); wad = BaseFileSearch (BASEWAD, NULL, true);
if (wad == NULL) if (wad == NULL)
{ {
I_FatalError ("Cannot find zdoom.pk3"); I_FatalError ("Cannot find " BASEWAD);
} }
I_SetTitleString (IWADTypeNames[IdentifyVersion(wad)]); I_SetTitleString (IWADTypeNames[IdentifyVersion(wad)]);

View file

@ -17,7 +17,6 @@ class AMacil1 : public AStrifeHumanoid
DECLARE_ACTOR (AMacil1, AStrifeHumanoid) DECLARE_ACTOR (AMacil1, AStrifeHumanoid)
public: public:
void NoBlockingSet (); void NoBlockingSet ();
int TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype);
}; };
FState AMacil1::States[] = FState AMacil1::States[] =
@ -91,6 +90,7 @@ IMPLEMENT_ACTOR (AMacil1, Strife, 64, 0)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags3 (MF3_ISMONSTER) PROP_Flags3 (MF3_ISMONSTER)
PROP_Flags4 (MF4_FIRERESIST|MF4_NOICEDEATH|MF4_NOSPLASHALERT) PROP_Flags4 (MF4_FIRERESIST|MF4_NOICEDEATH|MF4_NOSPLASHALERT)
PROP_Flags5 (MF5_NODAMAGE)
PROP_MinMissileChance (150) PROP_MinMissileChance (150)
PROP_RadiusFixed (20) PROP_RadiusFixed (20)
PROP_HeightFixed (56) PROP_HeightFixed (56)
@ -112,25 +112,6 @@ void AMacil1::NoBlockingSet ()
P_DropItem (this, "BoxOfBullets", -1, 256); P_DropItem (this, "BoxOfBullets", -1, 256);
} }
//============================================================================
//
// AMacil1 :: TakeSpecialDamage
//
// Before you storm the castle, Macil is a god and unkillable. The effort
// required to take the castle apparently drops him to mere godlike status.
//
//============================================================================
int AMacil1::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype)
{
target = source;
if (PainState != NULL)
{
SetState (PainState);
}
return -1;
}
// Macil (version 2) --------------------------------------------------------- // Macil (version 2) ---------------------------------------------------------
class AMacil2 : public AMacil1 class AMacil2 : public AMacil1
@ -153,6 +134,7 @@ IMPLEMENT_STATELESS_ACTOR (AMacil2, Strife, 200, 0)
PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS) PROP_Flags2 (MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_MCROSS)
PROP_Flags4Clear (MF4_FIRERESIST) PROP_Flags4Clear (MF4_FIRERESIST)
PROP_Flags4Set (MF4_SPECTRAL) PROP_Flags4Set (MF4_SPECTRAL)
PROP_Flags5Clear (MF5_NODAMAGE)
PROP_MinMissileChance (150) PROP_MinMissileChance (150)
PROP_Tag ("MACIL") PROP_Tag ("MACIL")
PROP_DeathSound ("macil/slop") PROP_DeathSound ("macil/slop")
@ -181,9 +163,8 @@ void AMacil2::NoBlockingSet ()
int AMacil2::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype) int AMacil2::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype)
{ {
if (inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1))) if (inflictor != NULL && inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1)))
return -1; return -1;
// This must skip the method of AMacil1 but it should call AActor's version. return Super::TakeSpecialDamage(inflictor, source, damage, damagetype);
return AActor::TakeSpecialDamage(inflictor, source, damage, damagetype);
} }

View file

@ -81,7 +81,7 @@ void A_WakeOracleSpectre (AActor *self)
int AOracle::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype) int AOracle::TakeSpecialDamage (AActor *inflictor, AActor *source, int damage, int damagetype)
{ {
if (inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1))) if (inflictor != NULL && inflictor->IsKindOf (RUNTIME_CLASS(ASpectralLightningV1)))
return -1; return -1;
return Super::TakeSpecialDamage(inflictor, source, damage, damagetype); return Super::TakeSpecialDamage(inflictor, source, damage, damagetype);
} }

View file

@ -139,7 +139,7 @@ int FRandom::operator() (int mod)
num = (num << 8) | (*this)(); num = (num << 8) | (*this)();
num = (num << 8) | (*this)(); num = (num << 8) | (*this)();
num = (num << 8) | (*this)(); num = (num << 8) | (*this)();
return num % mod; return (num&0x7fffffff) % mod;
} }
} }

View file

@ -4567,7 +4567,7 @@ int P_StartScript (AActor *who, line_t *where, int script, char *map, bool backS
} }
else else
{ {
if (!net || who->player == &players[consoleplayer]) if (!net || (who && who->player == &players[consoleplayer]))
{ {
Printf ("P_StartScript: Unknown script %d\n", script); Printf ("P_StartScript: Unknown script %d\n", script);
} }

View file

@ -2746,7 +2746,7 @@ static void P_InitTagLists ()
} }
} }
static void P_GetPolySpots (int lump, TArray<FNodeBuilder::FPolyStart> &spots, TArray<FNodeBuilder::FPolyStart> &anchors) void P_GetPolySpots (int lump, TArray<FNodeBuilder::FPolyStart> &spots, TArray<FNodeBuilder::FPolyStart> &anchors)
{ {
if (HasBehavior) if (HasBehavior)
{ {

View file

@ -66,6 +66,7 @@
// This is so that derivates can use the same savegame versions without worrying about engine compatibility // This is so that derivates can use the same savegame versions without worrying about engine compatibility
#define GAMESIG "ZDOOM" #define GAMESIG "ZDOOM"
#define BASEWAD "zdoom.pk3"
// MINSAVEVER is the minimum level snapshot version that can be loaded. // MINSAVEVER is the minimum level snapshot version that can be loaded.
#define MINSAVEVER 232 // Used by 2.0.99 #define MINSAVEVER 232 // Used by 2.0.99

View file

@ -244,3 +244,4 @@ CCMD (vid_currentmode)
{ {
Printf ("%dx%dx%d\n", DisplayWidth, DisplayHeight, DisplayBits); Printf ("%dx%dx%d\n", DisplayWidth, DisplayHeight, DisplayBits);
} }

View file

@ -75,6 +75,7 @@ ACTOR RadSuit : PowerupGiver 2025
+INVENTORY.AUTOACTIVATE +INVENTORY.AUTOACTIVATE
+INVENTORY.ALWAYSPICKUP +INVENTORY.ALWAYSPICKUP
Inventory.MaxAmount 0 Inventory.MaxAmount 0
Inventory.PickupMessage "$GOTSUIT"
Powerup.Type IronFeet Powerup.Type IronFeet
States States
{ {

View file

@ -571,7 +571,7 @@ ACTOR WaterFountain 112
Spawn: Spawn:
WTFT ABC 4 WTFT ABC 4
WTFT D 4 A_LoopActiveSound WTFT D 4 A_LoopActiveSound
Stop Loop
} }
} }
@ -763,7 +763,7 @@ ACTOR BurningBrazier 106
{ {
Spawn: Spawn:
BRAZ ABCD 4 Bright BRAZ ABCD 4 Bright
Stop Loop
} }
} }