mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2025-02-18 01:21:32 +00:00
Merge branch 'master' of https://github.com/rheit/zdoom
This commit is contained in:
commit
4e64ad847b
52 changed files with 493 additions and 324 deletions
|
@ -37,7 +37,7 @@ In addition to the base specification ZDoom recognizes the following lumps
|
||||||
between the TEXTMAP and ENDMAP lumps:
|
between the TEXTMAP and ENDMAP lumps:
|
||||||
|
|
||||||
BEHAVIOR = contains compiled ACS code
|
BEHAVIOR = contains compiled ACS code
|
||||||
DIALOGUE = contains compiled Strife conversation scripts.
|
DIALOGUE = contains compiled Strife or USDF conversation scripts.
|
||||||
ZNODES = Nodes (must be stored as extended GL nodes. Compression is allowed
|
ZNODES = Nodes (must be stored as extended GL nodes. Compression is allowed
|
||||||
but deprecated for portability reasons.)
|
but deprecated for portability reasons.)
|
||||||
BLOCKMAP = blockmap. It is recommended not to include this lump in UDMF maps.
|
BLOCKMAP = blockmap. It is recommended not to include this lump in UDMF maps.
|
||||||
|
@ -166,6 +166,14 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
yscaleceiling = <float>; // Y texture scale of ceiling texture, Default = 1.0.
|
yscaleceiling = <float>; // Y texture scale of ceiling texture, Default = 1.0.
|
||||||
rotationfloor = <float>; // Rotation of floor texture in degrees, Default = 0.0.
|
rotationfloor = <float>; // Rotation of floor texture in degrees, Default = 0.0.
|
||||||
rotationceiling = <float>; // Rotation of ceiling texture in degrees, Default = 0.0.
|
rotationceiling = <float>; // Rotation of ceiling texture in degrees, Default = 0.0.
|
||||||
|
ceilingplane_a = <float>; // Define the plane equation for the sector's ceiling. Default is a horizontal plane at 'heightceiling'.
|
||||||
|
ceilingplane_b = <float>; // 'heightceiling' will still be used to calculate texture alignment.
|
||||||
|
ceilingplane_c = <float>; // The plane equation will only be used if all 4 values are given.
|
||||||
|
ceilingplane_d = <float>;
|
||||||
|
floorplane_a = <float>; // Define the plane equation for the sector's floor. Default is a horizontal plane at 'heightfloor'.
|
||||||
|
floorplane_b = <float>; // 'heightfloor' will still be used to calculate texture alignment.
|
||||||
|
floorplane_c = <float>; // The plane equation will only be used if all 4 values are given.
|
||||||
|
floorplane_d = <float>;
|
||||||
lightfloor = <integer>; // The floor's light level. Default is 0.
|
lightfloor = <integer>; // The floor's light level. Default is 0.
|
||||||
lightceiling = <integer>; // The ceiling's light level. Default is 0.
|
lightceiling = <integer>; // The ceiling's light level. Default is 0.
|
||||||
lightfloorabsolute = <bool>; // true = 'lightfloor' is an absolute value. Default is
|
lightfloorabsolute = <bool>; // true = 'lightfloor' is an absolute value. Default is
|
||||||
|
@ -355,6 +363,10 @@ Added waterzone sector property.
|
||||||
1.22 12.04.2014
|
1.22 12.04.2014
|
||||||
Added transparent line property (to be folded back to core UDMF standard), and health, score, renderstyle, fillcolor, alpha, scale, scalex, scaley, pitch and roll thing properties.
|
Added transparent line property (to be folded back to core UDMF standard), and health, score, renderstyle, fillcolor, alpha, scale, scalex, scaley, pitch and roll thing properties.
|
||||||
|
|
||||||
|
1.24 14.05.2014
|
||||||
|
Added plane equations for sector slopes. (Please read carefully to ensure proper use!)
|
||||||
|
Changed language describing the DIALOGUE lump to mention USDF as an option.
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EOF
|
EOF
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
|
@ -986,14 +986,10 @@ CCMD(nextmap)
|
||||||
TEXTCOLOR_NORMAL " is for single-player only.\n");
|
TEXTCOLOR_NORMAL " is for single-player only.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char *next = NULL;
|
|
||||||
|
|
||||||
if (*level.nextmap)
|
if (level.NextMap.Len() > 0 && level.NextMap.Compare("enDSeQ", 6))
|
||||||
next = level.nextmap;
|
|
||||||
|
|
||||||
if (next != NULL && strncmp(next, "enDSeQ", 6))
|
|
||||||
{
|
{
|
||||||
G_DeferedInitNew(next);
|
G_DeferedInitNew(level.NextMap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1016,12 +1012,9 @@ CCMD(nextsecret)
|
||||||
}
|
}
|
||||||
char *next = NULL;
|
char *next = NULL;
|
||||||
|
|
||||||
if (*level.secretmap)
|
if (level.NextSecretMap.Len() > 0 && level.NextSecretMap.Compare("enDSeQ", 6))
|
||||||
next = level.secretmap;
|
|
||||||
|
|
||||||
if (next != NULL && strncmp(next, "enDSeQ", 6))
|
|
||||||
{
|
{
|
||||||
G_DeferedInitNew(next);
|
G_DeferedInitNew(level.NextSecretMap);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1107,8 +1100,8 @@ static void PrintSecretString(const char *string, bool thislevel)
|
||||||
|
|
||||||
CCMD(secret)
|
CCMD(secret)
|
||||||
{
|
{
|
||||||
const char *mapname = argv.argc() < 2? level.mapname : argv[1];
|
const char *mapname = argv.argc() < 2? level.MapName.GetChars() : argv[1];
|
||||||
bool thislevel = !stricmp(mapname, level.mapname);
|
bool thislevel = !stricmp(mapname, level.MapName);
|
||||||
bool foundsome = false;
|
bool foundsome = false;
|
||||||
|
|
||||||
int lumpno=Wads.CheckNumForName("SECRETS");
|
int lumpno=Wads.CheckNumForName("SECRETS");
|
||||||
|
|
|
@ -303,7 +303,7 @@ void C_InitConback()
|
||||||
|
|
||||||
if (!conback.isValid())
|
if (!conback.isValid())
|
||||||
{
|
{
|
||||||
conback = TexMan.GetTexture (gameinfo.titlePage, FTexture::TEX_MiscPatch);
|
conback = TexMan.GetTexture (gameinfo.TitlePage, FTexture::TEX_MiscPatch);
|
||||||
conshade = MAKEARGB(175,0,0,0);
|
conshade = MAKEARGB(175,0,0,0);
|
||||||
conline = true;
|
conline = true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1234,7 +1234,7 @@ void D_DoAdvanceDemo (void)
|
||||||
static char demoname[8] = "DEMO1";
|
static char demoname[8] = "DEMO1";
|
||||||
static int democount = 0;
|
static int democount = 0;
|
||||||
static int pagecount;
|
static int pagecount;
|
||||||
const char *pagename = NULL;
|
FString pagename;
|
||||||
|
|
||||||
advancedemo = false;
|
advancedemo = false;
|
||||||
|
|
||||||
|
@ -1299,7 +1299,7 @@ void D_DoAdvanceDemo (void)
|
||||||
default:
|
default:
|
||||||
case 0:
|
case 0:
|
||||||
gamestate = GS_DEMOSCREEN;
|
gamestate = GS_DEMOSCREEN;
|
||||||
pagename = gameinfo.titlePage;
|
pagename = gameinfo.TitlePage;
|
||||||
pagetic = (int)(gameinfo.titleTime * TICRATE);
|
pagetic = (int)(gameinfo.titleTime * TICRATE);
|
||||||
S_ChangeMusic (gameinfo.titleMusic, gameinfo.titleOrder, false);
|
S_ChangeMusic (gameinfo.titleMusic, gameinfo.titleOrder, false);
|
||||||
demosequence = 3;
|
demosequence = 3;
|
||||||
|
|
|
@ -2573,7 +2573,7 @@ static void RunScript(BYTE **stream, APlayerPawn *pawn, int snum, int argn, int
|
||||||
arg[i] = argval;
|
arg[i] = argval;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
P_StartScript(pawn, NULL, snum, level.mapname, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
P_StartScript(pawn, NULL, snum, level.MapName, arg, MIN<int>(countof(arg), argn), ACS_NET | always);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Net_SkipCommand (int type, BYTE **stream)
|
void Net_SkipCommand (int type, BYTE **stream)
|
||||||
|
|
|
@ -202,15 +202,13 @@ void FScriptLoader::ParseInfoCmd(char *line, FString &scriptsrc)
|
||||||
{
|
{
|
||||||
sc.MustGetStringName("=");
|
sc.MustGetStringName("=");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
strncpy(level.nextmap, sc.String, 8);
|
level.NextMap = sc.String;
|
||||||
level.nextmap[8]=0;
|
|
||||||
}
|
}
|
||||||
else if (sc.Compare("nextsecret"))
|
else if (sc.Compare("nextsecret"))
|
||||||
{
|
{
|
||||||
sc.MustGetStringName("=");
|
sc.MustGetStringName("=");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
strncpy(level.secretmap, sc.String, 8);
|
level.NextSecretMap = sc.String;
|
||||||
level.secretmap[8]=0;
|
|
||||||
}
|
}
|
||||||
else if (sc.Compare("drown"))
|
else if (sc.Compare("drown"))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1621,7 +1621,7 @@ void G_DoReborn (int playernum, bool freshbot)
|
||||||
{ // Reload the level from scratch
|
{ // Reload the level from scratch
|
||||||
bool indemo = demoplayback;
|
bool indemo = demoplayback;
|
||||||
BackupSaveName = "";
|
BackupSaveName = "";
|
||||||
G_InitNew (level.mapname, false);
|
G_InitNew (level.MapName, false);
|
||||||
demoplayback = indemo;
|
demoplayback = indemo;
|
||||||
// gameaction = ga_loadlevel;
|
// gameaction = ga_loadlevel;
|
||||||
}
|
}
|
||||||
|
@ -2027,7 +2027,7 @@ static void PutSaveComment (FILE *file)
|
||||||
|
|
||||||
// Get level name
|
// Get level name
|
||||||
//strcpy (comment, level.level_name);
|
//strcpy (comment, level.level_name);
|
||||||
mysnprintf(comment, countof(comment), "%s - %s", level.mapname, level.LevelName.GetChars());
|
mysnprintf(comment, countof(comment), "%s - %s", level.MapName.GetChars(), level.LevelName.GetChars());
|
||||||
len = (WORD)strlen (comment);
|
len = (WORD)strlen (comment);
|
||||||
comment[len] = '\n';
|
comment[len] = '\n';
|
||||||
|
|
||||||
|
@ -2088,7 +2088,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio
|
||||||
M_AppendPNGText (stdfile, "Engine", GAMESIG);
|
M_AppendPNGText (stdfile, "Engine", GAMESIG);
|
||||||
M_AppendPNGText (stdfile, "ZDoom Save Version", SAVESIG);
|
M_AppendPNGText (stdfile, "ZDoom Save Version", SAVESIG);
|
||||||
M_AppendPNGText (stdfile, "Title", description);
|
M_AppendPNGText (stdfile, "Title", description);
|
||||||
M_AppendPNGText (stdfile, "Current Map", level.mapname);
|
M_AppendPNGText (stdfile, "Current Map", level.MapName);
|
||||||
PutSaveWads (stdfile);
|
PutSaveWads (stdfile);
|
||||||
PutSaveComment (stdfile);
|
PutSaveComment (stdfile);
|
||||||
|
|
||||||
|
@ -2289,7 +2289,7 @@ void G_BeginRecording (const char *startmap)
|
||||||
|
|
||||||
if (startmap == NULL)
|
if (startmap == NULL)
|
||||||
{
|
{
|
||||||
startmap = level.mapname;
|
startmap = level.MapName;
|
||||||
}
|
}
|
||||||
demo_p = demobuffer;
|
demo_p = demobuffer;
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ void AHeresiarch::Die (AActor *source, AActor *inflictor, int dmgflags)
|
||||||
|
|
||||||
if (script != 0)
|
if (script != 0)
|
||||||
{
|
{
|
||||||
P_StartScript (this, NULL, script, level.mapname, NULL, 0, 0);
|
P_StartScript (this, NULL, script, level.MapName, NULL, 0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -445,10 +445,7 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
||||||
bglobal.Init ();
|
bglobal.Init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mapname != level.mapname)
|
level.MapName = mapname;
|
||||||
{
|
|
||||||
strcpy (level.mapname, mapname);
|
|
||||||
}
|
|
||||||
if (bTitleLevel)
|
if (bTitleLevel)
|
||||||
{
|
{
|
||||||
gamestate = GS_TITLELEVEL;
|
gamestate = GS_TITLELEVEL;
|
||||||
|
@ -491,9 +488,9 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
||||||
{
|
{
|
||||||
// end the game
|
// end the game
|
||||||
levelname = NULL;
|
levelname = NULL;
|
||||||
if (!strncmp(level.nextmap, "enDSeQ",6))
|
if (!level.NextMap.Compare("enDSeQ",6))
|
||||||
{
|
{
|
||||||
levelname = level.nextmap; // If there is already an end sequence please leave it alone!
|
nextlevel = level.NextMap; // If there is already an end sequence please leave it alone!
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -509,12 +506,14 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
||||||
if (nextredir != NULL)
|
if (nextredir != NULL)
|
||||||
{
|
{
|
||||||
nextinfo = nextredir;
|
nextinfo = nextredir;
|
||||||
levelname = nextinfo->mapname;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
nextlevel = nextinfo->MapName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nextlevel = levelname;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (levelname != NULL) nextlevel = levelname;
|
|
||||||
|
|
||||||
if (nextSkill != -1)
|
if (nextSkill != -1)
|
||||||
NextSkill = nextSkill;
|
NextSkill = nextSkill;
|
||||||
|
@ -596,18 +595,18 @@ void G_ChangeLevel(const char *levelname, int position, int flags, int nextSkill
|
||||||
|
|
||||||
const char *G_GetExitMap()
|
const char *G_GetExitMap()
|
||||||
{
|
{
|
||||||
return level.nextmap;
|
return level.NextMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *G_GetSecretExitMap()
|
const char *G_GetSecretExitMap()
|
||||||
{
|
{
|
||||||
const char *nextmap = level.nextmap;
|
const char *nextmap = level.NextMap;
|
||||||
|
|
||||||
if (level.secretmap[0] != 0)
|
if (level.NextSecretMap.Len() > 0)
|
||||||
{
|
{
|
||||||
if (P_CheckMapData(level.secretmap))
|
if (P_CheckMapData(level.NextSecretMap))
|
||||||
{
|
{
|
||||||
nextmap = level.secretmap;
|
nextmap = level.NextSecretMap;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nextmap;
|
return nextmap;
|
||||||
|
@ -641,7 +640,7 @@ void G_DoCompleted (void)
|
||||||
|
|
||||||
if (gamestate == GS_TITLELEVEL)
|
if (gamestate == GS_TITLELEVEL)
|
||||||
{
|
{
|
||||||
strncpy (level.mapname, nextlevel, 255);
|
level.MapName = nextlevel;
|
||||||
G_DoLoadLevel (startpos, false);
|
G_DoLoadLevel (startpos, false);
|
||||||
startpos = 0;
|
startpos = 0;
|
||||||
viewactive = true;
|
viewactive = true;
|
||||||
|
@ -650,20 +649,20 @@ void G_DoCompleted (void)
|
||||||
|
|
||||||
// [RH] Mark this level as having been visited
|
// [RH] Mark this level as having been visited
|
||||||
if (!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
if (!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
||||||
FindLevelInfo (level.mapname)->flags |= LEVEL_VISITED;
|
FindLevelInfo (level.MapName)->flags |= LEVEL_VISITED;
|
||||||
|
|
||||||
if (automapactive)
|
if (automapactive)
|
||||||
AM_Stop ();
|
AM_Stop ();
|
||||||
|
|
||||||
wminfo.finished_ep = level.cluster - 1;
|
wminfo.finished_ep = level.cluster - 1;
|
||||||
wminfo.LName0 = TexMan[TexMan.CheckForTexture(level.info->pname, FTexture::TEX_MiscPatch)];
|
wminfo.LName0 = TexMan[TexMan.CheckForTexture(level.info->PName, FTexture::TEX_MiscPatch)];
|
||||||
wminfo.current = level.mapname;
|
wminfo.current = level.MapName;
|
||||||
|
|
||||||
if (deathmatch &&
|
if (deathmatch &&
|
||||||
(dmflags & DF_SAME_LEVEL) &&
|
(dmflags & DF_SAME_LEVEL) &&
|
||||||
!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
!(level.flags & LEVEL_CHANGEMAPCHEAT))
|
||||||
{
|
{
|
||||||
wminfo.next = level.mapname;
|
wminfo.next = level.MapName;
|
||||||
wminfo.LName1 = wminfo.LName0;
|
wminfo.LName1 = wminfo.LName0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -676,8 +675,8 @@ void G_DoCompleted (void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wminfo.next = nextinfo->mapname;
|
wminfo.next = nextinfo->MapName;
|
||||||
wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->pname, FTexture::TEX_MiscPatch)];
|
wminfo.LName1 = TexMan[TexMan.CheckForTexture(nextinfo->PName, FTexture::TEX_MiscPatch)];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -850,7 +849,7 @@ void G_DoLoadLevel (int position, bool autosave)
|
||||||
"\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36"
|
"\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36"
|
||||||
"\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n"
|
"\36\36\36\36\36\36\36\36\36\36\36\36\37\n\n"
|
||||||
TEXTCOLOR_BOLD "%s - %s\n\n",
|
TEXTCOLOR_BOLD "%s - %s\n\n",
|
||||||
level.mapname, level.LevelName.GetChars());
|
level.MapName.GetChars(), level.LevelName.GetChars());
|
||||||
|
|
||||||
if (wipegamestate == GS_LEVEL)
|
if (wipegamestate == GS_LEVEL)
|
||||||
wipegamestate = GS_FORCEWIPE;
|
wipegamestate = GS_FORCEWIPE;
|
||||||
|
@ -899,7 +898,7 @@ void G_DoLoadLevel (int position, bool autosave)
|
||||||
}
|
}
|
||||||
|
|
||||||
level.maptime = 0;
|
level.maptime = 0;
|
||||||
P_SetupLevel (level.mapname, position);
|
P_SetupLevel (level.MapName, position);
|
||||||
|
|
||||||
AM_LevelInit();
|
AM_LevelInit();
|
||||||
|
|
||||||
|
@ -1056,7 +1055,7 @@ void G_DoWorldDone (void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
strncpy (level.mapname, nextlevel, 255);
|
level.MapName = nextlevel;
|
||||||
}
|
}
|
||||||
G_StartTravel ();
|
G_StartTravel ();
|
||||||
G_DoLoadLevel (startpos, true);
|
G_DoLoadLevel (startpos, true);
|
||||||
|
@ -1217,7 +1216,7 @@ void G_InitLevelLocals ()
|
||||||
level.flags = 0;
|
level.flags = 0;
|
||||||
level.flags2 = 0;
|
level.flags2 = 0;
|
||||||
|
|
||||||
info = FindLevelInfo (level.mapname);
|
info = FindLevelInfo (level.MapName);
|
||||||
|
|
||||||
level.info = info;
|
level.info = info;
|
||||||
level.skyspeed1 = info->skyspeed1;
|
level.skyspeed1 = info->skyspeed1;
|
||||||
|
@ -1274,10 +1273,8 @@ void G_InitLevelLocals ()
|
||||||
level.musicorder = info->musicorder;
|
level.musicorder = info->musicorder;
|
||||||
|
|
||||||
level.LevelName = level.info->LookupLevelName();
|
level.LevelName = level.info->LookupLevelName();
|
||||||
strncpy (level.nextmap, info->nextmap, 10);
|
level.NextMap = info->NextMap;
|
||||||
level.nextmap[10] = 0;
|
level.NextSecretMap = info->NextSecretMap;
|
||||||
strncpy (level.secretmap, info->secretmap, 10);
|
|
||||||
level.secretmap[10] = 0;
|
|
||||||
|
|
||||||
compatflags.Callback();
|
compatflags.Callback();
|
||||||
compatflags2.Callback();
|
compatflags2.Callback();
|
||||||
|
@ -1621,7 +1618,7 @@ static void writeMapName (FArchive &arc, const char *name)
|
||||||
static void writeSnapShot (FArchive &arc, level_info_t *i)
|
static void writeSnapShot (FArchive &arc, level_info_t *i)
|
||||||
{
|
{
|
||||||
arc << i->snapshotVer;
|
arc << i->snapshotVer;
|
||||||
writeMapName (arc, i->mapname);
|
writeMapName (arc, i->MapName);
|
||||||
i->snapshot->Serialize (arc);
|
i->snapshot->Serialize (arc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1659,7 +1656,7 @@ void G_WriteSnapshots (FILE *file)
|
||||||
{
|
{
|
||||||
arc = new FPNGChunkArchive (file, VIST_ID);
|
arc = new FPNGChunkArchive (file, VIST_ID);
|
||||||
}
|
}
|
||||||
writeMapName (*arc, wadlevelinfos[i].mapname);
|
writeMapName (*arc, wadlevelinfos[i].MapName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1798,7 +1795,7 @@ CCMD(listsnapshots)
|
||||||
{
|
{
|
||||||
unsigned int comp, uncomp;
|
unsigned int comp, uncomp;
|
||||||
snapshot->GetSizes(comp, uncomp);
|
snapshot->GetSizes(comp, uncomp);
|
||||||
Printf("%s (%u -> %u bytes)\n", wadlevelinfos[i].mapname, comp, uncomp);
|
Printf("%s (%u -> %u bytes)\n", wadlevelinfos[i].MapName.GetChars(), comp, uncomp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1810,7 +1807,7 @@ CCMD(listsnapshots)
|
||||||
|
|
||||||
static void writeDefereds (FArchive &arc, level_info_t *i)
|
static void writeDefereds (FArchive &arc, level_info_t *i)
|
||||||
{
|
{
|
||||||
writeMapName (arc, i->mapname);
|
writeMapName (arc, i->MapName);
|
||||||
arc << i->defered;
|
arc << i->defered;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1922,11 +1919,11 @@ CCMD(listmaps)
|
||||||
for(unsigned i = 0; i < wadlevelinfos.Size(); i++)
|
for(unsigned i = 0; i < wadlevelinfos.Size(); i++)
|
||||||
{
|
{
|
||||||
level_info_t *info = &wadlevelinfos[i];
|
level_info_t *info = &wadlevelinfos[i];
|
||||||
MapData *map = P_OpenMapData(info->mapname, true);
|
MapData *map = P_OpenMapData(info->MapName, true);
|
||||||
|
|
||||||
if (map != NULL)
|
if (map != NULL)
|
||||||
{
|
{
|
||||||
Printf("%s: '%s' (%s)\n", info->mapname, info->LookupLevelName().GetChars(),
|
Printf("%s: '%s' (%s)\n", info->MapName.GetChars(), info->LookupLevelName().GetChars(),
|
||||||
Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)));
|
Wads.GetWadName(Wads.GetLumpFile(map->lumpnum)));
|
||||||
delete map;
|
delete map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -83,7 +83,7 @@ struct FMapInfoParser
|
||||||
void ParseLumpOrTextureName(FString &name);
|
void ParseLumpOrTextureName(FString &name);
|
||||||
|
|
||||||
void ParseCluster();
|
void ParseCluster();
|
||||||
void ParseNextMap(char *mapname);
|
void ParseNextMap(FString &mapname);
|
||||||
level_info_t *ParseMapHeader(level_info_t &defaultinfo);
|
level_info_t *ParseMapHeader(level_info_t &defaultinfo);
|
||||||
void ParseMapDefinition(level_info_t &leveldef);
|
void ParseMapDefinition(level_info_t &leveldef);
|
||||||
void ParseGameInfo();
|
void ParseGameInfo();
|
||||||
|
@ -269,10 +269,10 @@ struct level_info_t
|
||||||
{
|
{
|
||||||
int levelnum;
|
int levelnum;
|
||||||
|
|
||||||
char mapname[9];
|
FString MapName;
|
||||||
char pname[9];
|
FString NextMap;
|
||||||
char nextmap[11];
|
FString NextSecretMap;
|
||||||
char secretmap[11];
|
FString PName;
|
||||||
FString SkyPic1;
|
FString SkyPic1;
|
||||||
FString SkyPic2;
|
FString SkyPic2;
|
||||||
FString FadeTable;
|
FString FadeTable;
|
||||||
|
@ -313,7 +313,7 @@ struct level_info_t
|
||||||
// Redirection: If any player is carrying the specified item, then
|
// Redirection: If any player is carrying the specified item, then
|
||||||
// you go to the RedirectMap instead of this one.
|
// you go to the RedirectMap instead of this one.
|
||||||
FName RedirectType;
|
FName RedirectType;
|
||||||
char RedirectMap[9];
|
FString RedirectMapName;
|
||||||
|
|
||||||
FString EnterPic;
|
FString EnterPic;
|
||||||
FString ExitPic;
|
FString ExitPic;
|
||||||
|
@ -391,9 +391,9 @@ struct FLevelLocals
|
||||||
int levelnum;
|
int levelnum;
|
||||||
int lumpnum;
|
int lumpnum;
|
||||||
FString LevelName;
|
FString LevelName;
|
||||||
char mapname[256]; // the lump name (E1M1, MAP01, etc)
|
FString MapName; // the lump name (E1M1, MAP01, etc)
|
||||||
char nextmap[11]; // go here when using the regular exit
|
FString NextMap; // go here when using the regular exit
|
||||||
char secretmap[11]; // map to go to when used secret exit
|
FString NextSecretMap; // map to go to when used secret exit
|
||||||
EMapType maptype;
|
EMapType maptype;
|
||||||
|
|
||||||
DWORD flags;
|
DWORD flags;
|
||||||
|
|
|
@ -71,9 +71,10 @@ extern TMap<int, FString> HexenMusic;
|
||||||
static int FindWadLevelInfo (const char *name)
|
static int FindWadLevelInfo (const char *name)
|
||||||
{
|
{
|
||||||
for (unsigned int i = 0; i < wadlevelinfos.Size(); i++)
|
for (unsigned int i = 0; i < wadlevelinfos.Size(); i++)
|
||||||
if (!strnicmp (name, wadlevelinfos[i].mapname, 8))
|
{
|
||||||
|
if (!wadlevelinfos[i].MapName.CompareNoCase(name))
|
||||||
return i;
|
return i;
|
||||||
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +145,7 @@ bool CheckWarpTransMap (FString &mapname, bool substitute)
|
||||||
level_info_t *lev = FindLevelByWarpTrans (atoi (&mapname[4]));
|
level_info_t *lev = FindLevelByWarpTrans (atoi (&mapname[4]));
|
||||||
if (lev != NULL)
|
if (lev != NULL)
|
||||||
{
|
{
|
||||||
mapname = lev->mapname;
|
mapname = lev->MapName;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (substitute)
|
else if (substitute)
|
||||||
|
@ -224,12 +225,12 @@ void P_RemoveDefereds (void)
|
||||||
|
|
||||||
void level_info_t::Reset()
|
void level_info_t::Reset()
|
||||||
{
|
{
|
||||||
mapname[0] = 0;
|
MapName = "";
|
||||||
MapBackground = "";
|
MapBackground = "";
|
||||||
levelnum = 0;
|
levelnum = 0;
|
||||||
pname[0] = 0;
|
PName = "";
|
||||||
nextmap[0] = 0;
|
NextMap = "";
|
||||||
secretmap[0] = 0;
|
NextSecretMap = "";
|
||||||
SkyPic1 = SkyPic2 = "-NOFLAT-";
|
SkyPic1 = SkyPic2 = "-NOFLAT-";
|
||||||
cluster = 0;
|
cluster = 0;
|
||||||
partime = 0;
|
partime = 0;
|
||||||
|
@ -262,7 +263,7 @@ void level_info_t::Reset()
|
||||||
compatmask = compatmask2 = 0;
|
compatmask = compatmask2 = 0;
|
||||||
Translator = "";
|
Translator = "";
|
||||||
RedirectType = 0;
|
RedirectType = 0;
|
||||||
RedirectMap[0] = 0;
|
RedirectMapName = "";
|
||||||
EnterPic = "";
|
EnterPic = "";
|
||||||
ExitPic = "";
|
ExitPic = "";
|
||||||
InterMusic = "";
|
InterMusic = "";
|
||||||
|
@ -299,17 +300,17 @@ FString level_info_t::LookupLevelName()
|
||||||
char checkstring[32];
|
char checkstring[32];
|
||||||
|
|
||||||
// Strip out the header from the localized string
|
// Strip out the header from the localized string
|
||||||
if (mapname[0] == 'E' && mapname[2] == 'M')
|
if (MapName.Len() > 3 && MapName[0] == 'E' && MapName[2] == 'M')
|
||||||
{
|
{
|
||||||
mysnprintf (checkstring, countof(checkstring), "%s: ", mapname);
|
mysnprintf (checkstring, countof(checkstring), "%s: ", MapName.GetChars());
|
||||||
}
|
}
|
||||||
else if (mapname[0] == 'M' && mapname[1] == 'A' && mapname[2] == 'P')
|
else if (MapName.Len() > 3 && MapName[0] == 'M' && MapName[1] == 'A' && MapName[2] == 'P')
|
||||||
{
|
{
|
||||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(mapname + 3));
|
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(&MapName[3]));
|
||||||
}
|
}
|
||||||
else if (mapname[0] == 'L' && mapname[1] == 'E' && mapname[2] == 'V' && mapname[3] == 'E' && mapname[4] == 'L')
|
else if (MapName.Len() > 5 && MapName[0] == 'L' && MapName[1] == 'E' && MapName[2] == 'V' && MapName[3] == 'E' && MapName[4] == 'L')
|
||||||
{
|
{
|
||||||
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(mapname + 5));
|
mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(&MapName[5]));
|
||||||
}
|
}
|
||||||
thename = strstr (lookedup, checkstring);
|
thename = strstr (lookedup, checkstring);
|
||||||
if (thename == NULL)
|
if (thename == NULL)
|
||||||
|
@ -372,9 +373,9 @@ level_info_t *level_info_t::CheckLevelRedirect ()
|
||||||
if (playeringame[i] && players[i].mo->FindInventory (type))
|
if (playeringame[i] && players[i].mo->FindInventory (type))
|
||||||
{
|
{
|
||||||
// check for actual presence of the map.
|
// check for actual presence of the map.
|
||||||
if (P_CheckMapData(RedirectMap))
|
if (P_CheckMapData(RedirectMapName))
|
||||||
{
|
{
|
||||||
return FindLevelInfo(RedirectMap);
|
return FindLevelInfo(RedirectMapName);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -391,7 +392,7 @@ level_info_t *level_info_t::CheckLevelRedirect ()
|
||||||
|
|
||||||
bool level_info_t::isValid()
|
bool level_info_t::isValid()
|
||||||
{
|
{
|
||||||
return mapname[0] != 0 || this == &TheDefaultLevelInfo;
|
return MapName.Len() != 0 || this == &TheDefaultLevelInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -764,29 +765,27 @@ void FMapInfoParser::ParseCluster()
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void FMapInfoParser::ParseNextMap(char *mapname)
|
void FMapInfoParser::ParseNextMap(FString &mapname)
|
||||||
{
|
{
|
||||||
if (sc.CheckNumber())
|
if (sc.CheckNumber())
|
||||||
{
|
{
|
||||||
if (HexenHack)
|
if (HexenHack)
|
||||||
{
|
{
|
||||||
mysnprintf (mapname, 9, "&wt@%02d", sc.Number);
|
mapname.Format("&wt@%02d", sc.Number);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mysnprintf (mapname, 9, "MAP%02d", sc.Number);
|
mapname.Format("MAP%02d", sc.Number);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*mapname = 0;
|
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
strncpy (mapname, sc.String, 8);
|
mapname = sc.String;
|
||||||
mapname[8] = 0;
|
|
||||||
FName seq = CheckEndSequence();
|
FName seq = CheckEndSequence();
|
||||||
if (seq != NAME_None)
|
if (seq != NAME_None)
|
||||||
{
|
{
|
||||||
mysnprintf(mapname, 11, "enDSeQ%04x", int(seq));
|
mapname.Format("enDSeQ%04x", int(seq));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -807,19 +806,19 @@ DEFINE_MAP_OPTION(levelnum, true)
|
||||||
DEFINE_MAP_OPTION(next, true)
|
DEFINE_MAP_OPTION(next, true)
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.ParseNextMap(info->nextmap);
|
parse.ParseNextMap(info->NextMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(secretnext, true)
|
DEFINE_MAP_OPTION(secretnext, true)
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.ParseNextMap(info->secretmap);
|
parse.ParseNextMap(info->NextSecretMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(secret, true) // Just an alias for secretnext, for Vavoom compatibility
|
DEFINE_MAP_OPTION(secret, true) // Just an alias for secretnext, for Vavoom compatibility
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.ParseNextMap(info->secretmap);
|
parse.ParseNextMap(info->NextSecretMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(cluster, true)
|
DEFINE_MAP_OPTION(cluster, true)
|
||||||
|
@ -898,7 +897,7 @@ DEFINE_MAP_OPTION(outsidefog, true)
|
||||||
DEFINE_MAP_OPTION(titlepatch, true)
|
DEFINE_MAP_OPTION(titlepatch, true)
|
||||||
{
|
{
|
||||||
parse.ParseAssign();
|
parse.ParseAssign();
|
||||||
parse.ParseLumpOrTextureName(info->pname);
|
parse.ParseLumpOrTextureName(info->PName);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(partime, true)
|
DEFINE_MAP_OPTION(partime, true)
|
||||||
|
@ -1072,7 +1071,7 @@ DEFINE_MAP_OPTION(redirect, true)
|
||||||
parse.sc.MustGetString();
|
parse.sc.MustGetString();
|
||||||
info->RedirectType = parse.sc.String;
|
info->RedirectType = parse.sc.String;
|
||||||
parse.ParseComma();
|
parse.ParseComma();
|
||||||
parse.ParseLumpOrTextureName(info->RedirectMap);
|
parse.ParseNextMap(info->RedirectMapName);
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_MAP_OPTION(sndseq, true)
|
DEFINE_MAP_OPTION(sndseq, true)
|
||||||
|
@ -1522,8 +1521,8 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uppercopy (levelinfo->mapname, mapname);
|
levelinfo->MapName = mapname;
|
||||||
levelinfo->mapname[8] = 0;
|
levelinfo->MapName.ToUpper();
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
if (sc.String[0] == '$')
|
if (sc.String[0] == '$')
|
||||||
{
|
{
|
||||||
|
@ -1543,7 +1542,7 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo)
|
||||||
|
|
||||||
// Set up levelnum now so that you can use Teleport_NewMap specials
|
// Set up levelnum now so that you can use Teleport_NewMap specials
|
||||||
// to teleport to maps with standard names without needing a levelnum.
|
// to teleport to maps with standard names without needing a levelnum.
|
||||||
levelinfo->levelnum = GetDefaultLevelNum(levelinfo->mapname);
|
levelinfo->levelnum = GetDefaultLevelNum(levelinfo->MapName);
|
||||||
|
|
||||||
// Does this map have a song defined via SNDINFO's $map command?
|
// Does this map have a song defined via SNDINFO's $map command?
|
||||||
// Set that as this map's default music if it does.
|
// Set that as this map's default music if it does.
|
||||||
|
|
|
@ -42,9 +42,9 @@ void ABasicArmor::Tick ()
|
||||||
AbsorbCount = 0;
|
AbsorbCount = 0;
|
||||||
if (!Icon.isValid())
|
if (!Icon.isValid())
|
||||||
{
|
{
|
||||||
const char *icon = gameinfo.ArmorIcon1;
|
FString icon = gameinfo.ArmorIcon1;
|
||||||
|
|
||||||
if (SavePercent >= gameinfo.Armor2Percent && gameinfo.ArmorIcon2[0] != 0)
|
if (SavePercent >= gameinfo.Armor2Percent && gameinfo.ArmorIcon2.Len() != 0)
|
||||||
icon = gameinfo.ArmorIcon2;
|
icon = gameinfo.ArmorIcon2;
|
||||||
|
|
||||||
if (icon[0] != 0)
|
if (icon[0] != 0)
|
||||||
|
|
|
@ -605,7 +605,13 @@ void APowerInvisibility::DoEffect ()
|
||||||
case (NAME_Stencil):
|
case (NAME_Stencil):
|
||||||
Owner->RenderStyle = STYLE_Stencil;
|
Owner->RenderStyle = STYLE_Stencil;
|
||||||
break;
|
break;
|
||||||
case (NAME_None):
|
case (NAME_AddStencil) :
|
||||||
|
Owner->RenderStyle = STYLE_AddStencil;
|
||||||
|
break;
|
||||||
|
case (NAME_TranslucentStencil) :
|
||||||
|
Owner->RenderStyle = STYLE_TranslucentStencil;
|
||||||
|
break;
|
||||||
|
case (NAME_None) :
|
||||||
case (NAME_Cumulative):
|
case (NAME_Cumulative):
|
||||||
case (NAME_Translucent):
|
case (NAME_Translucent):
|
||||||
Owner->RenderStyle = STYLE_Translucent;
|
Owner->RenderStyle = STYLE_Translucent;
|
||||||
|
@ -685,7 +691,13 @@ int APowerInvisibility::AlterWeaponSprite (visstyle_t *vis)
|
||||||
case (NAME_Stencil):
|
case (NAME_Stencil):
|
||||||
vis->RenderStyle = STYLE_Stencil;
|
vis->RenderStyle = STYLE_Stencil;
|
||||||
break;
|
break;
|
||||||
case (NAME_None):
|
case (NAME_TranslucentStencil) :
|
||||||
|
vis->RenderStyle = STYLE_TranslucentStencil;
|
||||||
|
break;
|
||||||
|
case (NAME_AddStencil) :
|
||||||
|
vis->RenderStyle = STYLE_AddStencil;
|
||||||
|
break;
|
||||||
|
case (NAME_None) :
|
||||||
case (NAME_Cumulative):
|
case (NAME_Cumulative):
|
||||||
case (NAME_Translucent):
|
case (NAME_Translucent):
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -82,10 +82,22 @@ void ASectorAction::Deactivate (AActor *source)
|
||||||
flags2 |= MF2_DORMANT; // Projectiles can trigger
|
flags2 |= MF2_DORMANT; // Projectiles can trigger
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ASectorAction::TriggerAction (AActor *triggerer, int activationType)
|
bool ASectorAction::TriggerAction(AActor *triggerer, int activationType)
|
||||||
|
{
|
||||||
|
if (DoTriggerAction(triggerer, activationType))
|
||||||
|
{
|
||||||
|
if (flags4 & MF4_STANDSTILL)
|
||||||
|
{
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASectorAction::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
if (tracer != NULL)
|
if (tracer != NULL)
|
||||||
return barrier_cast<ASectorAction *>(tracer)->TriggerAction (triggerer, activationType);
|
return barrier_cast<ASectorAction *>(tracer)->DoTriggerAction (triggerer, activationType);
|
||||||
else
|
else
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -93,7 +105,7 @@ bool ASectorAction::TriggerAction (AActor *triggerer, int activationType)
|
||||||
bool ASectorAction::CheckTrigger (AActor *triggerer) const
|
bool ASectorAction::CheckTrigger (AActor *triggerer) const
|
||||||
{
|
{
|
||||||
if (special &&
|
if (special &&
|
||||||
(triggerer->player ||
|
((triggerer->player && !(flags & MF_FRIENDLY)) ||
|
||||||
((flags & MF_AMBUSH) && (triggerer->flags2 & MF2_MCROSS)) ||
|
((flags & MF_AMBUSH) && (triggerer->flags2 & MF2_MCROSS)) ||
|
||||||
((flags2 & MF2_DORMANT) && (triggerer->flags2 & MF2_PCROSS))))
|
((flags2 & MF2_DORMANT) && (triggerer->flags2 & MF2_PCROSS))))
|
||||||
{
|
{
|
||||||
|
@ -110,16 +122,16 @@ class ASecActEnter : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActEnter, ASectorAction)
|
DECLARE_CLASS (ASecActEnter, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActEnter)
|
IMPLEMENT_CLASS (ASecActEnter)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActEnter::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActEnter::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_Enter) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_Enter) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when leaving sector --------------------------------------------
|
// Triggered when leaving sector --------------------------------------------
|
||||||
|
@ -128,16 +140,16 @@ class ASecActExit : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActExit, ASectorAction)
|
DECLARE_CLASS (ASecActExit, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActExit)
|
IMPLEMENT_CLASS (ASecActExit)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActExit::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActExit::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_Exit) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_Exit) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when hitting sector's floor ------------------------------------
|
// Triggered when hitting sector's floor ------------------------------------
|
||||||
|
@ -146,7 +158,7 @@ class ASecActHitFloor : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActHitFloor, ASectorAction)
|
DECLARE_CLASS (ASecActHitFloor, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Skull Tag uses 9999 for a special that is triggered whenever
|
// Skull Tag uses 9999 for a special that is triggered whenever
|
||||||
|
@ -154,10 +166,10 @@ public:
|
||||||
IMPLEMENT_CLASS (ASecActHitFloor)
|
IMPLEMENT_CLASS (ASecActHitFloor)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActHitFloor::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActHitFloor::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_HitFloor) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_HitFloor) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when hitting sector's ceiling ----------------------------------
|
// Triggered when hitting sector's ceiling ----------------------------------
|
||||||
|
@ -166,16 +178,16 @@ class ASecActHitCeil : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActHitCeil, ASectorAction)
|
DECLARE_CLASS (ASecActHitCeil, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActHitCeil)
|
IMPLEMENT_CLASS (ASecActHitCeil)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActHitCeil::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActHitCeil::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_HitCeiling) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_HitCeiling) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when using inside sector ---------------------------------------
|
// Triggered when using inside sector ---------------------------------------
|
||||||
|
@ -184,16 +196,16 @@ class ASecActUse : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActUse, ASectorAction)
|
DECLARE_CLASS (ASecActUse, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActUse)
|
IMPLEMENT_CLASS (ASecActUse)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActUse::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActUse::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_Use) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_Use) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when using a sector's wall -------------------------------------
|
// Triggered when using a sector's wall -------------------------------------
|
||||||
|
@ -202,16 +214,16 @@ class ASecActUseWall : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActUseWall, ASectorAction)
|
DECLARE_CLASS (ASecActUseWall, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActUseWall)
|
IMPLEMENT_CLASS (ASecActUseWall)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActUseWall::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActUseWall::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_UseWall) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_UseWall) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when eyes go below fake floor ----------------------------------
|
// Triggered when eyes go below fake floor ----------------------------------
|
||||||
|
@ -220,16 +232,16 @@ class ASecActEyesDive : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActEyesDive, ASectorAction)
|
DECLARE_CLASS (ASecActEyesDive, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActEyesDive)
|
IMPLEMENT_CLASS (ASecActEyesDive)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActEyesDive::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActEyesDive::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_EyesDive) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_EyesDive) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when eyes go above fake floor ----------------------------------
|
// Triggered when eyes go above fake floor ----------------------------------
|
||||||
|
@ -238,16 +250,16 @@ class ASecActEyesSurface : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActEyesSurface, ASectorAction)
|
DECLARE_CLASS (ASecActEyesSurface, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActEyesSurface)
|
IMPLEMENT_CLASS (ASecActEyesSurface)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActEyesSurface::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActEyesSurface::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_EyesSurface) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_EyesSurface) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when eyes go below fake floor ----------------------------------
|
// Triggered when eyes go below fake floor ----------------------------------
|
||||||
|
@ -256,16 +268,16 @@ class ASecActEyesBelowC : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActEyesBelowC, ASectorAction)
|
DECLARE_CLASS (ASecActEyesBelowC, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActEyesBelowC)
|
IMPLEMENT_CLASS (ASecActEyesBelowC)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActEyesBelowC::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActEyesBelowC::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_EyesBelowC) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_EyesBelowC) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when eyes go above fake floor ----------------------------------
|
// Triggered when eyes go above fake floor ----------------------------------
|
||||||
|
@ -274,16 +286,16 @@ class ASecActEyesAboveC : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActEyesAboveC, ASectorAction)
|
DECLARE_CLASS (ASecActEyesAboveC, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActEyesAboveC)
|
IMPLEMENT_CLASS (ASecActEyesAboveC)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActEyesAboveC::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActEyesAboveC::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_EyesAboveC) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_EyesAboveC) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Triggered when eyes go below fake floor ----------------------------------
|
// Triggered when eyes go below fake floor ----------------------------------
|
||||||
|
@ -292,14 +304,14 @@ class ASecActHitFakeFloor : public ASectorAction
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (ASecActHitFakeFloor, ASectorAction)
|
DECLARE_CLASS (ASecActHitFakeFloor, ASectorAction)
|
||||||
public:
|
public:
|
||||||
bool TriggerAction (AActor *triggerer, int activationType);
|
bool DoTriggerAction (AActor *triggerer, int activationType);
|
||||||
};
|
};
|
||||||
|
|
||||||
IMPLEMENT_CLASS (ASecActHitFakeFloor)
|
IMPLEMENT_CLASS (ASecActHitFakeFloor)
|
||||||
|
|
||||||
|
|
||||||
bool ASecActHitFakeFloor::TriggerAction (AActor *triggerer, int activationType)
|
bool ASecActHitFakeFloor::DoTriggerAction (AActor *triggerer, int activationType)
|
||||||
{
|
{
|
||||||
bool didit = (activationType & SECSPAC_HitFakeFloor) ? CheckTrigger (triggerer) : false;
|
bool didit = (activationType & SECSPAC_HitFakeFloor) ? CheckTrigger (triggerer) : false;
|
||||||
return didit | Super::TriggerAction (triggerer, activationType);
|
return didit | Super::DoTriggerAction (triggerer, activationType);
|
||||||
}
|
}
|
||||||
|
|
|
@ -300,7 +300,7 @@ class CommandDrawImage : public SBarInfoCommandFlowControl
|
||||||
|
|
||||||
if (flags & DI_ALTERNATEONFAIL)
|
if (flags & DI_ALTERNATEONFAIL)
|
||||||
{
|
{
|
||||||
SetTruth(texture == NULL || !(texture->GetID().isValid()), block, statusBar);
|
SetTruth(texture == NULL || texture->UseType == FTexture::TEX_Null, block, statusBar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
protected:
|
protected:
|
||||||
|
@ -830,7 +830,7 @@ class CommandDrawString : public SBarInfoCommand
|
||||||
if(level.lumpnum != cache)
|
if(level.lumpnum != cache)
|
||||||
{
|
{
|
||||||
cache = level.lumpnum;
|
cache = level.lumpnum;
|
||||||
str = level.mapname;
|
str = level.MapName;
|
||||||
str.ToUpper();
|
str.ToUpper();
|
||||||
RealignString();
|
RealignString();
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ void ST_FormatMapName(FString &mapname, const char *mapnamecolor)
|
||||||
|
|
||||||
if (am_showmaplabel == 1 || (am_showmaplabel == 2 && !ishub))
|
if (am_showmaplabel == 1 || (am_showmaplabel == 2 && !ishub))
|
||||||
{
|
{
|
||||||
mapname << level.mapname << ": ";
|
mapname << level.MapName << ": ";
|
||||||
}
|
}
|
||||||
mapname << mapnamecolor << level.LevelName;
|
mapname << mapnamecolor << level.LevelName;
|
||||||
}
|
}
|
||||||
|
@ -1090,12 +1090,12 @@ void DBaseStatusBar::RefreshBackground () const
|
||||||
|
|
||||||
if (setblocks >= 10)
|
if (setblocks >= 10)
|
||||||
{
|
{
|
||||||
const gameborder_t *border = gameinfo.border;
|
FTexture *p = TexMan[gameinfo.Border.b];
|
||||||
FTexture *p;
|
if (p != NULL)
|
||||||
|
{
|
||||||
p = TexMan[border->b];
|
screen->FlatFill(0, y, x, y + p->GetHeight(), p, true);
|
||||||
screen->FlatFill(0, y, x, y + p->GetHeight(), p, true);
|
screen->FlatFill(x2, y, SCREENWIDTH, y + p->GetHeight(), p, true);
|
||||||
screen->FlatFill(x2, y, SCREENWIDTH, y + p->GetHeight(), p, true);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
50
src/gi.cpp
50
src/gi.cpp
|
@ -51,7 +51,7 @@ const char *GameNames[17] =
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static gameborder_t DoomBorder =
|
static staticgameborder_t DoomBorder =
|
||||||
{
|
{
|
||||||
8, 8,
|
8, 8,
|
||||||
"brdr_tl", "brdr_t", "brdr_tr",
|
"brdr_tl", "brdr_t", "brdr_tr",
|
||||||
|
@ -59,7 +59,7 @@ static gameborder_t DoomBorder =
|
||||||
"brdr_bl", "brdr_b", "brdr_br"
|
"brdr_bl", "brdr_b", "brdr_br"
|
||||||
};
|
};
|
||||||
|
|
||||||
static gameborder_t HereticBorder =
|
static staticgameborder_t HereticBorder =
|
||||||
{
|
{
|
||||||
4, 16,
|
4, 16,
|
||||||
"bordtl", "bordt", "bordtr",
|
"bordtl", "bordt", "bordtr",
|
||||||
|
@ -67,7 +67,7 @@ static gameborder_t HereticBorder =
|
||||||
"bordbl", "bordb", "bordbr"
|
"bordbl", "bordb", "bordbr"
|
||||||
};
|
};
|
||||||
|
|
||||||
static gameborder_t StrifeBorder =
|
static staticgameborder_t StrifeBorder =
|
||||||
{
|
{
|
||||||
8, 8,
|
8, 8,
|
||||||
"brdr_tl", "brdr_t", "brdr_tr",
|
"brdr_tl", "brdr_t", "brdr_tr",
|
||||||
|
@ -231,56 +231,51 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
}
|
}
|
||||||
else if(nextKey.CompareNoCase("border") == 0)
|
else if(nextKey.CompareNoCase("border") == 0)
|
||||||
{
|
{
|
||||||
if(sc.CheckToken(TK_Identifier))
|
staticgameborder_t *b;
|
||||||
|
if (sc.CheckToken(TK_Identifier))
|
||||||
{
|
{
|
||||||
switch(sc.MustMatchString(GameInfoBorders))
|
switch(sc.MustMatchString(GameInfoBorders))
|
||||||
{
|
{
|
||||||
default:
|
default:
|
||||||
gameinfo.border = &DoomBorder;
|
b = &DoomBorder;
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
gameinfo.border = &HereticBorder;
|
b = &HereticBorder;
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
gameinfo.border = &StrifeBorder;
|
b = &StrifeBorder;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
gameinfo.Border = *b;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// border = {size, offset, tr, t, tl, r, l ,br, b, bl};
|
// border = {size, offset, tr, t, tl, r, l ,br, b, bl};
|
||||||
char *graphics[8] = {DoomBorder.tr, DoomBorder.t, DoomBorder.tl, DoomBorder.r, DoomBorder.l, DoomBorder.br, DoomBorder.b, DoomBorder.bl};
|
FString *graphics[8] = { &gameinfo.Border.tr, &gameinfo.Border.t, &gameinfo.Border.tl, &gameinfo.Border.r, &gameinfo.Border.l, &gameinfo.Border.br, &gameinfo.Border.b, &gameinfo.Border.bl };
|
||||||
sc.MustGetToken(TK_IntConst);
|
sc.MustGetToken(TK_IntConst);
|
||||||
DoomBorder.offset = sc.Number;
|
gameinfo.Border.offset = sc.Number;
|
||||||
sc.MustGetToken(',');
|
sc.MustGetToken(',');
|
||||||
sc.MustGetToken(TK_IntConst);
|
sc.MustGetToken(TK_IntConst);
|
||||||
DoomBorder.size = sc.Number;
|
gameinfo.Border.size = sc.Number;
|
||||||
for(int i = 0;i < 8;i++)
|
for(int i = 0;i < 8;i++)
|
||||||
{
|
{
|
||||||
sc.MustGetToken(',');
|
sc.MustGetToken(',');
|
||||||
sc.MustGetToken(TK_StringConst);
|
sc.MustGetToken(TK_StringConst);
|
||||||
int len = int(strlen(sc.String));
|
(*graphics[i]) = sc.String;
|
||||||
if(len > 8)
|
|
||||||
sc.ScriptError("Border graphic can not be more than 8 characters long.\n");
|
|
||||||
memcpy(graphics[i], sc.String, len);
|
|
||||||
if(len < 8) // end with a null byte if the string is less than 8 chars.
|
|
||||||
graphics[i][len] = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(nextKey.CompareNoCase("armoricons") == 0)
|
else if(nextKey.CompareNoCase("armoricons") == 0)
|
||||||
{
|
{
|
||||||
sc.MustGetToken(TK_StringConst);
|
sc.MustGetToken(TK_StringConst);
|
||||||
strncpy(gameinfo.ArmorIcon1, sc.String, 8);
|
gameinfo.ArmorIcon1 = sc.String;
|
||||||
gameinfo.ArmorIcon1[8] = 0;
|
|
||||||
if (sc.CheckToken(','))
|
if (sc.CheckToken(','))
|
||||||
{
|
{
|
||||||
sc.MustGetToken(TK_FloatConst);
|
sc.MustGetToken(TK_FloatConst);
|
||||||
gameinfo.Armor2Percent = FLOAT2FIXED(sc.Float);
|
gameinfo.Armor2Percent = FLOAT2FIXED(sc.Float);
|
||||||
sc.MustGetToken(',');
|
sc.MustGetToken(',');
|
||||||
sc.MustGetToken(TK_StringConst);
|
sc.MustGetToken(TK_StringConst);
|
||||||
strncpy(gameinfo.ArmorIcon2, sc.String, 8);
|
gameinfo.ArmorIcon2 = sc.String;
|
||||||
gameinfo.ArmorIcon2[8] = 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(nextKey.CompareNoCase("maparrow") == 0)
|
else if(nextKey.CompareNoCase("maparrow") == 0)
|
||||||
|
@ -295,7 +290,7 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
else gameinfo.mCheatMapArrow = "";
|
else gameinfo.mCheatMapArrow = "";
|
||||||
}
|
}
|
||||||
// Insert valid keys here.
|
// Insert valid keys here.
|
||||||
GAMEINFOKEY_CSTRING(titlePage, "titlePage", 8)
|
GAMEINFOKEY_STRING(TitlePage, "titlePage")
|
||||||
GAMEINFOKEY_STRINGARRAY(creditPages, "addcreditPage", 8, false)
|
GAMEINFOKEY_STRINGARRAY(creditPages, "addcreditPage", 8, false)
|
||||||
GAMEINFOKEY_STRINGARRAY(creditPages, "CreditPage", 8, true)
|
GAMEINFOKEY_STRINGARRAY(creditPages, "CreditPage", 8, true)
|
||||||
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "addplayerclasses", 0, false)
|
GAMEINFOKEY_STRINGARRAY(PlayerClasses, "addplayerclasses", 0, false)
|
||||||
|
@ -306,17 +301,17 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_FLOAT(pageTime, "pageTime")
|
GAMEINFOKEY_FLOAT(pageTime, "pageTime")
|
||||||
GAMEINFOKEY_STRING(chatSound, "chatSound")
|
GAMEINFOKEY_STRING(chatSound, "chatSound")
|
||||||
GAMEINFOKEY_MUSIC(finaleMusic, finaleOrder, "finaleMusic")
|
GAMEINFOKEY_MUSIC(finaleMusic, finaleOrder, "finaleMusic")
|
||||||
GAMEINFOKEY_CSTRING(finaleFlat, "finaleFlat", 8)
|
GAMEINFOKEY_STRING(FinaleFlat, "finaleFlat")
|
||||||
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
GAMEINFOKEY_STRINGARRAY(finalePages, "finalePage", 8, true)
|
||||||
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
GAMEINFOKEY_STRINGARRAY(infoPages, "addinfoPage", 8, false)
|
||||||
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
GAMEINFOKEY_STRINGARRAY(infoPages, "infoPage", 8, true)
|
||||||
GAMEINFOKEY_CSTRING(PauseSign, "pausesign", 8)
|
GAMEINFOKEY_STRING(PauseSign, "pausesign")
|
||||||
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
GAMEINFOKEY_STRING(quitSound, "quitSound")
|
||||||
GAMEINFOKEY_CSTRING(borderFlat, "borderFlat", 8)
|
GAMEINFOKEY_STRING(BorderFlat, "borderFlat")
|
||||||
GAMEINFOKEY_FIXED(telefogheight, "telefogheight")
|
GAMEINFOKEY_FIXED(telefogheight, "telefogheight")
|
||||||
GAMEINFOKEY_FIXED(gibfactor, "gibfactor")
|
GAMEINFOKEY_FIXED(gibfactor, "gibfactor")
|
||||||
GAMEINFOKEY_INT(defKickback, "defKickback")
|
GAMEINFOKEY_INT(defKickback, "defKickback")
|
||||||
GAMEINFOKEY_CSTRING(SkyFlatName, "SkyFlatName", 8)
|
GAMEINFOKEY_STRING(SkyFlatName, "SkyFlatName")
|
||||||
GAMEINFOKEY_STRING(translator, "translator")
|
GAMEINFOKEY_STRING(translator, "translator")
|
||||||
GAMEINFOKEY_COLOR(pickupcolor, "pickupcolor")
|
GAMEINFOKEY_COLOR(pickupcolor, "pickupcolor")
|
||||||
GAMEINFOKEY_COLOR(defaultbloodcolor, "defaultbloodcolor")
|
GAMEINFOKEY_COLOR(defaultbloodcolor, "defaultbloodcolor")
|
||||||
|
@ -328,6 +323,7 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_BOOL(noloopfinalemusic, "noloopfinalemusic")
|
GAMEINFOKEY_BOOL(noloopfinalemusic, "noloopfinalemusic")
|
||||||
GAMEINFOKEY_BOOL(drawreadthis, "drawreadthis")
|
GAMEINFOKEY_BOOL(drawreadthis, "drawreadthis")
|
||||||
GAMEINFOKEY_BOOL(swapmenu, "swapmenu")
|
GAMEINFOKEY_BOOL(swapmenu, "swapmenu")
|
||||||
|
GAMEINFOKEY_BOOL(dontcrunchcorpses, "dontcrunchcorpses")
|
||||||
GAMEINFOKEY_BOOL(intermissioncounter, "intermissioncounter")
|
GAMEINFOKEY_BOOL(intermissioncounter, "intermissioncounter")
|
||||||
GAMEINFOKEY_BOOL(nightmarefast, "nightmarefast")
|
GAMEINFOKEY_BOOL(nightmarefast, "nightmarefast")
|
||||||
GAMEINFOKEY_COLOR(dimcolor, "dimcolor")
|
GAMEINFOKEY_COLOR(dimcolor, "dimcolor")
|
||||||
|
@ -336,7 +332,7 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
||||||
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
GAMEINFOKEY_INT(defaultrespawntime, "defaultrespawntime")
|
||||||
GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle")
|
GAMEINFOKEY_INT(defaultdropstyle, "defaultdropstyle")
|
||||||
GAMEINFOKEY_CSTRING(Endoom, "endoom", 8)
|
GAMEINFOKEY_STRING(Endoom, "endoom")
|
||||||
GAMEINFOKEY_INT(player5start, "player5start")
|
GAMEINFOKEY_INT(player5start, "player5start")
|
||||||
GAMEINFOKEY_STRINGARRAY(quitmessages, "addquitmessages", 0, false)
|
GAMEINFOKEY_STRINGARRAY(quitmessages, "addquitmessages", 0, false)
|
||||||
GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0, true)
|
GAMEINFOKEY_STRINGARRAY(quitmessages, "quitmessages", 0, true)
|
||||||
|
@ -347,7 +343,7 @@ void FMapInfoParser::ParseGameInfo()
|
||||||
GAMEINFOKEY_STRING(mFontColorHeader, "menufontcolor_header")
|
GAMEINFOKEY_STRING(mFontColorHeader, "menufontcolor_header")
|
||||||
GAMEINFOKEY_STRING(mFontColorHighlight, "menufontcolor_highlight")
|
GAMEINFOKEY_STRING(mFontColorHighlight, "menufontcolor_highlight")
|
||||||
GAMEINFOKEY_STRING(mFontColorSelection, "menufontcolor_selection")
|
GAMEINFOKEY_STRING(mFontColorSelection, "menufontcolor_selection")
|
||||||
GAMEINFOKEY_CSTRING(mBackButton, "menubackbutton", 8)
|
GAMEINFOKEY_STRING(mBackButton, "menubackbutton")
|
||||||
GAMEINFOKEY_INT(TextScreenX, "textscreenx")
|
GAMEINFOKEY_INT(TextScreenX, "textscreenx")
|
||||||
GAMEINFOKEY_INT(TextScreenY, "textscreeny")
|
GAMEINFOKEY_INT(TextScreenY, "textscreeny")
|
||||||
GAMEINFOKEY_STRING(DefaultEndSequence, "defaultendsequence")
|
GAMEINFOKEY_STRING(DefaultEndSequence, "defaultendsequence")
|
||||||
|
|
52
src/gi.h
52
src/gi.h
|
@ -52,7 +52,7 @@
|
||||||
|
|
||||||
extern const char *GameNames[17];
|
extern const char *GameNames[17];
|
||||||
|
|
||||||
struct gameborder_t
|
struct staticgameborder_t
|
||||||
{
|
{
|
||||||
BYTE offset;
|
BYTE offset;
|
||||||
BYTE size;
|
BYTE size;
|
||||||
|
@ -66,6 +66,35 @@ struct gameborder_t
|
||||||
char br[8];
|
char br[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct gameborder_t
|
||||||
|
{
|
||||||
|
BYTE offset;
|
||||||
|
BYTE size;
|
||||||
|
FString tl;
|
||||||
|
FString t;
|
||||||
|
FString tr;
|
||||||
|
FString l;
|
||||||
|
FString r;
|
||||||
|
FString bl;
|
||||||
|
FString b;
|
||||||
|
FString br;
|
||||||
|
|
||||||
|
gameborder_t &operator=(staticgameborder_t &other)
|
||||||
|
{
|
||||||
|
offset = other.offset;
|
||||||
|
size = other.size;
|
||||||
|
tl = other.tl;
|
||||||
|
t = other.t;
|
||||||
|
tr = other.tr;
|
||||||
|
l = other.l;
|
||||||
|
r = other.r;
|
||||||
|
bl = other.bl;
|
||||||
|
b = other.b;
|
||||||
|
br = other.br;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
struct FGIFont
|
struct FGIFont
|
||||||
{
|
{
|
||||||
FName fontname;
|
FName fontname;
|
||||||
|
@ -78,12 +107,13 @@ struct gameinfo_t
|
||||||
EGameType gametype;
|
EGameType gametype;
|
||||||
FString ConfigName;
|
FString ConfigName;
|
||||||
|
|
||||||
char titlePage[9];
|
FString TitlePage;
|
||||||
bool drawreadthis;
|
bool drawreadthis;
|
||||||
bool noloopfinalemusic;
|
bool noloopfinalemusic;
|
||||||
bool intermissioncounter;
|
bool intermissioncounter;
|
||||||
bool nightmarefast;
|
bool nightmarefast;
|
||||||
bool swapmenu;
|
bool swapmenu;
|
||||||
|
bool dontcrunchcorpses;
|
||||||
TArray<FName> creditPages;
|
TArray<FName> creditPages;
|
||||||
TArray<FName> finalePages;
|
TArray<FName> finalePages;
|
||||||
TArray<FName> infoPages;
|
TArray<FName> infoPages;
|
||||||
|
@ -98,16 +128,16 @@ struct gameinfo_t
|
||||||
FString chatSound;
|
FString chatSound;
|
||||||
FString finaleMusic;
|
FString finaleMusic;
|
||||||
int finaleOrder;
|
int finaleOrder;
|
||||||
char finaleFlat[9];
|
FString FinaleFlat;
|
||||||
char borderFlat[9];
|
FString BorderFlat;
|
||||||
char SkyFlatName[9];
|
FString SkyFlatName;
|
||||||
char ArmorIcon1[9];
|
FString ArmorIcon1;
|
||||||
char ArmorIcon2[9];
|
FString ArmorIcon2;
|
||||||
char PauseSign[9];
|
FString PauseSign;
|
||||||
char Endoom[9];
|
FString Endoom;
|
||||||
fixed_t Armor2Percent;
|
fixed_t Armor2Percent;
|
||||||
FString quitSound;
|
FString quitSound;
|
||||||
gameborder_t *border;
|
gameborder_t Border;
|
||||||
int telefogheight;
|
int telefogheight;
|
||||||
int defKickback;
|
int defKickback;
|
||||||
FString translator;
|
FString translator;
|
||||||
|
@ -133,7 +163,7 @@ struct gameinfo_t
|
||||||
FName mFontColorHeader;
|
FName mFontColorHeader;
|
||||||
FName mFontColorHighlight;
|
FName mFontColorHighlight;
|
||||||
FName mFontColorSelection;
|
FName mFontColorSelection;
|
||||||
char mBackButton[9];
|
FString mBackButton;
|
||||||
fixed_t gibfactor;
|
fixed_t gibfactor;
|
||||||
int TextScreenX;
|
int TextScreenX;
|
||||||
int TextScreenY;
|
int TextScreenY;
|
||||||
|
|
|
@ -104,7 +104,7 @@ void DIntermissionScreen::Init(FIntermissionAction *desc, bool first)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
texname = gameinfo.titlePage;
|
texname = gameinfo.TitlePage.GetChars();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (*texname == '$')
|
else if (*texname == '$')
|
||||||
|
|
|
@ -30,6 +30,7 @@ xx(Cumulative)
|
||||||
xx(Fuzzy)
|
xx(Fuzzy)
|
||||||
xx(Opaque)
|
xx(Opaque)
|
||||||
xx(Stencil)
|
xx(Stencil)
|
||||||
|
xx(AddStencil)
|
||||||
|
|
||||||
// Render styles
|
// Render styles
|
||||||
xx(Normal)
|
xx(Normal)
|
||||||
|
@ -37,6 +38,7 @@ xx(SoulTrans)
|
||||||
xx(OptFuzzy)
|
xx(OptFuzzy)
|
||||||
xx(Add)
|
xx(Add)
|
||||||
xx(Shaded)
|
xx(Shaded)
|
||||||
|
xx(AddShaded)
|
||||||
xx(TranslucentStencil)
|
xx(TranslucentStencil)
|
||||||
xx(Shadow)
|
xx(Shadow)
|
||||||
xx(Subtract)
|
xx(Subtract)
|
||||||
|
@ -486,6 +488,15 @@ xx(blockhitscan)
|
||||||
|
|
||||||
xx(Renderstyle)
|
xx(Renderstyle)
|
||||||
|
|
||||||
|
xx(ceilingplane_a)
|
||||||
|
xx(ceilingplane_b)
|
||||||
|
xx(ceilingplane_c)
|
||||||
|
xx(ceilingplane_d)
|
||||||
|
xx(floorplane_a)
|
||||||
|
xx(floorplane_b)
|
||||||
|
xx(floorplane_c)
|
||||||
|
xx(floorplane_d)
|
||||||
|
|
||||||
// USDF keywords
|
// USDF keywords
|
||||||
xx(Amount)
|
xx(Amount)
|
||||||
xx(Text)
|
xx(Text)
|
||||||
|
|
|
@ -347,7 +347,7 @@ inline int FNodeBuilder::ClassifyLine (node_t &node, const FPrivVert *v1, const
|
||||||
#ifdef DISABLE_SSE
|
#ifdef DISABLE_SSE
|
||||||
return ClassifyLine2 (node, v1, v2, sidev);
|
return ClassifyLine2 (node, v1, v2, sidev);
|
||||||
#else
|
#else
|
||||||
#if defined(__SSE2__) || defined(_M_IX64)
|
#if defined(__SSE2__) || defined(_M_X64)
|
||||||
// If compiling with SSE2 support everywhere, just use the SSE2 version.
|
// If compiling with SSE2 support everywhere, just use the SSE2 version.
|
||||||
return ClassifyLineSSE2 (node, v1, v2, sidev);
|
return ClassifyLineSSE2 (node, v1, v2, sidev);
|
||||||
#elif defined(_MSC_VER) && _MSC_VER < 1300
|
#elif defined(_MSC_VER) && _MSC_VER < 1300
|
||||||
|
|
|
@ -3542,6 +3542,8 @@ static const int LegacyRenderStyleIndices[] =
|
||||||
3, // STYLE_SoulTrans,
|
3, // STYLE_SoulTrans,
|
||||||
4, // STYLE_OptFuzzy,
|
4, // STYLE_OptFuzzy,
|
||||||
5, // STYLE_Stencil,
|
5, // STYLE_Stencil,
|
||||||
|
6, // STYLE_AddStencil
|
||||||
|
7, // STYLE_AddShaded
|
||||||
64, // STYLE_Translucent
|
64, // STYLE_Translucent
|
||||||
65, // STYLE_Add,
|
65, // STYLE_Add,
|
||||||
66, // STYLE_Shaded,
|
66, // STYLE_Shaded,
|
||||||
|
@ -6979,7 +6981,7 @@ scriptwait:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PRINTNAME_LEVEL:
|
case PRINTNAME_LEVEL:
|
||||||
work += level.mapname;
|
work += level.MapName;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PRINTNAME_SKILL:
|
case PRINTNAME_SKILL:
|
||||||
|
@ -8940,7 +8942,7 @@ static void addDefered (level_info_t *i, acsdefered_t::EType type, int script, c
|
||||||
def->playernum = -1;
|
def->playernum = -1;
|
||||||
}
|
}
|
||||||
i->defered = def;
|
i->defered = def;
|
||||||
DPrintf ("%s on map %s deferred\n", ScriptPresentation(script).GetChars(), i->mapname);
|
DPrintf ("%s on map %s deferred\n", ScriptPresentation(script).GetChars(), i->MapName.GetChars());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8948,7 +8950,7 @@ EXTERN_CVAR (Bool, sv_cheats)
|
||||||
|
|
||||||
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags)
|
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags)
|
||||||
{
|
{
|
||||||
if (map == NULL || 0 == strnicmp (level.mapname, map, 8))
|
if (map == NULL || 0 == strnicmp (level.MapName, map, 8))
|
||||||
{
|
{
|
||||||
FBehavior *module = NULL;
|
FBehavior *module = NULL;
|
||||||
const ScriptPtr *scriptdata;
|
const ScriptPtr *scriptdata;
|
||||||
|
@ -9001,17 +9003,17 @@ int P_StartScript (AActor *who, line_t *where, int script, const char *map, cons
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void P_SuspendScript (int script, char *map)
|
void P_SuspendScript (int script, const char *map)
|
||||||
{
|
{
|
||||||
if (strnicmp (level.mapname, map, 8))
|
if (strnicmp (level.MapName, map, 8))
|
||||||
addDefered (FindLevelInfo (map), acsdefered_t::defsuspend, script, NULL, 0, NULL);
|
addDefered (FindLevelInfo (map), acsdefered_t::defsuspend, script, NULL, 0, NULL);
|
||||||
else
|
else
|
||||||
SetScriptState (script, DLevelScript::SCRIPT_Suspended);
|
SetScriptState (script, DLevelScript::SCRIPT_Suspended);
|
||||||
}
|
}
|
||||||
|
|
||||||
void P_TerminateScript (int script, char *map)
|
void P_TerminateScript (int script, const char *map)
|
||||||
{
|
{
|
||||||
if (strnicmp (level.mapname, map, 8))
|
if (strnicmp (level.MapName, map, 8))
|
||||||
addDefered (FindLevelInfo (map), acsdefered_t::defterminate, script, NULL, 0, NULL);
|
addDefered (FindLevelInfo (map), acsdefered_t::defterminate, script, NULL, 0, NULL);
|
||||||
else
|
else
|
||||||
SetScriptState (script, DLevelScript::SCRIPT_PleaseRemove);
|
SetScriptState (script, DLevelScript::SCRIPT_PleaseRemove);
|
||||||
|
|
|
@ -863,7 +863,7 @@ FUNC(LS_Teleport_NewMap)
|
||||||
|
|
||||||
if (info && CheckIfExitIsGood (it, info))
|
if (info && CheckIfExitIsGood (it, info))
|
||||||
{
|
{
|
||||||
G_ChangeLevel(info->mapname, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0);
|
G_ChangeLevel(info->MapName, arg1, arg2 ? CHANGELEVEL_KEEPFACING : 0);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1644,11 +1644,11 @@ FUNC(LS_ACS_Execute)
|
||||||
|
|
||||||
if (arg1 == 0)
|
if (arg1 == 0)
|
||||||
{
|
{
|
||||||
mapname = level.mapname;
|
mapname = level.MapName;
|
||||||
}
|
}
|
||||||
else if ((info = FindLevelByNum(arg1)) != NULL)
|
else if ((info = FindLevelByNum(arg1)) != NULL)
|
||||||
{
|
{
|
||||||
mapname = info->mapname;
|
mapname = info->MapName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1667,11 +1667,11 @@ FUNC(LS_ACS_ExecuteAlways)
|
||||||
|
|
||||||
if (arg1 == 0)
|
if (arg1 == 0)
|
||||||
{
|
{
|
||||||
mapname = level.mapname;
|
mapname = level.MapName;
|
||||||
}
|
}
|
||||||
else if ((info = FindLevelByNum(arg1)) != NULL)
|
else if ((info = FindLevelByNum(arg1)) != NULL)
|
||||||
{
|
{
|
||||||
mapname = info->mapname;
|
mapname = info->MapName;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1707,7 +1707,7 @@ FUNC(LS_ACS_ExecuteWithResult)
|
||||||
int args[4] = { arg1, arg2, arg3, arg4 };
|
int args[4] = { arg1, arg2, arg3, arg4 };
|
||||||
int flags = (backSide ? ACS_BACKSIDE : 0) | ACS_ALWAYS | ACS_WANTRESULT;
|
int flags = (backSide ? ACS_BACKSIDE : 0) | ACS_ALWAYS | ACS_WANTRESULT;
|
||||||
|
|
||||||
return P_StartScript (it, ln, arg0, level.mapname, args, 4, flags);
|
return P_StartScript (it, ln, arg0, level.MapName, args, 4, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
FUNC(LS_ACS_Suspend)
|
FUNC(LS_ACS_Suspend)
|
||||||
|
@ -1716,9 +1716,9 @@ FUNC(LS_ACS_Suspend)
|
||||||
level_info_t *info;
|
level_info_t *info;
|
||||||
|
|
||||||
if (arg1 == 0)
|
if (arg1 == 0)
|
||||||
P_SuspendScript (arg0, level.mapname);
|
P_SuspendScript (arg0, level.MapName);
|
||||||
else if ((info = FindLevelByNum (arg1)) )
|
else if ((info = FindLevelByNum (arg1)) )
|
||||||
P_SuspendScript (arg0, info->mapname);
|
P_SuspendScript (arg0, info->MapName);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1729,9 +1729,9 @@ FUNC(LS_ACS_Terminate)
|
||||||
level_info_t *info;
|
level_info_t *info;
|
||||||
|
|
||||||
if (arg1 == 0)
|
if (arg1 == 0)
|
||||||
P_TerminateScript (arg0, level.mapname);
|
P_TerminateScript (arg0, level.MapName);
|
||||||
else if ((info = FindLevelByNum (arg1)) )
|
else if ((info = FindLevelByNum (arg1)) )
|
||||||
P_TerminateScript (arg0, info->mapname);
|
P_TerminateScript (arg0, info->MapName);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1010,6 +1010,16 @@ bool AActor::Grind(bool items)
|
||||||
if ((flags & MF_CORPSE) && !(flags3 & MF3_DONTGIB) && (health <= 0))
|
if ((flags & MF_CORPSE) && !(flags3 & MF3_DONTGIB) && (health <= 0))
|
||||||
{
|
{
|
||||||
FState * state = FindState(NAME_Crush);
|
FState * state = FindState(NAME_Crush);
|
||||||
|
|
||||||
|
// In Heretic and Chex Quest we don't change the actor's sprite, just its size.
|
||||||
|
if (state == NULL && gameinfo.dontcrunchcorpses)
|
||||||
|
{
|
||||||
|
flags &= ~MF_SOLID;
|
||||||
|
flags3 |= MF3_DONTGIB;
|
||||||
|
height = radius = 0;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
bool isgeneric = false;
|
bool isgeneric = false;
|
||||||
// ZDoom behavior differs from standard as crushed corpses cannot be raised.
|
// ZDoom behavior differs from standard as crushed corpses cannot be raised.
|
||||||
// The reason for the change was originally because of a problem with players,
|
// The reason for the change was originally because of a problem with players,
|
||||||
|
|
|
@ -272,11 +272,12 @@ MapData *P_OpenMapData(const char * mapname, bool justcheck)
|
||||||
FString fmt;
|
FString fmt;
|
||||||
int lump_wad;
|
int lump_wad;
|
||||||
int lump_map;
|
int lump_map;
|
||||||
int lump_name;
|
int lump_name = -1;
|
||||||
|
|
||||||
// Check for both *.wad and *.map in order to load Build maps
|
// Check for both *.wad and *.map in order to load Build maps
|
||||||
// as well. The higher one will take precedence.
|
// as well. The higher one will take precedence.
|
||||||
lump_name = Wads.CheckNumForName(mapname);
|
// Names with more than 8 characters will only be checked as .wad and .map.
|
||||||
|
if (strlen(mapname) <= 8) lump_name = Wads.CheckNumForName(mapname);
|
||||||
fmt.Format("maps/%s.wad", mapname);
|
fmt.Format("maps/%s.wad", mapname);
|
||||||
lump_wad = Wads.CheckNumForFullName(fmt);
|
lump_wad = Wads.CheckNumForFullName(fmt);
|
||||||
fmt.Format("maps/%s.map", mapname);
|
fmt.Format("maps/%s.map", mapname);
|
||||||
|
@ -3559,7 +3560,7 @@ void P_FreeExtraLevelData()
|
||||||
//
|
//
|
||||||
|
|
||||||
// [RH] position indicates the start spot to spawn at
|
// [RH] position indicates the start spot to spawn at
|
||||||
void P_SetupLevel (char *lumpname, int position)
|
void P_SetupLevel (const char *lumpname, int position)
|
||||||
{
|
{
|
||||||
cycle_t times[20];
|
cycle_t times[20];
|
||||||
FMapThing *buildthings;
|
FMapThing *buildthings;
|
||||||
|
|
|
@ -103,7 +103,7 @@ bool P_CheckMapData(const char * mapname);
|
||||||
// [RH] The only parameter used is mapname, so I removed playermask and skill.
|
// [RH] The only parameter used is mapname, so I removed playermask and skill.
|
||||||
// On September 1, 1998, I added the position to indicate which set
|
// On September 1, 1998, I added the position to indicate which set
|
||||||
// of single-player start spots should be spawned in the level.
|
// of single-player start spots should be spawned in the level.
|
||||||
void P_SetupLevel (char *mapname, int position);
|
void P_SetupLevel (const char *mapname, int position);
|
||||||
|
|
||||||
void P_FreeLevelData();
|
void P_FreeLevelData();
|
||||||
void P_FreeExtraLevelData();
|
void P_FreeExtraLevelData();
|
||||||
|
|
|
@ -902,8 +902,8 @@ bool EV_TeleportSector (int tag, int source_tid, int dest_tid, bool fog, int gro
|
||||||
#define ACS_NET 8
|
#define ACS_NET 8
|
||||||
|
|
||||||
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags);
|
int P_StartScript (AActor *who, line_t *where, int script, const char *map, const int *args, int argcount, int flags);
|
||||||
void P_SuspendScript (int script, char *map);
|
void P_SuspendScript (int script, const char *map);
|
||||||
void P_TerminateScript (int script, char *map);
|
void P_TerminateScript (int script, const char *map);
|
||||||
void P_DoDeferedScripts (void);
|
void P_DoDeferedScripts (void);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -658,6 +658,9 @@ public:
|
||||||
case NAME_Stencil:
|
case NAME_Stencil:
|
||||||
th->RenderStyle = STYLE_Stencil;
|
th->RenderStyle = STYLE_Stencil;
|
||||||
break;
|
break;
|
||||||
|
case NAME_AddStencil:
|
||||||
|
th->RenderStyle = STYLE_AddStencil;
|
||||||
|
break;
|
||||||
case NAME_Translucent:
|
case NAME_Translucent:
|
||||||
th->RenderStyle = STYLE_Translucent;
|
th->RenderStyle = STYLE_Translucent;
|
||||||
break;
|
break;
|
||||||
|
@ -668,6 +671,9 @@ public:
|
||||||
case NAME_Shaded:
|
case NAME_Shaded:
|
||||||
th->RenderStyle = STYLE_Shaded;
|
th->RenderStyle = STYLE_Shaded;
|
||||||
break;
|
break;
|
||||||
|
case NAME_AddShaded:
|
||||||
|
th->RenderStyle = STYLE_AddShaded;
|
||||||
|
break;
|
||||||
case NAME_TranslucentStencil:
|
case NAME_TranslucentStencil:
|
||||||
th->RenderStyle = STYLE_TranslucentStencil;
|
th->RenderStyle = STYLE_TranslucentStencil;
|
||||||
break;
|
break;
|
||||||
|
@ -1239,6 +1245,7 @@ public:
|
||||||
int lightcolor = -1;
|
int lightcolor = -1;
|
||||||
int fadecolor = -1;
|
int fadecolor = -1;
|
||||||
int desaturation = -1;
|
int desaturation = -1;
|
||||||
|
int fplaneflags = 0, cplaneflags = 0;
|
||||||
|
|
||||||
memset(sec, 0, sizeof(*sec));
|
memset(sec, 0, sizeof(*sec));
|
||||||
sec->lightlevel = 160;
|
sec->lightlevel = 160;
|
||||||
|
@ -1440,6 +1447,48 @@ public:
|
||||||
Flag(sec->MoreFlags, SECF_UNDERWATER, key);
|
Flag(sec->MoreFlags, SECF_UNDERWATER, key);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case NAME_floorplane_a:
|
||||||
|
fplaneflags |= 1;
|
||||||
|
sec->floorplane.a = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_floorplane_b:
|
||||||
|
fplaneflags |= 2;
|
||||||
|
sec->floorplane.b = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_floorplane_c:
|
||||||
|
fplaneflags |= 4;
|
||||||
|
sec->floorplane.c = CheckFixed(key);
|
||||||
|
sec->floorplane.ic = FixedDiv(FRACUNIT, sec->floorplane.c);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_floorplane_d:
|
||||||
|
fplaneflags |= 8;
|
||||||
|
sec->floorplane.d = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_ceilingplane_a:
|
||||||
|
cplaneflags |= 1;
|
||||||
|
sec->ceilingplane.a = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_ceilingplane_b:
|
||||||
|
cplaneflags |= 2;
|
||||||
|
sec->ceilingplane.b = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_ceilingplane_c:
|
||||||
|
cplaneflags |= 4;
|
||||||
|
sec->ceilingplane.c = CheckFixed(key);
|
||||||
|
sec->ceilingplane.ic = FixedDiv(FRACUNIT, sec->ceilingplane.c);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NAME_ceilingplane_d:
|
||||||
|
cplaneflags |= 8;
|
||||||
|
sec->ceilingplane.d = CheckFixed(key);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1451,12 +1500,22 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
sec->secretsector = !!(sec->special&SECRET_MASK);
|
sec->secretsector = !!(sec->special&SECRET_MASK);
|
||||||
sec->floorplane.d = -sec->GetPlaneTexZ(sector_t::floor);
|
|
||||||
sec->floorplane.c = FRACUNIT;
|
// Reset the planes to their defaults if not all of the plane equation's parameters were found.
|
||||||
sec->floorplane.ic = FRACUNIT;
|
if (fplaneflags != 15)
|
||||||
sec->ceilingplane.d = sec->GetPlaneTexZ(sector_t::ceiling);
|
{
|
||||||
sec->ceilingplane.c = -FRACUNIT;
|
sec->floorplane.a = sec->floorplane.b = 0;
|
||||||
sec->ceilingplane.ic = -FRACUNIT;
|
sec->floorplane.d = -sec->GetPlaneTexZ(sector_t::floor);
|
||||||
|
sec->floorplane.c = FRACUNIT;
|
||||||
|
sec->floorplane.ic = FRACUNIT;
|
||||||
|
}
|
||||||
|
if (cplaneflags != 15)
|
||||||
|
{
|
||||||
|
sec->ceilingplane.a = sec->ceilingplane.b = 0;
|
||||||
|
sec->ceilingplane.d = sec->GetPlaneTexZ(sector_t::ceiling);
|
||||||
|
sec->ceilingplane.c = -FRACUNIT;
|
||||||
|
sec->ceilingplane.ic = -FRACUNIT;
|
||||||
|
}
|
||||||
|
|
||||||
if (lightcolor == -1 && fadecolor == -1 && desaturation == -1)
|
if (lightcolor == -1 && fadecolor == -1 && desaturation == -1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -47,18 +47,20 @@ CVAR (Int, r_drawfuzz, 1, CVAR_ARCHIVE)
|
||||||
#ifndef __APPLE__
|
#ifndef __APPLE__
|
||||||
FRenderStyle LegacyRenderStyles[STYLE_Count] =
|
FRenderStyle LegacyRenderStyles[STYLE_Count] =
|
||||||
{
|
{
|
||||||
/* STYLE_None */ {{ STYLEOP_None, STYLEALPHA_Zero, STYLEALPHA_Zero, 0 }},
|
{ { STYLEOP_None, STYLEALPHA_Zero, STYLEALPHA_Zero, 0 } }, /* STYLE_None */
|
||||||
/* STYLE_Normal */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 } }, /* STYLE_Normal */
|
||||||
/* STYLE_Fuzzy */ {{ STYLEOP_Fuzz, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
{ { STYLEOP_Fuzz, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_Fuzzy */
|
||||||
/* STYLE_SoulTrans */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_TransSoulsAlpha }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_TransSoulsAlpha } }, /* STYLE_SoulTrans */
|
||||||
/* STYLE_OptFuzzy */ {{ STYLEOP_FuzzOrAdd, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
{ { STYLEOP_FuzzOrAdd, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_OptFuzzy */
|
||||||
/* STYLE_Stencil */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 | STYLEF_ColorIsFixed }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_Alpha1 | STYLEF_ColorIsFixed } }, /* STYLE_Stencil */
|
||||||
/* STYLE_Translucent */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, 0 } }, /* STYLE_Translucent */
|
||||||
/* STYLE_Add */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, 0 }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, 0 } }, /* STYLE_Add */
|
||||||
/* STYLE_Shaded */ {{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed } }, /* STYLE_Shaded */
|
||||||
/* STYLE_TranslucentStencil */{{ STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed }},
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed } }, /* STYLE_TranslucentStencil */
|
||||||
/* STYLE_Shadow */ {{ STYLEOP_Shadow, 0, 0, 0 }},
|
{ { STYLEOP_Shadow, 0, 0, 0 } }, /* STYLE_Shadow */
|
||||||
/* STYLE_Subtract*/ {{ STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0 }},
|
{ { STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0 } }, /* STYLE_Subtract*/
|
||||||
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_ColorIsFixed } }, /* STYLE_AddStencil */
|
||||||
|
{ { STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed } }, /* STYLE_AddShaded */
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
FRenderStyle LegacyRenderStyles[STYLE_Count];
|
FRenderStyle LegacyRenderStyles[STYLE_Count];
|
||||||
|
@ -77,6 +79,8 @@ static const BYTE Styles[STYLE_Count * 4] =
|
||||||
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed,
|
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_InvSrc, STYLEF_ColorIsFixed,
|
||||||
STYLEOP_Shadow, 0, 0, 0,
|
STYLEOP_Shadow, 0, 0, 0,
|
||||||
STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0,
|
STYLEOP_RevSub, STYLEALPHA_Src, STYLEALPHA_One, 0,
|
||||||
|
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_Alpha1 | STYLEF_ColorIsFixed,
|
||||||
|
STYLEOP_Add, STYLEALPHA_Src, STYLEALPHA_One, STYLEF_RedIsAlpha | STYLEF_ColorIsFixed,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct LegacyInit
|
static struct LegacyInit
|
||||||
|
|
|
@ -50,6 +50,8 @@ enum ERenderStyle
|
||||||
STYLE_TranslucentStencil,
|
STYLE_TranslucentStencil,
|
||||||
STYLE_Shadow,
|
STYLE_Shadow,
|
||||||
STYLE_Subtract, // Actually this is 'reverse subtract' but this is what normal people would expect by 'subtract'.
|
STYLE_Subtract, // Actually this is 'reverse subtract' but this is what normal people would expect by 'subtract'.
|
||||||
|
STYLE_AddStencil, // Fill image interior with alphacolor
|
||||||
|
STYLE_AddShaded, // Treat patch data as alpha values for alphacolor
|
||||||
|
|
||||||
STYLE_Count
|
STYLE_Count
|
||||||
};
|
};
|
||||||
|
|
|
@ -229,9 +229,10 @@ public:
|
||||||
void BeginPlay ();
|
void BeginPlay ();
|
||||||
void Activate (AActor *source);
|
void Activate (AActor *source);
|
||||||
void Deactivate (AActor *source);
|
void Deactivate (AActor *source);
|
||||||
virtual bool TriggerAction (AActor *triggerer, int activationType);
|
bool TriggerAction(AActor *triggerer, int activationType);
|
||||||
protected:
|
protected:
|
||||||
bool CheckTrigger (AActor *triggerer) const;
|
virtual bool DoTriggerAction(AActor *triggerer, int activationType);
|
||||||
|
bool CheckTrigger(AActor *triggerer) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ASkyViewpoint;
|
class ASkyViewpoint;
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include "files.h"
|
#include "files.h"
|
||||||
|
|
||||||
class FResourceFile;
|
class FResourceFile;
|
||||||
|
class FTexture;
|
||||||
|
|
||||||
struct FResourceLump
|
struct FResourceLump
|
||||||
{
|
{
|
||||||
|
@ -24,6 +25,7 @@ struct FResourceLump
|
||||||
SBYTE RefCount;
|
SBYTE RefCount;
|
||||||
char * Cache;
|
char * Cache;
|
||||||
FResourceFile * Owner;
|
FResourceFile * Owner;
|
||||||
|
FTexture * LinkedTexture;
|
||||||
int Namespace;
|
int Namespace;
|
||||||
|
|
||||||
FResourceLump()
|
FResourceLump()
|
||||||
|
@ -35,6 +37,7 @@ struct FResourceLump
|
||||||
RefCount = 0;
|
RefCount = 0;
|
||||||
Namespace = 0; // ns_global
|
Namespace = 0; // ns_global
|
||||||
*Name = 0;
|
*Name = 0;
|
||||||
|
LinkedTexture = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual ~FResourceLump();
|
virtual ~FResourceLump();
|
||||||
|
|
|
@ -172,11 +172,7 @@ static int DoomSpecificInfo (char *buffer, char *end)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char name[9];
|
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", level.MapName.GetChars());
|
||||||
|
|
||||||
strncpy (name, level.mapname, 8);
|
|
||||||
name[8] = 0;
|
|
||||||
p += snprintf (buffer+p, size-p, "\n\nCurrent map: %s", name);
|
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
{
|
{
|
||||||
|
|
|
@ -484,7 +484,7 @@ static bool Cht_ChangeStartSpot (cheatseq_t *cheat)
|
||||||
{
|
{
|
||||||
char cmd[64];
|
char cmd[64];
|
||||||
|
|
||||||
mysnprintf (cmd, countof(cmd), "changemap %s %c", level.mapname, cheat->Args[0]);
|
mysnprintf (cmd, countof(cmd), "changemap %s %c", level.MapName.GetChars(), cheat->Args[0]);
|
||||||
C_DoCommand (cmd);
|
C_DoCommand (cmd);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -408,12 +408,13 @@ static void StoreLevelStats()
|
||||||
{
|
{
|
||||||
for(i=0;i<LevelData.Size();i++)
|
for(i=0;i<LevelData.Size();i++)
|
||||||
{
|
{
|
||||||
if (!stricmp(LevelData[i].levelname, level.mapname)) break;
|
if (!stricmp(LevelData[i].levelname, level.MapName)) break;
|
||||||
}
|
}
|
||||||
if (i==LevelData.Size())
|
if (i==LevelData.Size())
|
||||||
{
|
{
|
||||||
LevelData.Reserve(1);
|
LevelData.Reserve(1);
|
||||||
strcpy(LevelData[i].levelname, level.mapname);
|
strncpy(LevelData[i].levelname, level.MapName, 8);
|
||||||
|
LevelData[i].levelname[8] = 0;
|
||||||
}
|
}
|
||||||
LevelData[i].totalkills = level.total_monsters;
|
LevelData[i].totalkills = level.total_monsters;
|
||||||
LevelData[i].killcount = level.killed_monsters;
|
LevelData[i].killcount = level.killed_monsters;
|
||||||
|
|
|
@ -551,7 +551,7 @@ void FTextureManager::ParseTime (FScanner &sc, DWORD &min, DWORD &max)
|
||||||
|
|
||||||
void FTextureManager::ParseWarp(FScanner &sc)
|
void FTextureManager::ParseWarp(FScanner &sc)
|
||||||
{
|
{
|
||||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny;
|
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny | TEXMAN_ShortNameOnly;
|
||||||
bool isflat = false;
|
bool isflat = false;
|
||||||
bool type2 = sc.Compare ("warp2"); // [GRB]
|
bool type2 = sc.Compare ("warp2"); // [GRB]
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
|
@ -616,7 +616,7 @@ void FTextureManager::ParseWarp(FScanner &sc)
|
||||||
|
|
||||||
void FTextureManager::ParseCameraTexture(FScanner &sc)
|
void FTextureManager::ParseCameraTexture(FScanner &sc)
|
||||||
{
|
{
|
||||||
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny;
|
const BITFIELD texflags = TEXMAN_Overridable | TEXMAN_TryAny | TEXMAN_ShortNameOnly;
|
||||||
int width, height;
|
int width, height;
|
||||||
int fitwidth, fitheight;
|
int fitwidth, fitheight;
|
||||||
FString picname;
|
FString picname;
|
||||||
|
|
|
@ -1001,21 +1001,7 @@ void FMultiPatchTexture::ParsePatch(FScanner &sc, TexPart & part, bool silent, i
|
||||||
|
|
||||||
if (!texno.isValid())
|
if (!texno.isValid())
|
||||||
{
|
{
|
||||||
int lumpnum = Wads.CheckNumForFullName(sc.String);
|
if (strlen(sc.String) <= 8 && !strpbrk(sc.String, "./"))
|
||||||
if (lumpnum >= 0)
|
|
||||||
{
|
|
||||||
texno = TexMan.FindTextureByLumpNum(lumpnum);
|
|
||||||
if (texno.isValid ())
|
|
||||||
{
|
|
||||||
part.Texture = TexMan[texno];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
part.Texture = FTexture::CreateTexture("", lumpnum, usetype);
|
|
||||||
TexMan.AddTexture(part.Texture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (strlen(sc.String) <= 8 && !strpbrk(sc.String, "./"))
|
|
||||||
{
|
{
|
||||||
int lumpnum = Wads.CheckNumForName(sc.String, usetype == TEX_MiscPatch? ns_graphics : ns_patches);
|
int lumpnum = Wads.CheckNumForName(sc.String, usetype == TEX_MiscPatch? ns_graphics : ns_patches);
|
||||||
if (lumpnum >= 0)
|
if (lumpnum >= 0)
|
||||||
|
|
|
@ -167,6 +167,8 @@ FTexture::FTexture (const char *name, int lumpnum)
|
||||||
|
|
||||||
FTexture::~FTexture ()
|
FTexture::~FTexture ()
|
||||||
{
|
{
|
||||||
|
FTexture *link = Wads.GetLinkedTexture(SourceLump);
|
||||||
|
if (link == this) Wads.SetLinkedTexture(SourceLump, NULL);
|
||||||
KillNative();
|
KillNative();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -220,8 +220,37 @@ FTextureID FTextureManager::CheckForTexture (const char *name, int usetype, BITF
|
||||||
{
|
{
|
||||||
if (firsttype == FTexture::TEX_Null) return FTextureID(0);
|
if (firsttype == FTexture::TEX_Null) return FTextureID(0);
|
||||||
if (firsttype == FTexture::TEX_FirstDefined && !(flags & TEXMAN_ReturnFirst)) return FTextureID(0);
|
if (firsttype == FTexture::TEX_FirstDefined && !(flags & TEXMAN_ReturnFirst)) return FTextureID(0);
|
||||||
|
return FTextureID(firstfound);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (!(flags & TEXMAN_ShortNameOnly))
|
||||||
|
{
|
||||||
|
// We intentionally only look for textures in subdirectories.
|
||||||
|
// Any graphic being placed in the zip's root directory can not be found by this.
|
||||||
|
if (strchr(name, '/'))
|
||||||
|
{
|
||||||
|
FTexture *const NO_TEXTURE = (FTexture*)-1;
|
||||||
|
int lump = Wads.CheckNumForFullName(name);
|
||||||
|
if (lump >= 0)
|
||||||
|
{
|
||||||
|
FTexture *tex = Wads.GetLinkedTexture(lump);
|
||||||
|
if (tex == NO_TEXTURE) return FTextureID(-1);
|
||||||
|
if (tex != NULL) return tex->id;
|
||||||
|
tex = FTexture::CreateTexture("", lump, FTexture::TEX_Override);
|
||||||
|
if (tex != NULL)
|
||||||
|
{
|
||||||
|
Wads.SetLinkedTexture(lump, tex);
|
||||||
|
return AddTexture(tex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// mark this lump as having no valid texture so that we don't have to retry creating one later.
|
||||||
|
Wads.SetLinkedTexture(lump, NO_TEXTURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return FTextureID(firstfound);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return FTextureID(-1);
|
return FTextureID(-1);
|
||||||
|
@ -273,30 +302,6 @@ int FTextureManager::ListTextures (const char *name, TArray<FTextureID> &list)
|
||||||
return list.Size();
|
return list.Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
|
||||||
//
|
|
||||||
// FTextureManager :: FindTextureByLumpNum
|
|
||||||
//
|
|
||||||
//==========================================================================
|
|
||||||
|
|
||||||
FTextureID FTextureManager::FindTextureByLumpNum (int lumpnum)
|
|
||||||
{
|
|
||||||
if (lumpnum < 0)
|
|
||||||
{
|
|
||||||
return FTextureID(-1);
|
|
||||||
}
|
|
||||||
// This can't use hashing because using ReplaceTexture would break the hash chains. :(
|
|
||||||
for(unsigned i = 0; i <Textures.Size(); i++)
|
|
||||||
{
|
|
||||||
if (Textures[i].Texture->SourceLump == lumpnum)
|
|
||||||
{
|
|
||||||
return FTextureID(i);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return FTextureID(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FTextureManager :: GetTextures
|
// FTextureManager :: GetTextures
|
||||||
|
@ -1093,8 +1098,15 @@ void FTextureManager::WriteTexture (FArchive &arc, int picnum)
|
||||||
pic = Textures[picnum].Texture;
|
pic = Textures[picnum].Texture;
|
||||||
}
|
}
|
||||||
|
|
||||||
arc.WriteName (pic->Name);
|
if (Wads.GetLinkedTexture(pic->SourceLump) == pic)
|
||||||
arc.WriteCount (pic->UseType);
|
{
|
||||||
|
arc.WriteName(Wads.GetLumpFullName(pic->SourceLump));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
arc.WriteName(pic->Name);
|
||||||
|
}
|
||||||
|
arc.WriteCount(pic->UseType);
|
||||||
}
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
|
@ -240,7 +240,6 @@ public:
|
||||||
virtual int GetSourceLump() { return SourceLump; }
|
virtual int GetSourceLump() { return SourceLump; }
|
||||||
virtual FTexture *GetRedirect(bool wantwarped);
|
virtual FTexture *GetRedirect(bool wantwarped);
|
||||||
virtual FTexture *GetRawTexture(); // for FMultiPatchTexture to override
|
virtual FTexture *GetRawTexture(); // for FMultiPatchTexture to override
|
||||||
FTextureID GetID() const { return id; }
|
|
||||||
|
|
||||||
virtual void Unload () = 0;
|
virtual void Unload () = 0;
|
||||||
|
|
||||||
|
@ -433,12 +432,12 @@ public:
|
||||||
TEXMAN_TryAny = 1,
|
TEXMAN_TryAny = 1,
|
||||||
TEXMAN_Overridable = 2,
|
TEXMAN_Overridable = 2,
|
||||||
TEXMAN_ReturnFirst = 4,
|
TEXMAN_ReturnFirst = 4,
|
||||||
TEXMAN_AllowSkins = 8
|
TEXMAN_AllowSkins = 8,
|
||||||
|
TEXMAN_ShortNameOnly = 16
|
||||||
};
|
};
|
||||||
|
|
||||||
FTextureID CheckForTexture (const char *name, int usetype, BITFIELD flags=TEXMAN_TryAny);
|
FTextureID CheckForTexture (const char *name, int usetype, BITFIELD flags=TEXMAN_TryAny);
|
||||||
FTextureID GetTexture (const char *name, int usetype, BITFIELD flags=0);
|
FTextureID GetTexture (const char *name, int usetype, BITFIELD flags=0);
|
||||||
FTextureID FindTextureByLumpNum (int lumpnum);
|
|
||||||
int ListTextures (const char *name, TArray<FTextureID> &list);
|
int ListTextures (const char *name, TArray<FTextureID> &list);
|
||||||
|
|
||||||
void AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup=0, bool texture1=false);
|
void AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup=0, bool texture1=false);
|
||||||
|
|
|
@ -797,12 +797,12 @@ DEFINE_PROPERTY(renderstyle, S, Actor)
|
||||||
PROP_STRING_PARM(str, 0);
|
PROP_STRING_PARM(str, 0);
|
||||||
static const char * renderstyles[]={
|
static const char * renderstyles[]={
|
||||||
"NONE", "NORMAL", "FUZZY", "SOULTRANS", "OPTFUZZY", "STENCIL",
|
"NONE", "NORMAL", "FUZZY", "SOULTRANS", "OPTFUZZY", "STENCIL",
|
||||||
"TRANSLUCENT", "ADD", "SHADED", "SHADOW", "SUBTRACT", NULL };
|
"TRANSLUCENT", "ADD", "SHADED", "SHADOW", "SUBTRACT", "ADDSTENCIL", "ADDSHADED", NULL };
|
||||||
|
|
||||||
static const int renderstyle_values[]={
|
static const int renderstyle_values[]={
|
||||||
STYLE_None, STYLE_Normal, STYLE_Fuzzy, STYLE_SoulTrans, STYLE_OptFuzzy,
|
STYLE_None, STYLE_Normal, STYLE_Fuzzy, STYLE_SoulTrans, STYLE_OptFuzzy,
|
||||||
STYLE_TranslucentStencil, STYLE_Translucent, STYLE_Add, STYLE_Shaded,
|
STYLE_TranslucentStencil, STYLE_Translucent, STYLE_Add, STYLE_Shaded,
|
||||||
STYLE_Shadow, STYLE_Subtract};
|
STYLE_Shadow, STYLE_Subtract, STYLE_AddStencil, STYLE_AddShaded};
|
||||||
|
|
||||||
// make this work for old style decorations, too.
|
// make this work for old style decorations, too.
|
||||||
if (!strnicmp(str, "style_", 6)) str+=6;
|
if (!strnicmp(str, "style_", 6)) str+=6;
|
||||||
|
|
|
@ -1407,7 +1407,7 @@ void V_SetBorderNeedRefresh()
|
||||||
void V_DrawFrame (int left, int top, int width, int height)
|
void V_DrawFrame (int left, int top, int width, int height)
|
||||||
{
|
{
|
||||||
FTexture *p;
|
FTexture *p;
|
||||||
const gameborder_t *border = gameinfo.border;
|
const gameborder_t *border = &gameinfo.Border;
|
||||||
// Sanity check for incomplete gameinfo
|
// Sanity check for incomplete gameinfo
|
||||||
if (border == NULL)
|
if (border == NULL)
|
||||||
return;
|
return;
|
||||||
|
@ -1450,7 +1450,7 @@ void V_DrawBorder (int x1, int y1, int x2, int y2)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
picnum = TexMan.CheckForTexture (gameinfo.borderFlat, FTexture::TEX_Flat);
|
picnum = TexMan.CheckForTexture (gameinfo.BorderFlat, FTexture::TEX_Flat);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (picnum.isValid())
|
if (picnum.isValid())
|
||||||
|
@ -1513,28 +1513,28 @@ static void V_DrawTopBorder ()
|
||||||
if (viewwidth == SCREENWIDTH)
|
if (viewwidth == SCREENWIDTH)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
offset = gameinfo.border->offset;
|
offset = gameinfo.Border.offset;
|
||||||
|
|
||||||
if (viewwindowy < 34)
|
if (viewwindowy < 34)
|
||||||
{
|
{
|
||||||
V_DrawBorder (0, 0, viewwindowx, 34);
|
V_DrawBorder (0, 0, viewwindowx, 34);
|
||||||
V_DrawBorder (viewwindowx, 0, viewwindowx + viewwidth, viewwindowy);
|
V_DrawBorder (viewwindowx, 0, viewwindowx + viewwidth, viewwindowy);
|
||||||
V_DrawBorder (viewwindowx + viewwidth, 0, SCREENWIDTH, 34);
|
V_DrawBorder (viewwindowx + viewwidth, 0, SCREENWIDTH, 34);
|
||||||
p = TexMan(gameinfo.border->t);
|
p = TexMan(gameinfo.Border.t);
|
||||||
screen->FlatFill(viewwindowx, viewwindowy - p->GetHeight(),
|
screen->FlatFill(viewwindowx, viewwindowy - p->GetHeight(),
|
||||||
viewwindowx + viewwidth, viewwindowy, p, true);
|
viewwindowx + viewwidth, viewwindowy, p, true);
|
||||||
|
|
||||||
p = TexMan(gameinfo.border->l);
|
p = TexMan(gameinfo.Border.l);
|
||||||
screen->FlatFill(viewwindowx - p->GetWidth(), viewwindowy,
|
screen->FlatFill(viewwindowx - p->GetWidth(), viewwindowy,
|
||||||
viewwindowx, 35, p, true);
|
viewwindowx, 35, p, true);
|
||||||
p = TexMan(gameinfo.border->r);
|
p = TexMan(gameinfo.Border.r);
|
||||||
screen->FlatFill(viewwindowx + viewwidth, viewwindowy,
|
screen->FlatFill(viewwindowx + viewwidth, viewwindowy,
|
||||||
viewwindowx + viewwidth + p->GetWidth(), 35, p, true);
|
viewwindowx + viewwidth + p->GetWidth(), 35, p, true);
|
||||||
|
|
||||||
p = TexMan(gameinfo.border->tl);
|
p = TexMan(gameinfo.Border.tl);
|
||||||
screen->DrawTexture (p, viewwindowx - offset, viewwindowy - offset, TAG_DONE);
|
screen->DrawTexture (p, viewwindowx - offset, viewwindowy - offset, TAG_DONE);
|
||||||
|
|
||||||
p = TexMan(gameinfo.border->tr);
|
p = TexMan(gameinfo.Border.tr);
|
||||||
screen->DrawTexture (p, viewwindowx + viewwidth, viewwindowy - offset, TAG_DONE);
|
screen->DrawTexture (p, viewwindowx + viewwidth, viewwindowy - offset, TAG_DONE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -2193,19 +2193,6 @@ void V_InitCustomFonts()
|
||||||
FTexture **p = &lumplist[*(unsigned char*)sc.String];
|
FTexture **p = &lumplist[*(unsigned char*)sc.String];
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
FTextureID texid = TexMan.CheckForTexture(sc.String, FTexture::TEX_MiscPatch);
|
FTextureID texid = TexMan.CheckForTexture(sc.String, FTexture::TEX_MiscPatch);
|
||||||
if (!texid.Exists())
|
|
||||||
{
|
|
||||||
int lumpno = Wads.CheckNumForFullName (sc.String);
|
|
||||||
if (lumpno >= 0)
|
|
||||||
{
|
|
||||||
texid = TexMan.FindTextureByLumpNum(lumpno);
|
|
||||||
if (!texid.Exists())
|
|
||||||
{
|
|
||||||
FTexture *tex = FTexture::CreateTexture("", lumpno, FTexture::TEX_MiscPatch);
|
|
||||||
texid = TexMan.AddTexture(tex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (texid.Exists())
|
if (texid.Exists())
|
||||||
{
|
{
|
||||||
*p = TexMan[texid];
|
*p = TexMan[texid];
|
||||||
|
|
|
@ -548,6 +548,37 @@ int FWadCollection::GetNumForFullName (const char *name)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// link a texture with a given lump
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
void FWadCollection::SetLinkedTexture(int lump, FTexture *tex)
|
||||||
|
{
|
||||||
|
if ((size_t)lump < NumLumps)
|
||||||
|
{
|
||||||
|
FResourceLump *reslump = LumpInfo[lump].lump;
|
||||||
|
reslump->LinkedTexture = tex;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// retrieve linked texture
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FTexture *FWadCollection::GetLinkedTexture(int lump)
|
||||||
|
{
|
||||||
|
if ((size_t)lump < NumLumps)
|
||||||
|
{
|
||||||
|
FResourceLump *reslump = LumpInfo[lump].lump;
|
||||||
|
return reslump->LinkedTexture;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// W_LumpLength
|
// W_LumpLength
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
class FResourceFile;
|
class FResourceFile;
|
||||||
struct FResourceLump;
|
struct FResourceLump;
|
||||||
|
class FTexture;
|
||||||
|
|
||||||
struct wadinfo_t
|
struct wadinfo_t
|
||||||
{
|
{
|
||||||
|
@ -171,6 +172,9 @@ public:
|
||||||
int CheckNumForFullName (const char *name, int wadfile);
|
int CheckNumForFullName (const char *name, int wadfile);
|
||||||
int GetNumForFullName (const char *name);
|
int GetNumForFullName (const char *name);
|
||||||
|
|
||||||
|
void SetLinkedTexture(int lump, FTexture *tex);
|
||||||
|
FTexture *GetLinkedTexture(int lump);
|
||||||
|
|
||||||
|
|
||||||
void ReadLump (int lump, void *dest);
|
void ReadLump (int lump, void *dest);
|
||||||
FMemLump ReadLump (int lump);
|
FMemLump ReadLump (int lump);
|
||||||
|
|
|
@ -314,7 +314,7 @@ static bool IsExMy(const char * name)
|
||||||
|
|
||||||
void WI_LoadBackground(bool isenterpic)
|
void WI_LoadBackground(bool isenterpic)
|
||||||
{
|
{
|
||||||
const char * lumpname = NULL;
|
const char *lumpname = NULL;
|
||||||
char buffer[10];
|
char buffer[10];
|
||||||
in_anim_t an;
|
in_anim_t an;
|
||||||
lnode_t pt;
|
lnode_t pt;
|
||||||
|
@ -399,7 +399,7 @@ void WI_LoadBackground(bool isenterpic)
|
||||||
default:
|
default:
|
||||||
// Strife doesn't have an intermission pic so choose something neutral.
|
// Strife doesn't have an intermission pic so choose something neutral.
|
||||||
if (isenterpic) return;
|
if (isenterpic) return;
|
||||||
lumpname = gameinfo.borderFlat;
|
lumpname = gameinfo.BorderFlat;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1061,11 +1061,7 @@ void DoomSpecificInfo (char *buffer, size_t bufflen)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char name[9];
|
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", level.MapName.GetChars());
|
||||||
|
|
||||||
strncpy (name, level.mapname, 8);
|
|
||||||
name[8] = 0;
|
|
||||||
buffer += mysnprintf (buffer, buffend - buffer, "\r\n\r\nCurrent map: %s", name);
|
|
||||||
|
|
||||||
if (!viewactive)
|
if (!viewactive)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1086,12 +1086,12 @@ void ST_Endoom()
|
||||||
{
|
{
|
||||||
if (showendoom == 0) exit(0);
|
if (showendoom == 0) exit(0);
|
||||||
|
|
||||||
if (gameinfo.Endoom[0] == 0)
|
if (gameinfo.Endoom.Len() == 0)
|
||||||
{
|
{
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int endoom_lump = Wads.CheckNumForName (gameinfo.Endoom);
|
int endoom_lump = Wads.CheckNumForFullName (gameinfo.Endoom, true);
|
||||||
|
|
||||||
BYTE endoom_screen[4000];
|
BYTE endoom_screen[4000];
|
||||||
BYTE *font;
|
BYTE *font;
|
||||||
|
|
|
@ -299,7 +299,7 @@ void DoBlending_SSE2(const PalEntry *from, PalEntry *to, int count, int r, int g
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__amd64__) || defined(_M_IX64)
|
#if defined(__amd64__) || defined(_M_X64)
|
||||||
long long color;
|
long long color;
|
||||||
|
|
||||||
blending256 = _mm_set_epi64x(0x10001000100ll, 0x10001000100ll);
|
blending256 = _mm_set_epi64x(0x10001000100ll, 0x10001000100ll);
|
||||||
|
|
|
@ -349,7 +349,14 @@ FString &FString::AppendCStrPart (const char *tail, size_t tailLen)
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
void FString::Truncate (long newlen)
|
FString &FString::CopyCStrPart(const char *tail, size_t tailLen)
|
||||||
|
{
|
||||||
|
ReallocBuffer(tailLen);
|
||||||
|
StrCopy(Chars, tail, tailLen);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
void FString::Truncate(long newlen)
|
||||||
{
|
{
|
||||||
if (newlen >= 0 && newlen < (long)Len())
|
if (newlen >= 0 && newlen < (long)Len())
|
||||||
{
|
{
|
||||||
|
|
|
@ -167,6 +167,7 @@ public:
|
||||||
FString &operator += (char tail);
|
FString &operator += (char tail);
|
||||||
FString &operator += (const FName &name) { return *this += name.GetChars(); }
|
FString &operator += (const FName &name) { return *this += name.GetChars(); }
|
||||||
FString &AppendCStrPart (const char *tail, size_t tailLen);
|
FString &AppendCStrPart (const char *tail, size_t tailLen);
|
||||||
|
FString &CopyCStrPart(const char *tail, size_t tailLen);
|
||||||
|
|
||||||
FString &operator << (const FString &tail) { return *this += tail; }
|
FString &operator << (const FString &tail) { return *this += tail; }
|
||||||
FString &operator << (const char *tail) { return *this += tail; }
|
FString &operator << (const char *tail) { return *this += tail; }
|
||||||
|
@ -252,9 +253,13 @@ public:
|
||||||
|
|
||||||
int Compare (const FString &other) const { return strcmp (Chars, other.Chars); }
|
int Compare (const FString &other) const { return strcmp (Chars, other.Chars); }
|
||||||
int Compare (const char *other) const { return strcmp (Chars, other); }
|
int Compare (const char *other) const { return strcmp (Chars, other); }
|
||||||
|
int Compare(const FString &other, int len) const { return strncmp(Chars, other.Chars, len); }
|
||||||
|
int Compare(const char *other, int len) const { return strncmp(Chars, other, len); }
|
||||||
|
|
||||||
int CompareNoCase (const FString &other) const { return stricmp (Chars, other.Chars); }
|
int CompareNoCase (const FString &other) const { return stricmp (Chars, other.Chars); }
|
||||||
int CompareNoCase (const char *other) const { return stricmp (Chars, other); }
|
int CompareNoCase (const char *other) const { return stricmp (Chars, other); }
|
||||||
|
int CompareNoCase(const FString &other, int len) const { return strnicmp(Chars, other.Chars, len); }
|
||||||
|
int CompareNoCase(const char *other, int len) const { return strnicmp(Chars, other, len); }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
const FStringData *Data() const { return (FStringData *)Chars - 1; }
|
const FStringData *Data() const { return (FStringData *)Chars - 1; }
|
||||||
|
|
|
@ -40,6 +40,7 @@ gameinfo
|
||||||
definventorymaxamount = 25
|
definventorymaxamount = 25
|
||||||
defaultrespawntime = 12
|
defaultrespawntime = 12
|
||||||
defaultdropstyle = 1
|
defaultdropstyle = 1
|
||||||
|
dontcrunchcorpses = true
|
||||||
endoom = "ENDOOM"
|
endoom = "ENDOOM"
|
||||||
player5start = 4001
|
player5start = 4001
|
||||||
drawreadthis = true
|
drawreadthis = true
|
||||||
|
|
Loading…
Reference in a new issue