summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/Makefile.am1
-rw-r--r--src/d_iwad.c (renamed from src/doom/d_iwad.c)310
-rw-r--r--src/d_iwad.h (renamed from src/doom/d_iwad.h)15
-rw-r--r--src/d_mode.h2
-rw-r--r--src/doom/Makefile.am1
-rw-r--r--src/doom/d_main.c238
-rw-r--r--src/heretic/d_main.c149
7 files changed, 310 insertions, 406 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
index c931d27f..a7746831 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -32,6 +32,7 @@ d_event.c d_event.h \
doomkeys.h \
doomfeatures.h \
doomtype.h \
+d_iwad.c d_iwad.h \
d_mode.c d_mode.h \
d_ticcmd.h \
i_cdmus.c i_cdmus.h \
diff --git a/src/doom/d_iwad.c b/src/d_iwad.c
index dcf2651a..6f7bff70 100644
--- a/src/doom/d_iwad.c
+++ b/src/d_iwad.c
@@ -29,10 +29,9 @@
#include <ctype.h>
#include <string.h>
-#include "deh_main.h"
+#include "deh_str.h"
#include "doomkeys.h"
-#include "doomdef.h"
-#include "doomstat.h"
+#include "d_iwad.h"
#include "i_system.h"
#include "m_argv.h"
#include "m_config.h"
@@ -316,37 +315,15 @@ static void CheckDOSDefaults(void)
#endif
-static struct
-{
- char *name;
- GameMission_t mission;
-} iwads[] = {
- {"doom2.wad", doom2},
- {"plutonia.wad", pack_plut},
- {"tnt.wad", pack_tnt},
- {"doom.wad", doom},
- {"doom1.wad", doom},
- {"chex.wad", doom},
-};
-
-// Hack for chex quest mode
-
-static void CheckChex(char *iwad_name)
-{
- if (!strcmp(iwad_name, "chex.wad"))
- {
- gameversion = exe_chex;
- }
-}
-
// Search a directory to try to find an IWAD
// Returns the location of the IWAD if found, otherwise NULL.
-static char *SearchDirectoryForIWAD(char *dir)
+static char *SearchDirectoryForIWAD(char *dir, iwad_t *iwads,
+ GameMission_t *mission)
{
size_t i;
- for (i=0; i<arrlen(iwads); ++i)
+ for (i=0; iwads[i].name != NULL; ++i)
{
char *filename;
char *iwadname;
@@ -366,8 +343,7 @@ static char *SearchDirectoryForIWAD(char *dir)
if (M_FileExists(filename))
{
- CheckChex(iwads[i].name);
- gamemission = iwads[i].mission;
+ *mission = iwads[i].mission;
return filename;
}
@@ -381,13 +357,14 @@ static char *SearchDirectoryForIWAD(char *dir)
// When given an IWAD with the '-iwad' parameter,
// attempt to identify it by its name.
-static void IdentifyIWADByName(char *name)
+static GameMission_t IdentifyIWADByName(char *name, iwad_t *iwads)
{
size_t i;
+ GameMission_t mission;
- gamemission = none;
+ mission = none;
- for (i=0; i<arrlen(iwads); ++i)
+ for (i=0; iwads[i].name != NULL; ++i)
{
char *iwadname;
@@ -401,11 +378,12 @@ static void IdentifyIWADByName(char *name)
if (!strcasecmp(name + strlen(name) - strlen(iwadname),
iwadname))
{
- CheckChex(iwads[i].name);
- gamemission = iwads[i].mission;
+ mission = iwads[i].mission;
break;
}
}
+
+ return mission;
}
//
@@ -584,7 +562,7 @@ char *D_TryFindWADByName(char *filename)
// should be executed (notably loading PWADs).
//
-char *D_FindIWAD(void)
+char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission)
{
char *result;
char *iwadfile;
@@ -614,7 +592,7 @@ char *D_FindIWAD(void)
I_Error("IWAD file '%s' not found!", iwadfile);
}
- IdentifyIWADByName(result);
+ *mission = IdentifyIWADByName(result, iwads);
}
else
{
@@ -626,272 +604,18 @@ char *D_FindIWAD(void)
for (i=0; result == NULL && i<num_iwad_dirs; ++i)
{
- result = SearchDirectoryForIWAD(iwad_dirs[i]);
+ result = SearchDirectoryForIWAD(iwad_dirs[i], iwads, mission);
}
}
return result;
}
-//
-// Get the IWAD name used for savegames.
-//
-
-static char *SaveGameIWADName(void)
-{
- size_t i;
-
- // Chex quest hack
-
- if (gameversion == exe_chex)
- {
- return "chex.wad";
- }
-
- // Find what subdirectory to use for savegames
- //
- // They should be stored in something like
- // ~/.chocolate-doom/savegames/doom.wad/
- //
- // The directory depends on the IWAD, so that savegames for
- // different IWADs are kept separate.
- //
- // Note that we match on gamemission rather than on IWAD name.
- // This ensures that doom1.wad and doom.wad saves are stored
- // in the same place.
-
- for (i=0; i<arrlen(iwads); ++i)
- {
- if (gamemission == iwads[i].mission)
- {
- return iwads[i].name;
- }
- }
-
- return NULL;
-}
-//
-// SetSaveGameDir
-//
-// Chooses the directory used to store saved games.
-//
-
-void D_SetSaveGameDir(void)
-{
- char *iwad_name;
-
- if (!strcmp(configdir, ""))
- {
- // Use the current directory, just like configdir.
-
- savegamedir = strdup("");
- }
- else
- {
- // Directory for savegames
-
- iwad_name = SaveGameIWADName();
-
- if (iwad_name == NULL)
- {
- iwad_name = "unknown.wad";
- }
-
- savegamedir = Z_Malloc(strlen(configdir) + 30, PU_STATIC, 0);
- sprintf(savegamedir, "%ssavegames%c%s%c", configdir,
- DIR_SEPARATOR, iwad_name, DIR_SEPARATOR);
-
- M_MakeDirectory(savegamedir);
- }
-}
-
-// Strings for dehacked replacements of the startup banner
-//
-// These are from the original source: some of them are perhaps
-// not used in any dehacked patches
-
-static char *banners[] =
-{
- // doom1.wad
- " "
- "DOOM Shareware Startup v%i.%i"
- " ",
- // doom.wad
- " "
- "DOOM Registered Startup v%i.%i"
- " ",
- // Registered DOOM uses this
- " "
- "DOOM System Startup v%i.%i"
- " ",
- // doom.wad (Ultimate DOOM)
- " "
- "The Ultimate DOOM Startup v%i.%i"
- " ",
- // doom2.wad
- " "
- "DOOM 2: Hell on Earth v%i.%i"
- " ",
- // tnt.wad
- " "
- "DOOM 2: TNT - Evilution v%i.%i"
- " ",
- // plutonia.wad
- " "
- "DOOM 2: Plutonia Experiment v%i.%i"
- " ",
-};
-
-//
-// Get game name: if the startup banner has been replaced, use that.
-// Otherwise, use the name given
-//
-
-static char *GetGameName(char *gamename)
-{
- size_t i;
- char *deh_sub;
-
- for (i=0; i<arrlen(banners); ++i)
- {
- // Has the banner been replaced?
-
- deh_sub = DEH_String(banners[i]);
-
- if (deh_sub != banners[i])
- {
- // Has been replaced
- // We need to expand via printf to include the Doom version
- // number
- // We also need to cut off spaces to get the basic name
-
- gamename = Z_Malloc(strlen(deh_sub) + 10, PU_STATIC, 0);
- sprintf(gamename, deh_sub, DOOM_VERSION / 100, DOOM_VERSION % 100);
-
- while (gamename[0] != '\0' && isspace(gamename[0]))
- strcpy(gamename, gamename+1);
-
- while (gamename[0] != '\0' && isspace(gamename[strlen(gamename)-1]))
- gamename[strlen(gamename) - 1] = '\0';
-
- return gamename;
- }
- }
-
- return gamename;
-}
-
-
-//
-// Find out what version of Doom is playing.
-//
-
-void D_IdentifyVersion(void)
-{
- // gamemission is set up by the D_FindIWAD function. But if
- // we specify '-iwad', we have to identify using
- // IdentifyIWADByName. However, if the iwad does not match
- // any known IWAD name, we may have a dilemma. Try to
- // identify by its contents.
-
- if (gamemission == none)
- {
- unsigned int i;
-
- for (i=0; i<numlumps; ++i)
- {
- if (!strncasecmp(lumpinfo[i].name, "MAP01", 8))
- {
- gamemission = doom2;
- break;
- }
- else if (!strncasecmp(lumpinfo[i].name, "E1M1", 8))
- {
- gamemission = doom;
- break;
- }
- }
-
- if (gamemission == none)
- {
- // Still no idea. I don't think this is going to work.
-
- I_Error("Unknown or invalid IWAD file.");
- }
- }
-
- // Make sure gamemode is set up correctly
-
- if (gamemission == doom)
- {
- // Doom 1. But which version?
-
- if (W_CheckNumForName("E4M1") > 0)
- {
- // Ultimate Doom
-
- gamemode = retail;
- }
- else if (W_CheckNumForName("E3M1") > 0)
- {
- gamemode = registered;
- }
- else
- {
- gamemode = shareware;
- }
- }
- else
- {
- // Doom 2 of some kind.
-
- gamemode = commercial;
- }
-}
-
-// Set the gamedescription string
-
-void D_SetGameDescription(void)
-{
- gamedescription = "Unknown";
-
- if (gamemission == doom)
- {
- // Doom 1. But which version?
-
- if (gamemode == retail)
- {
- // Ultimate Doom
-
- gamedescription = GetGameName("The Ultimate DOOM");
- }
- else if (gamemode == registered)
- {
- gamedescription = GetGameName("DOOM Registered");
- }
- else if (gamemode == shareware)
- {
- gamedescription = GetGameName("DOOM Shareware");
- }
- }
- else
- {
- // Doom 2 of some kind. But which mission?
-
- if (gamemission == doom2)
- gamedescription = GetGameName("DOOM 2: Hell on Earth");
- else if (gamemission == pack_plut)
- gamedescription = GetGameName("DOOM 2: Plutonia Experiment");
- else if (gamemission == pack_tnt)
- gamedescription = GetGameName("DOOM 2: TNT - Evilution");
- }
-}
-
// Clever hack: Setup can invoke Doom to determine which IWADs are installed.
// Doom searches install paths and exits with the return code being a
// bitmask of the installed IWAD files.
-void D_FindInstalledIWADs(void)
+void D_FindInstalledIWADs(iwad_t *iwads)
{
unsigned int i;
int result;
diff --git a/src/doom/d_iwad.h b/src/d_iwad.h
index 281d3467..456f52ac 100644
--- a/src/doom/d_iwad.h
+++ b/src/d_iwad.h
@@ -27,13 +27,18 @@
#ifndef __D_IWAD__
#define __D_IWAD__
+#include "d_mode.h"
+
+typedef struct
+{
+ char *name;
+ GameMission_t mission;
+} iwad_t;
+
char *D_FindWADByName(char *filename);
char *D_TryFindWADByName(char *filename);
-char *D_FindIWAD(void);
-void D_SetSaveGameDir(void);
-void D_IdentifyVersion(void);
-void D_SetGameDescription(void);
-void D_FindInstalledIWADs(void);
+char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission);
+void D_FindInstalledIWADs(iwad_t *iwads);
#endif
diff --git a/src/d_mode.h b/src/d_mode.h
index b3295ffe..b7214737 100644
--- a/src/d_mode.h
+++ b/src/d_mode.h
@@ -28,6 +28,8 @@
#ifndef __D_MODE__
#define __D_MODE__
+#include "doomtype.h"
+
// The "mission" controls what game we are playing.
typedef enum
diff --git a/src/doom/Makefile.am b/src/doom/Makefile.am
index 5982721f..7b7073b6 100644
--- a/src/doom/Makefile.am
+++ b/src/doom/Makefile.am
@@ -6,7 +6,6 @@ SOURCE_FILES= \
am_map.c am_map.h \
d_englsh.h \
d_items.c d_items.h \
-d_iwad.c d_iwad.h \
d_main.c d_main.h \
d_net.c d_net.h \
doomdata.h \
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index 1a778730..419e871c 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -586,8 +586,234 @@ void D_StartTitle (void)
D_AdvanceDemo ();
}
+static iwad_t iwads[] =
+{
+ {"doom2.wad", doom2},
+ {"plutonia.wad", pack_plut},
+ {"tnt.wad", pack_tnt},
+ {"doom.wad", doom},
+ {"doom1.wad", doom},
+ {"chex.wad", doom},
+ {NULL, none},
+};
+
+// Strings for dehacked replacements of the startup banner
+//
+// These are from the original source: some of them are perhaps
+// not used in any dehacked patches
+
+static char *banners[] =
+{
+ // doom1.wad
+ " "
+ "DOOM Shareware Startup v%i.%i"
+ " ",
+ // doom.wad
+ " "
+ "DOOM Registered Startup v%i.%i"
+ " ",
+ // Registered DOOM uses this
+ " "
+ "DOOM System Startup v%i.%i"
+ " ",
+ // doom.wad (Ultimate DOOM)
+ " "
+ "The Ultimate DOOM Startup v%i.%i"
+ " ",
+ // doom2.wad
+ " "
+ "DOOM 2: Hell on Earth v%i.%i"
+ " ",
+ // tnt.wad
+ " "
+ "DOOM 2: TNT - Evilution v%i.%i"
+ " ",
+ // plutonia.wad
+ " "
+ "DOOM 2: Plutonia Experiment v%i.%i"
+ " ",
+};
+
+//
+// Get game name: if the startup banner has been replaced, use that.
+// Otherwise, use the name given
+//
+
+static char *GetGameName(char *gamename)
+{
+ size_t i;
+ char *deh_sub;
+
+ for (i=0; i<arrlen(banners); ++i)
+ {
+ // Has the banner been replaced?
+
+ deh_sub = DEH_String(banners[i]);
+
+ if (deh_sub != banners[i])
+ {
+ // Has been replaced
+ // We need to expand via printf to include the Doom version
+ // number
+ // We also need to cut off spaces to get the basic name
+
+ gamename = Z_Malloc(strlen(deh_sub) + 10, PU_STATIC, 0);
+ sprintf(gamename, deh_sub, DOOM_VERSION / 100, DOOM_VERSION % 100);
+
+ while (gamename[0] != '\0' && isspace(gamename[0]))
+ strcpy(gamename, gamename+1);
+
+ while (gamename[0] != '\0' && isspace(gamename[strlen(gamename)-1]))
+ gamename[strlen(gamename) - 1] = '\0';
+
+ return gamename;
+ }
+ }
+
+ return gamename;
+}
+
+//
+// Find out what version of Doom is playing.
+//
+
+void D_IdentifyVersion(void)
+{
+ // gamemission is set up by the D_FindIWAD function. But if
+ // we specify '-iwad', we have to identify using
+ // IdentifyIWADByName. However, if the iwad does not match
+ // any known IWAD name, we may have a dilemma. Try to
+ // identify by its contents.
+
+ if (gamemission == none)
+ {
+ unsigned int i;
+
+ for (i=0; i<numlumps; ++i)
+ {
+ if (!strncasecmp(lumpinfo[i].name, "MAP01", 8))
+ {
+ gamemission = doom2;
+ break;
+ }
+ else if (!strncasecmp(lumpinfo[i].name, "E1M1", 8))
+ {
+ gamemission = doom;
+ break;
+ }
+ }
+
+ if (gamemission == none)
+ {
+ // Still no idea. I don't think this is going to work.
+
+ I_Error("Unknown or invalid IWAD file.");
+ }
+ }
+
+ // Make sure gamemode is set up correctly
+
+ if (gamemission == doom)
+ {
+ // Doom 1. But which version?
+ if (W_CheckNumForName("E4M1") > 0)
+ {
+ // Ultimate Doom
+
+ gamemode = retail;
+ }
+ else if (W_CheckNumForName("E3M1") > 0)
+ {
+ gamemode = registered;
+ }
+ else
+ {
+ gamemode = shareware;
+ }
+ }
+ else
+ {
+ // Doom 2 of some kind.
+
+ gamemode = commercial;
+ }
+}
+
+// Set the gamedescription string
+
+void D_SetGameDescription(void)
+{
+ gamedescription = "Unknown";
+
+ if (gamemission == doom)
+ {
+ // Doom 1. But which version?
+
+ if (gamemode == retail)
+ {
+ // Ultimate Doom
+
+ gamedescription = GetGameName("The Ultimate DOOM");
+ }
+ else if (gamemode == registered)
+ {
+ gamedescription = GetGameName("DOOM Registered");
+ }
+ else if (gamemode == shareware)
+ {
+ gamedescription = GetGameName("DOOM Shareware");
+ }
+ }
+ else
+ {
+ // Doom 2 of some kind. But which mission?
+
+ if (gamemission == doom2)
+ gamedescription = GetGameName("DOOM 2: Hell on Earth");
+ else if (gamemission == pack_plut)
+ gamedescription = GetGameName("DOOM 2: Plutonia Experiment");
+ else if (gamemission == pack_tnt)
+ gamedescription = GetGameName("DOOM 2: TNT - Evilution");
+ }
+}
+
+static void SetSaveGameDir(char *iwad_filename)
+{
+ char *sep;
+ char *basefile;
+
+ // Extract the base filename
+
+ sep = strrchr(iwad_filename, DIR_SEPARATOR);
+
+ if (sep == NULL)
+ {
+ basefile = iwad_filename;
+ }
+ else
+ {
+ basefile = sep + 1;
+ }
+
+ // eg. ~/.chocolate-doom/savegames/doom2.wad/
+
+ savegamedir = malloc(strlen(configdir) + strlen(basefile) + 10);
+ sprintf(savegamedir, "%ssavegames%c%s%c",
+ configdir, DIR_SEPARATOR, basefile, DIR_SEPARATOR);
+}
+
+// Check if the IWAD file is the Chex Quest IWAD.
+// Returns true if this is chex.wad.
+
+static boolean CheckChex(char *iwadname)
+{
+ char *chex_iwadname = "chex.wad";
+ return (strlen(iwadname) > strlen(chex_iwadname)
+ && !strcasecmp(iwadname + strlen(iwadname) - strlen(chex_iwadname),
+ chex_iwadname));
+}
// print title for every printed line
char title[128];
@@ -711,9 +937,11 @@ static void InitGameVersion(void)
{
// Determine automatically
- if (gameversion == exe_chex)
+ if (CheckChex(iwadfile))
{
- // Already determined
+ // chex.exe - identified by iwad filename
+
+ gameversion = exe_chex;
}
else if (gamemode == shareware || gamemode == registered)
{
@@ -833,7 +1061,7 @@ void D_DoomMain (void)
if (M_CheckParm("-findiwads") > 0)
{
- D_FindInstalledIWADs();
+ D_FindInstalledIWADs(iwads);
}
// print banner
@@ -890,7 +1118,7 @@ void D_DoomMain (void)
DEH_Init();
#endif
- iwadfile = D_FindIWAD();
+ iwadfile = D_FindIWAD(iwads, &gamemission);
// None found?
@@ -1259,7 +1487,7 @@ void D_DoomMain (void)
InitGameVersion();
LoadChexDeh();
D_SetGameDescription();
- D_SetSaveGameDir();
+ SetSaveGameDir(iwadfile);
// Check for -file in shareware
if (modifiedgame)
diff --git a/src/heretic/d_main.c b/src/heretic/d_main.c
index 19944c21..669d7b3d 100644
--- a/src/heretic/d_main.c
+++ b/src/heretic/d_main.c
@@ -29,6 +29,7 @@
#include "config.h"
#include "ct_chat.h"
#include "doomdef.h"
+#include "d_iwad.h"
#include "i_system.h"
#include "i_video.h"
#include "m_argv.h"
@@ -434,8 +435,6 @@ void D_CheckRecordFrom(void)
===============
*/
-#define MAXWADFILES 20
-
// MAPDIR should be defined as the directory that holds development maps
// for the -wart # # command
@@ -443,14 +442,15 @@ void D_CheckRecordFrom(void)
#define SHAREWAREWADNAME "heretic1.wad"
-char *wadfiles[MAXWADFILES] = {
- "heretic.wad",
+static iwad_t iwads[] = {
+ { "heretic.wad", heretic },
+ { "heretic1.wad", heretic },
+ { NULL, none },
};
-char *basedefault = "heretic.cfg";
+char *iwadfile;
-char exrnwads[80];
-char exrnwads2[80];
+char *basedefault = "heretic.cfg";
void wadprintf(void)
{
@@ -468,41 +468,15 @@ void wadprintf(void)
#endif
}
-void D_AddFile(char *file)
+boolean D_AddFile(char *file)
{
- int numwadfiles;
- char *new;
-// char text[256];
-
- for (numwadfiles = 0; wadfiles[numwadfiles]; numwadfiles++);
- new = malloc(strlen(file) + 1);
- strcpy(new, file);
- if (strlen(exrnwads) + strlen(file) < 78)
- {
- if (strlen(exrnwads))
- {
- strcat(exrnwads, ", ");
- }
- else
- {
- strcpy(exrnwads, "External Wadfiles: ");
- }
- strcat(exrnwads, file);
- }
- else if (strlen(exrnwads2) + strlen(file) < 79)
- {
- if (strlen(exrnwads2))
- {
- strcat(exrnwads2, ", ");
- }
- else
- {
- strcpy(exrnwads2, " ");
- strcat(exrnwads, ",");
- }
- strcat(exrnwads2, file);
- }
- wadfiles[numwadfiles] = new;
+ wad_file_t *handle;
+
+ printf(" adding %s\n", file);
+
+ handle = W_AddFile(file);
+
+ return handle != NULL;
}
//==========================================================
@@ -789,13 +763,8 @@ static void D_Endoom(void)
void D_DoomMain(void)
{
- int i;
int p;
- int e;
- int m;
char file[256];
- FILE *fp;
- boolean devMap;
I_PrintBanner(PACKAGE_STRING);
@@ -813,17 +782,6 @@ void D_DoomMain(void)
startmap = 1;
autostart = false;
- // wadfiles[0] is a char * to the main wad
- fp = fopen(wadfiles[0], "rb");
- if (fp)
- {
- fclose(fp);
- }
- else
- { // Change to look for shareware wad
- wadfiles[0] = SHAREWAREWADNAME;
- }
-
// Check for -CDROM
cdrom = false;
#ifdef __WATCOMC__
@@ -834,48 +792,6 @@ void D_DoomMain(void)
}
#endif
- // -FILE [filename] [filename] ...
- // Add files to the wad list.
- p = M_CheckParm("-file");
- if (p)
- { // the parms after p are wadfile/lump names, until end of parms
- // or another - preceded parm
- while (++p != myargc && myargv[p][0] != '-')
- {
- D_AddFile(myargv[p]);
- }
- }
-
- // -DEVMAP <episode> <map>
- // Adds a map wad from the development directory to the wad list,
- // and sets the start episode and the start map.
- devMap = false;
- p = M_CheckParm("-devmap");
- if (p && p < myargc - 2)
- {
- e = myargv[p + 1][0];
- m = myargv[p + 2][0];
- sprintf(file, MAPDIR "E%cM%c.wad", e, m);
- D_AddFile(file);
- printf("DEVMAP: Episode %c, Map %c.\n", e, m);
- startepisode = e - '0';
- startmap = m - '0';
- autostart = true;
- devMap = true;
- }
-
- p = M_CheckParm("-playdemo");
- if (!p)
- {
- p = M_CheckParm("-timedemo");
- }
- if (p && p < myargc - 1)
- {
- sprintf(file, "%s.lmp", myargv[p + 1]);
- D_AddFile(file);
- printf("Playing demo %s.lmp.\n", myargv[p + 1]);
- }
-
//
// get skill / episode / map from parms
//
@@ -928,9 +844,38 @@ void D_DoomMain(void)
printf("W_Init: Init WADfiles.\n");
- for (i=0; wadfiles[i] != NULL; ++i)
+ iwadfile = D_FindIWAD(iwads, &gamemission);
+
+ if (iwadfile == NULL)
{
- W_AddFile(wadfiles[i]);
+ I_Error("Game mode indeterminate. No IWAD was found. Try specifying\n"
+ "one with the '-iwad' command line parameter.");
+ }
+
+ D_AddFile(iwadfile);
+
+ // -FILE [filename] [filename] ...
+ // Add files to the wad list.
+ p = M_CheckParm("-file");
+ if (p)
+ { // the parms after p are wadfile/lump names, until end of parms
+ // or another - preceded parm
+ while (++p != myargc && myargv[p][0] != '-')
+ {
+ D_AddFile(myargv[p]);
+ }
+ }
+
+ p = M_CheckParm("-playdemo");
+ if (!p)
+ {
+ p = M_CheckParm("-timedemo");
+ }
+ if (p && p < myargc - 1)
+ {
+ sprintf(file, "%s.lmp", myargv[p + 1]);
+ D_AddFile(file);
+ printf("Playing demo %s.lmp.\n", myargv[p + 1]);
}
if (W_CheckNumForName("E2M1") == -1)
@@ -1064,7 +1009,7 @@ void D_DoomMain(void)
}
// Check valid episode and map
- if ((autostart || netgame) && (devMap == false))
+ if (autostart || netgame)
{
if (M_ValidEpisodeMap(startepisode, startmap) == false)
{