shithub: choc

Download patch

ref: a4707e1bf853117cd8d7d9f5634deff08cb97428
parent: 5dd09ed9c3406e3127b1bf04f07db5b5a9e3aeea
author: Simon Howard <[email protected]>
date: Sat Oct 8 15:33:48 EDT 2005

Allow dehacked patches to override the name of the game via the
startup banner.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 170

--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: d_main.c 168 2005-10-08 18:23:18Z fraggle $
+// $Id: d_main.c 170 2005-10-08 19:33:48Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.20  2005/10/08 19:33:48  fraggle
+// Allow dehacked patches to override the name of the game via the
+// startup banner.
+//
 // Revision 1.19  2005/10/08 18:23:18  fraggle
 // WAD merging code
 //
@@ -99,7 +103,7 @@
 //-----------------------------------------------------------------------------
 
 
-static const char rcsid[] = "$Id: d_main.c 168 2005-10-08 18:23:18Z fraggle $";
+static const char rcsid[] = "$Id: d_main.c 170 2005-10-08 19:33:48Z fraggle $";
 
 #define	BGCOLOR		7
 #define	FGCOLOR		8
@@ -756,7 +760,77 @@
     }
 }
 
+// Strings for dehacked replacements of the startup banner
+
+static char *banners[] = 
+{
+    // doom1.wad
+    "                            "
+    "DOOM Shareware Startup v%i.%i"
+    "                           ",
+    // doom.wad
+    "                            "
+    "DOOM Registered 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)
+{
+    int i;
+    char *deh_sub;
+    
+    for (i=0; i<sizeof(banners) / sizeof(*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.
 //
 
@@ -804,17 +878,17 @@
         {
             // Ultimate Doom
 
-            gamedescription = "The Ultimate DOOM";
+            gamedescription = GetGameName("The Ultimate DOOM");
             gamemode = retail;
         } 
         else if (W_CheckNumForName("E3M1") > 0)
         {
-            gamedescription = "DOOM Registered";
+            gamedescription = GetGameName("DOOM Registered");
             gamemode = registered;
         }
         else
         {
-            gamedescription = "DOOM Shareware";
+            gamedescription = GetGameName("DOOM Shareware");
             gamemode = shareware;
         }
     }
@@ -825,11 +899,11 @@
         gamemode = commercial;
 
         if (gamemission == doom2)
-            gamedescription = "DOOM 2: Hell on Earth";
+            gamedescription = GetGameName("DOOM 2: Hell on Earth");
         else if (gamemission == pack_plut)
-            gamedescription = "DOOM 2: Plutonia Experiment";
+            gamedescription = GetGameName("DOOM 2: Plutonia Experiment"); 
         else if (gamemission == pack_tnt)
-            gamedescription = "DOOM 2: TNT - Evilution";
+            gamedescription = GetGameName("DOOM 2: TNT - Evilution");
         else
             gamedescription = "DOOM 2: ?????????????";
     }
@@ -913,8 +987,9 @@
 void PrintBanner(char *msg)
 {
     int i;
+    int spaces = 35 - (strlen(msg) / 2);
 
-    for (i=0; i<35-(strlen(msg) / 2); ++i)
+    for (i=0; i<spaces; ++i)
         putchar(' ');
 
     puts(msg);
@@ -1051,6 +1126,9 @@
     printf ("Z_Init: Init zone memory allocation daemon. \n");
     Z_Init ();
 
+    printf("DEH_CheckCommandLine: initialise Dehacked support.\n");
+    DEH_CheckCommandLine();
+
     printf ("W_Init: Init WADfiles.\n");
     W_InitMultipleFiles (wadfiles);
 
@@ -1184,8 +1262,6 @@
 
     printf ("ST_Init: Init status bar.\n");
     ST_Init ();
-
-    DEH_CheckCommandLine();
 
     // start the apropriate game based on parms
     p = M_CheckParm ("-record");