diff options
author | Simon Howard | 2008-12-03 18:54:36 +0000 |
---|---|---|
committer | Simon Howard | 2008-12-03 18:54:36 +0000 |
commit | 27f8ea9f5a210f055f443ef34017dd2412feb326 (patch) | |
tree | 86aa08b279f1295b19e30a9bd5cbe1163323351e /src/d_iwad.c | |
parent | 02f2b37c714aa44d82b7e311e03df39430706e69 (diff) | |
download | chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.tar.gz chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.tar.bz2 chocolate-doom-27f8ea9f5a210f055f443ef34017dd2412feb326.zip |
Centralise the list of IWAD files and use bitmasks to select which
mission types are valid.
Subversion-branch: /branches/raven-branch
Subversion-revision: 1405
Diffstat (limited to 'src/d_iwad.c')
-rw-r--r-- | src/d_iwad.c | 66 |
1 files changed, 32 insertions, 34 deletions
diff --git a/src/d_iwad.c b/src/d_iwad.c index a67a6d4f..e6ee2cf8 100644 --- a/src/d_iwad.c +++ b/src/d_iwad.c @@ -39,6 +39,19 @@ #include "w_wad.h" #include "z_zone.h" +static iwad_t iwads[] = +{ + { "doom2.wad", doom2 }, + { "plutonia.wad", pack_plut }, + { "tnt.wad", pack_tnt }, + { "doom.wad", doom }, + { "doom1.wad", doom }, + { "chex.wad", doom }, + { "heretic.wad", heretic }, + { "heretic1.wad", heretic }, + { "hexen.wad", hexen }, +}; + // Array of locations to search for IWAD files // // "128 IWAD search directories should be enough for anybody". @@ -320,16 +333,20 @@ static void CheckDOSDefaults(void) // Search a directory to try to find an IWAD // Returns the location of the IWAD if found, otherwise NULL. -static char *SearchDirectoryForIWAD(char *dir, iwad_t *iwads, - GameMission_t *mission) +static char *SearchDirectoryForIWAD(char *dir, int mask, GameMission_t *mission) { size_t i; - for (i=0; iwads[i].name != NULL; ++i) + for (i=0; i<arrlen(iwads); ++i) { char *filename; char *iwadname; + if ((iwads[i].mission & mask) == 0) + { + continue; + } + iwadname = DEH_String(iwads[i].name); filename = malloc(strlen(dir) + strlen(iwadname) + 3); @@ -359,17 +376,22 @@ static char *SearchDirectoryForIWAD(char *dir, iwad_t *iwads, // When given an IWAD with the '-iwad' parameter, // attempt to identify it by its name. -static GameMission_t IdentifyIWADByName(char *name, iwad_t *iwads) +static GameMission_t IdentifyIWADByName(char *name, int mask) { size_t i; GameMission_t mission; mission = none; - - for (i=0; iwads[i].name != NULL; ++i) + + for (i=0; i<arrlen(iwads); ++i) { char *iwadname; + // Only use supported missions: + + if ((iwads[i].mission & mask) == 0) + continue; + iwadname = DEH_String(iwads[i].name); if (strlen(name) < strlen(iwadname)) @@ -390,7 +412,7 @@ static GameMission_t IdentifyIWADByName(char *name, iwad_t *iwads) // // Add directories from the list in the DOOMWADPATH environment variable. -// +// static void AddDoomWadPath(void) { @@ -564,7 +586,7 @@ char *D_TryFindWADByName(char *filename) // should be executed (notably loading PWADs). // -char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission) +char *D_FindIWAD(int mask, GameMission_t *mission) { char *result; char *iwadfile; @@ -594,7 +616,7 @@ char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission) I_Error("IWAD file '%s' not found!", iwadfile); } - *mission = IdentifyIWADByName(result, iwads); + *mission = IdentifyIWADByName(result, mask); } else { @@ -606,34 +628,10 @@ char *D_FindIWAD(iwad_t *iwads, GameMission_t *mission) for (i=0; result == NULL && i<num_iwad_dirs; ++i) { - result = SearchDirectoryForIWAD(iwad_dirs[i], iwads, mission); + result = SearchDirectoryForIWAD(iwad_dirs[i], mask, mission); } } return result; } -// 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(iwad_t *iwads) -{ - unsigned int i; - int result; - - BuildIWADDirList(); - - result = 0; - - for (i=0; i<arrlen(iwads); ++i) - { - if (D_FindWADByName(iwads[i].name) != NULL) - { - result |= 1 << i; - } - } - - exit(result); -} - |