shithub: choc

Download patch

ref: 006e890f57abda5615a76ae5525a4614425b3227
parent: 50cc0ee15d2db46ee12460ece957b33bb0a10b7f
author: Fabian Greffrath <fabian@greffrath.com>
date: Fri Feb 13 06:26:56 EST 2015

Identify the "shareware" version early on.

Following the concept of Chocolate Doom, D_IdentifyVersion and
D_SetGameDescription are introduced and called right after loading the
IWAD. The first one checks for the characteristics of the "shareware"
IWAD and sets gamemode accordingly, whereas the latter sets the
gamedescription string according to gamemode. This string is then used
in I_PrintStartupBanner() and I_SetWindowTitle(). So, the "shareware"
version identifies itself properly now.

I consider support for the 4 Level Hexen Demo pretty complete by now.

--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -93,6 +93,7 @@
 // PUBLIC DATA DEFINITIONS -------------------------------------------------
 
 GameMode_t gamemode;
+char *gamedescription;
 char *iwadfile;
 static char demolumpname[9];    // Demo lump to start playing.
 boolean nomonsters;             // checkparm of -nomonsters
@@ -252,6 +253,45 @@
     W_AddFile(filename);
 }
 
+// Find out what version of Hexen is playing.
+
+void D_IdentifyVersion(void)
+{
+    // The Hexen Shareware, ne 4 Level Demo Version, is missing the SKY1 lump
+    // and uses the SKY2 lump instead. Let's use this fact and the missing
+    // levels from MAP05 onward to identify it and set gamemode accordingly.
+
+    if (W_CheckNumForName("SKY1") == -1 &&
+        W_CheckNumForName("MAP05") == -1 )
+    {
+	gamemode = shareware;
+    }
+}
+
+// Set the gamedescription string.
+
+void D_SetGameDescription(void)
+{
+/*
+    NB: The 4 Level Demo Version actually prints a four-lined banner
+    (and indeed waits for a keypress):
+
+    Hexen:  Beyond Heretic
+
+    4 Level Demo Version
+    Press any key to continue.
+*/
+
+    if (gamemode == shareware)
+    {
+	gamedescription = "Hexen: 4 Level Demo Version";
+    }
+    else
+    {
+	gamedescription = "Hexen";
+    }
+}
+
 //==========================================================================
 //
 // H2_Main
@@ -331,22 +371,14 @@
 
     D_AddFile(iwadfile);
     W_CheckCorrectIWAD(hexen);
+    D_IdentifyVersion();
+    D_SetGameDescription();
     AdjustForMacIWAD();
 
     HandleArgs();
 
-    // The 4 Level Demo Version prints a four-lined banner here
-    // (and indeed waits for a keypress):
-    /*
-Hexen:  Beyond Heretic
+    I_PrintStartupBanner(gamedescription);
 
-4 Level Demo Version
-Press any key to continue.
-    */
-    // However, we currently only detect if we are running the 4 Level Demo Version
-    // at all much later in P_Init().
-    I_PrintStartupBanner("Hexen");
-
     ST_Message("MN_Init: Init menu system.\n");
     MN_Init();
 
@@ -673,7 +705,7 @@
         M_snprintf(filename, sizeof(filename), "debug%i.txt", consoleplayer);
         debugfile = fopen(filename, "w");
     }
-    I_SetWindowTitle("Hexen");
+    I_SetWindowTitle(gamedescription);
     I_GraphicsCheckCommandLine();
     I_SetGrabMouseCallback(D_GrabMouseCallback);
     I_InitGraphics();
--- a/src/hexen/p_setup.c
+++ b/src/hexen/p_setup.c
@@ -800,13 +800,9 @@
 
     mapMax = 1;
 
-    // The Hexen Shareware, ne 4-level Demo, is missing the SKY1 lump
-    // and uses the SKY2 lump instead. Let's use this fact to identify
-    // it and set gamemode accordingly
-    if (W_CheckNumForName(default_sky_name) == -1)
+    if (gamemode == shareware)
     {
 	default_sky_name = "SKY2";
-	gamemode = shareware;
     }
 
     // Put defaults into MapInfo[0]