foxygit / doom Log in
commit 15c1f099b40db912932c1574e4e98ec49ee0368a
Merge: 7d5d1676 200b46f2
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Fri Jan 9 22:03:05 2009 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Fri Jan 9 22:03:05 2009 +0000

    Merge from trunk.

    Subversion-branch: /branches/raven-branch
    Subversion-revision: 1428

 src/doom/d_main.c | 15 ++++++++++++---
 src/w_file.c      |  6 +++---
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --cc src/doom/d_main.c
index 70518a75,849897fe..0bda5cbf
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@@ -591,223 -574,8 +591,232 @@@ void D_StartTitle (void
      D_AdvanceDemo ();
  }

 +// 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;
 +    }
 +
++    // ~/.chocolate-doom/savegames/
++
++    savegamedir = Z_Malloc(strlen(configdir) + 30, PU_STATIC, 0);
++    sprintf(savegamedir, "%ssavegames%c", configdir,
++                         DIR_SEPARATOR);
++
++    M_MakeDirectory(savegamedir);
++
 +    // 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);
++    sprintf(savegamedir + strlen(savegamedir), "%s%c",
++            basefile, DIR_SEPARATOR);
++
++    M_MakeDirectory(savegamedir);
 +}
 +
 +// 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];