mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-01-18 23:21:41 +00:00
- Fixed: Skin definitions were never freed.
- Fixed: Names in terrain definitions were never freed. Replacing them with FNames would have been a good idea anyway. - Fixed: The lock definitions were never freed. - Fixed: FDoorAnimation was missing a destructor. - Fixed: animation and switch definitions were never freed. - Replaced all other places where FindType was used with FNames with IFindType. SVN r90 (trunk)
This commit is contained in:
parent
ace3ed1188
commit
763efb3682
11 changed files with 108 additions and 32 deletions
|
@ -1,4 +1,12 @@
|
||||||
May 9, 2006 (Changes by Graf Zahl)
|
May 9, 2006 (Changes by Graf Zahl)
|
||||||
|
- Fixed: Skin definitions were never freed.
|
||||||
|
- Fixed: Names in terrain definitions were never freed. Replacing them with
|
||||||
|
FNames would have been a good idea anyway.
|
||||||
|
- Fixed: The lock definitions were never freed.
|
||||||
|
- Fixed: FDoorAnimation was missing a destructor.
|
||||||
|
- Fixed: animation and switch definitions were never freed.
|
||||||
|
- Replaced all other places where FindType was used with FNames with
|
||||||
|
IFindType.
|
||||||
- Fixed: If you want to use a name as the missile parameter for the basic
|
- Fixed: If you want to use a name as the missile parameter for the basic
|
||||||
attack functions the type search in DoAttack must be case insensitive.
|
attack functions the type search in DoAttack must be case insensitive.
|
||||||
- Fixed: APowerup::DoEffect must do more thorough checks before resetting
|
- Fixed: APowerup::DoEffect must do more thorough checks before resetting
|
||||||
|
|
|
@ -2011,6 +2011,7 @@ void D_DoomMain (void)
|
||||||
|
|
||||||
Wads.InitMultipleFiles (&wadfiles);
|
Wads.InitMultipleFiles (&wadfiles);
|
||||||
|
|
||||||
|
|
||||||
// [RH] Initialize localizable strings.
|
// [RH] Initialize localizable strings.
|
||||||
GStrings.LoadStrings (false);
|
GStrings.LoadStrings (false);
|
||||||
|
|
||||||
|
@ -2080,6 +2081,7 @@ void D_DoomMain (void)
|
||||||
|
|
||||||
FActorInfo::StaticSetActorNums ();
|
FActorInfo::StaticSetActorNums ();
|
||||||
|
|
||||||
|
|
||||||
// [RH] User-configurable startup strings. Because BOOM does.
|
// [RH] User-configurable startup strings. Because BOOM does.
|
||||||
static const char *startupString[5] = {
|
static const char *startupString[5] = {
|
||||||
"STARTUP1", "STARTUP2", "STARTUP3", "STARTUP4", "STARTUP5"
|
"STARTUP1", "STARTUP2", "STARTUP3", "STARTUP4", "STARTUP5"
|
||||||
|
|
|
@ -85,6 +85,15 @@ static bool keysdone=false; // have the locks been initialized?
|
||||||
static int currentnumber; // number to be assigned to next key
|
static int currentnumber; // number to be assigned to next key
|
||||||
static bool ignorekey; // set to true when the current lock is not being used
|
static bool ignorekey; // set to true when the current lock is not being used
|
||||||
|
|
||||||
|
static void ClearLocks();
|
||||||
|
|
||||||
|
static struct LockDeleter
|
||||||
|
{
|
||||||
|
~LockDeleter()
|
||||||
|
{
|
||||||
|
ClearLocks();
|
||||||
|
}
|
||||||
|
} DeleteTheLocks;
|
||||||
|
|
||||||
static const char * keywords_lock[]={
|
static const char * keywords_lock[]={
|
||||||
"ANY",
|
"ANY",
|
||||||
|
|
|
@ -480,6 +480,25 @@ void P_SpawnDoorRaiseIn5Mins (sector_t *sec)
|
||||||
|
|
||||||
TArray<FDoorAnimation> DoorAnimations;
|
TArray<FDoorAnimation> DoorAnimations;
|
||||||
|
|
||||||
|
FDoorAnimation::~FDoorAnimation()
|
||||||
|
{
|
||||||
|
if (TextureFrames != NULL)
|
||||||
|
{
|
||||||
|
delete [] TextureFrames;
|
||||||
|
TextureFrames = NULL;
|
||||||
|
}
|
||||||
|
if (OpenSound != NULL)
|
||||||
|
{
|
||||||
|
delete [] OpenSound;
|
||||||
|
OpenSound = NULL;
|
||||||
|
}
|
||||||
|
if (CloseSound != NULL)
|
||||||
|
{
|
||||||
|
delete [] CloseSound;
|
||||||
|
CloseSound = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// EV_SlidingDoor : slide a door horizontally
|
// EV_SlidingDoor : slide a door horizontally
|
||||||
// (animate midtexture, then set noblocking line)
|
// (animate midtexture, then set noblocking line)
|
||||||
//
|
//
|
||||||
|
|
|
@ -142,7 +142,19 @@ struct FAnimDef
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
TArray<FAnimDef *> Anims;
|
class DeletingAnimArray : public TArray<FAnimDef *>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~DeletingAnimArray()
|
||||||
|
{
|
||||||
|
for(unsigned i=0;i<Size();i++)
|
||||||
|
{
|
||||||
|
if ((*this)[i] != NULL) free((*this)[i]);
|
||||||
|
(*this)[i]=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
static DeletingAnimArray Anims;
|
||||||
|
|
||||||
// killough 3/7/98: Initialize generalized scrolling
|
// killough 3/7/98: Initialize generalized scrolling
|
||||||
static void P_SpawnScrollers();
|
static void P_SpawnScrollers();
|
||||||
|
|
|
@ -578,6 +578,8 @@ struct FDoorAnimation
|
||||||
int NumTextureFrames;
|
int NumTextureFrames;
|
||||||
char *OpenSound;
|
char *OpenSound;
|
||||||
char *CloseSound;
|
char *CloseSound;
|
||||||
|
|
||||||
|
~FDoorAnimation();
|
||||||
};
|
};
|
||||||
|
|
||||||
extern TArray<FDoorAnimation> DoorAnimations;
|
extern TArray<FDoorAnimation> DoorAnimations;
|
||||||
|
|
|
@ -114,7 +114,19 @@ static WORD AddSwitchDef (FSwitchDef *def);
|
||||||
// CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
|
// CHANGE THE TEXTURE OF A WALL SWITCH TO ITS OPPOSITE
|
||||||
//
|
//
|
||||||
|
|
||||||
static TArray<FSwitchDef *> SwitchList;
|
class DeletingSwitchArray : public TArray<FSwitchDef *>
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
~DeletingSwitchArray()
|
||||||
|
{
|
||||||
|
for(unsigned i=0;i<Size();i++)
|
||||||
|
{
|
||||||
|
if ((*this)[i] != NULL) free((*this)[i]);
|
||||||
|
(*this)[i]=NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
static DeletingSwitchArray SwitchList;
|
||||||
|
|
||||||
//
|
//
|
||||||
// P_InitSwitchList
|
// P_InitSwitchList
|
||||||
|
|
|
@ -125,10 +125,10 @@ static void ParseOuter ();
|
||||||
static void ParseSplash ();
|
static void ParseSplash ();
|
||||||
static void ParseTerrain ();
|
static void ParseTerrain ();
|
||||||
static void ParseFloor ();
|
static void ParseFloor ();
|
||||||
static int FindSplash (const char *name);
|
static int FindSplash (FName name);
|
||||||
static int FindTerrain (const char *name);
|
static int FindTerrain (FName name);
|
||||||
static void GenericParse (FGenericParse *parser, const char **keywords,
|
static void GenericParse (FGenericParse *parser, const char **keywords,
|
||||||
void *fields, const char *type, const char *name);
|
void *fields, const char *type, FName name);
|
||||||
static void ParseDamage (int keyword, void *fields);
|
static void ParseDamage (int keyword, void *fields);
|
||||||
static void ParseFriction (int keyword, void *fields);
|
static void ParseFriction (int keyword, void *fields);
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ static void ParseFriction (int keyword, void *fields);
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
byte *TerrainTypes;
|
TArray<byte>TerrainTypes;
|
||||||
TArray<FSplashDef> Splashes;
|
TArray<FSplashDef> Splashes;
|
||||||
TArray<FTerrainDef> Terrains;
|
TArray<FTerrainDef> Terrains;
|
||||||
|
|
||||||
|
@ -268,8 +268,8 @@ void P_InitTerrainTypes ()
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
size = (TexMan.NumTextures()+1)*sizeof(byte);
|
size = (TexMan.NumTextures()+1)*sizeof(byte);
|
||||||
TerrainTypes = (byte *)M_Malloc (size);
|
TerrainTypes.Resize(size);
|
||||||
memset (TerrainTypes, 0, size);
|
memset (&TerrainTypes[0], 0, size);
|
||||||
|
|
||||||
MakeDefaultTerrain ();
|
MakeDefaultTerrain ();
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ static void MakeDefaultTerrain ()
|
||||||
FTerrainDef def;
|
FTerrainDef def;
|
||||||
|
|
||||||
memset (&def, 0, sizeof(def));
|
memset (&def, 0, sizeof(def));
|
||||||
def.Name = copystring ("Solid");
|
def.Name = "Solid";
|
||||||
def.Splash = -1;
|
def.Splash = -1;
|
||||||
Terrains.Push (def);
|
Terrains.Push (def);
|
||||||
}
|
}
|
||||||
|
@ -399,13 +399,15 @@ void ParseSplash ()
|
||||||
int splashnum;
|
int splashnum;
|
||||||
FSplashDef *splashdef;
|
FSplashDef *splashdef;
|
||||||
bool isnew = false;
|
bool isnew = false;
|
||||||
|
FName name;
|
||||||
|
|
||||||
SC_MustGetString ();
|
SC_MustGetString ();
|
||||||
splashnum = (int)FindSplash (sc_String);
|
name = sc_String;
|
||||||
|
splashnum = (int)FindSplash (name);
|
||||||
if (splashnum < 0)
|
if (splashnum < 0)
|
||||||
{
|
{
|
||||||
FSplashDef def;
|
FSplashDef def;
|
||||||
def.Name = copystring (sc_String);
|
def.Name = name;
|
||||||
splashnum = (int)Splashes.Push (def);
|
splashnum = (int)Splashes.Push (def);
|
||||||
isnew = true;
|
isnew = true;
|
||||||
}
|
}
|
||||||
|
@ -446,16 +448,17 @@ void ParseSplash ()
|
||||||
void ParseTerrain ()
|
void ParseTerrain ()
|
||||||
{
|
{
|
||||||
int terrainnum;
|
int terrainnum;
|
||||||
const char *name;
|
FName name;
|
||||||
|
|
||||||
SC_MustGetString ();
|
SC_MustGetString ();
|
||||||
terrainnum = (int)FindTerrain (sc_String);
|
name = sc_String;
|
||||||
|
terrainnum = (int)FindTerrain (name);
|
||||||
if (terrainnum < 0)
|
if (terrainnum < 0)
|
||||||
{
|
{
|
||||||
FTerrainDef def;
|
FTerrainDef def;
|
||||||
memset (&def, 0, sizeof(def));
|
memset (&def, 0, sizeof(def));
|
||||||
def.Splash = -1;
|
def.Splash = -1;
|
||||||
def.Name = copystring (sc_String);
|
def.Name = name;
|
||||||
terrainnum = (int)Terrains.Push (def);
|
terrainnum = (int)Terrains.Push (def);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -549,7 +552,7 @@ static void ParseFriction (int keyword, void *fields)
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
static void GenericParse (FGenericParse *parser, const char **keywords,
|
static void GenericParse (FGenericParse *parser, const char **keywords,
|
||||||
void *fields, const char *type, const char *name)
|
void *fields, const char *type, FName name)
|
||||||
{
|
{
|
||||||
bool notdone = true;
|
bool notdone = true;
|
||||||
int keyword;
|
int keyword;
|
||||||
|
@ -578,7 +581,7 @@ static void GenericParse (FGenericParse *parser, const char **keywords,
|
||||||
if (val == 0)
|
if (val == 0)
|
||||||
{
|
{
|
||||||
Printf ("Unknown sound %s in %s %s\n",
|
Printf ("Unknown sound %s in %s %s\n",
|
||||||
sc_String, type, name);
|
sc_String, type, name.GetChars());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -599,13 +602,13 @@ static void GenericParse (FGenericParse *parser, const char **keywords,
|
||||||
if (!info->IsDescendantOf (RUNTIME_CLASS(AActor)))
|
if (!info->IsDescendantOf (RUNTIME_CLASS(AActor)))
|
||||||
{
|
{
|
||||||
Printf ("%s is not an Actor (in %s %s)\n",
|
Printf ("%s is not an Actor (in %s %s)\n",
|
||||||
sc_String, type, name);
|
sc_String, type, name.GetChars());
|
||||||
info = NULL;
|
info = NULL;
|
||||||
}
|
}
|
||||||
else if (info == NULL)
|
else if (info == NULL)
|
||||||
{
|
{
|
||||||
Printf ("Unknown actor %s in %s %s\n",
|
Printf ("Unknown actor %s in %s %s\n",
|
||||||
sc_String, type, name);
|
sc_String, type, name.GetChars());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SET_FIELD (const TypeInfo *, info);
|
SET_FIELD (const TypeInfo *, info);
|
||||||
|
@ -618,7 +621,7 @@ static void GenericParse (FGenericParse *parser, const char **keywords,
|
||||||
if (val == -1)
|
if (val == -1)
|
||||||
{
|
{
|
||||||
Printf ("Splash %s is not defined yet (in %s %s)\n",
|
Printf ("Splash %s is not defined yet (in %s %s)\n",
|
||||||
sc_String, type, name);
|
sc_String, type, name.GetChars());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -683,13 +686,13 @@ static void ParseFloor ()
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int FindSplash (const char *name)
|
int FindSplash (FName name)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < Splashes.Size (); i++)
|
for (i = 0; i < Splashes.Size (); i++)
|
||||||
{
|
{
|
||||||
if (stricmp (Splashes[i].Name, name) == 0)
|
if (Splashes[i].Name == name)
|
||||||
{
|
{
|
||||||
return (int)i;
|
return (int)i;
|
||||||
}
|
}
|
||||||
|
@ -703,13 +706,13 @@ int FindSplash (const char *name)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int FindTerrain (const char *name)
|
int FindTerrain (FName name)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
for (i = 0; i < Terrains.Size (); i++)
|
for (i = 0; i < Terrains.Size (); i++)
|
||||||
{
|
{
|
||||||
if (stricmp (Terrains[i].Name, name) == 0)
|
if (Terrains[i].Name == name)
|
||||||
{
|
{
|
||||||
return (int)i;
|
return (int)i;
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,15 +36,17 @@
|
||||||
|
|
||||||
#include "dobject.h"
|
#include "dobject.h"
|
||||||
#include "m_fixed.h"
|
#include "m_fixed.h"
|
||||||
|
#include "tarray.h"
|
||||||
|
#include "name.h"
|
||||||
|
|
||||||
extern byte *TerrainTypes;
|
extern TArray<byte> TerrainTypes;
|
||||||
|
|
||||||
// at game start
|
// at game start
|
||||||
void P_InitTerrainTypes ();
|
void P_InitTerrainTypes ();
|
||||||
|
|
||||||
struct FSplashDef
|
struct FSplashDef
|
||||||
{
|
{
|
||||||
const char *Name;
|
FName Name;
|
||||||
int SmallSplashSound;
|
int SmallSplashSound;
|
||||||
int NormalSplashSound;
|
int NormalSplashSound;
|
||||||
const TypeInfo *SmallSplash;
|
const TypeInfo *SmallSplash;
|
||||||
|
@ -60,7 +62,7 @@ struct FSplashDef
|
||||||
|
|
||||||
struct FTerrainDef
|
struct FTerrainDef
|
||||||
{
|
{
|
||||||
const char *Name;
|
FName Name;
|
||||||
int Splash;
|
int Splash;
|
||||||
int DamageAmount;
|
int DamageAmount;
|
||||||
int DamageMOD;
|
int DamageMOD;
|
||||||
|
|
|
@ -785,6 +785,13 @@ void R_InitSprites ()
|
||||||
qsort (&skins[1], numskins-1, sizeof(FPlayerSkin), skinsorter);
|
qsort (&skins[1], numskins-1, sizeof(FPlayerSkin), skinsorter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static struct SkinDeleter
|
||||||
|
{
|
||||||
|
~SkinDeleter()
|
||||||
|
{
|
||||||
|
if (skins!=NULL) delete[] skins;
|
||||||
|
}
|
||||||
|
} DeleteTheSkins;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -1015,7 +1015,7 @@ void A_NoBlocking (AActor *actor)
|
||||||
{
|
{
|
||||||
if (di->Name != NAME_None)
|
if (di->Name != NAME_None)
|
||||||
{
|
{
|
||||||
const TypeInfo *ti = TypeInfo::FindType(di->Name);
|
const TypeInfo *ti = TypeInfo::IFindType(di->Name);
|
||||||
if (ti) P_DropItem (actor, ti, di->amount, di->probability);
|
if (ti) P_DropItem (actor, ti, di->amount, di->probability);
|
||||||
}
|
}
|
||||||
di = di->Next;
|
di = di->Next;
|
||||||
|
@ -3618,7 +3618,7 @@ void FinishThingdef()
|
||||||
v = defaults->AmmoType1;
|
v = defaults->AmmoType1;
|
||||||
if (v != NAME_None && v.IsValidName())
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->AmmoType1 = TypeInfo::FindType(v.GetChars());
|
defaults->AmmoType1 = TypeInfo::IFindType(v.GetChars());
|
||||||
if (!defaults->AmmoType1)
|
if (!defaults->AmmoType1)
|
||||||
{
|
{
|
||||||
SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
||||||
|
@ -3632,7 +3632,7 @@ void FinishThingdef()
|
||||||
v = defaults->AmmoType2;
|
v = defaults->AmmoType2;
|
||||||
if (v != NAME_None && v.IsValidName())
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->AmmoType2 = TypeInfo::FindType(v.GetChars());
|
defaults->AmmoType2 = TypeInfo::IFindType(v.GetChars());
|
||||||
if (!defaults->AmmoType2)
|
if (!defaults->AmmoType2)
|
||||||
{
|
{
|
||||||
SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
SC_ScriptError("Unknown ammo type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
||||||
|
@ -3646,7 +3646,7 @@ void FinishThingdef()
|
||||||
v = defaults->SisterWeaponType;
|
v = defaults->SisterWeaponType;
|
||||||
if (v != NAME_None && v.IsValidName())
|
if (v != NAME_None && v.IsValidName())
|
||||||
{
|
{
|
||||||
defaults->SisterWeaponType = TypeInfo::FindType(v.GetChars());
|
defaults->SisterWeaponType = TypeInfo::IFindType(v.GetChars());
|
||||||
if (!defaults->SisterWeaponType)
|
if (!defaults->SisterWeaponType)
|
||||||
{
|
{
|
||||||
SC_ScriptError("Unknown sister weapon type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
SC_ScriptError("Unknown sister weapon type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
||||||
|
@ -3677,7 +3677,7 @@ void FinishThingdef()
|
||||||
v = defaults->WeaponClass;
|
v = defaults->WeaponClass;
|
||||||
if (v != NAME_None)
|
if (v != NAME_None)
|
||||||
{
|
{
|
||||||
defaults->WeaponClass = TypeInfo::FindType(v.GetChars());
|
defaults->WeaponClass = TypeInfo::IFindType(v.GetChars());
|
||||||
if (!defaults->WeaponClass)
|
if (!defaults->WeaponClass)
|
||||||
{
|
{
|
||||||
SC_ScriptError("Unknown weapon type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
SC_ScriptError("Unknown weapon type '%s' in '%s'\n", v.GetChars(), ti->Name+1);
|
||||||
|
@ -3695,6 +3695,6 @@ void FinishThingdef()
|
||||||
{
|
{
|
||||||
char fmt[20];
|
char fmt[20];
|
||||||
sprintf(fmt, "QuestItem%d", i+1);
|
sprintf(fmt, "QuestItem%d", i+1);
|
||||||
QuestItemClasses[i]=TypeInfo::FindType(fmt);
|
QuestItemClasses[i]=TypeInfo::IFindType(fmt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue