shithub: choc

Download patch

ref: 76a7eebc335c6f57da589ee66971b850f0ec4c50
parent: b8d2d8bb8b3cf1b5475e8c9be292248f140b2126
author: Simon Howard <fraggle@gmail.com>
date: Tue Sep 20 17:53:05 EDT 2011

Add dedicated pack_chex and pack_hacx values for the Chex Quest and Hacx
IWADs.

Subversion-branch: /branches/v2-branch
Subversion-revision: 2390

--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -46,8 +46,8 @@
     { "tnt.wad",      pack_tnt,  commercial, "Final Doom: TNT: Evilution" },
     { "doom.wad",     doom,      retail,     "Doom" },
     { "doom1.wad",    doom,      shareware,  "Doom Shareware" },
-    { "chex.wad",     doom,      shareware,  "Chex Quest" },
-    { "hacx.wad",     doom2,     commercial, "Hacx" },
+    { "chex.wad",     pack_chex, shareware,  "Chex Quest" },
+    { "hacx.wad",     pack_hacx, commercial, "Hacx" },
     { "heretic.wad",  heretic,   retail,     "Heretic" },
     { "heretic1.wad", heretic,   shareware,  "Heretic Shareware" },
     { "hexen.wad",    hexen,     commercial, "Hexen" },
@@ -449,6 +449,7 @@
         if (!strcasecmp(name, iwads[i].name))
         {
             mission = iwads[i].mission;
+printf("identified %s: mission = %i\n", name, mission);
             break;
         }
     }
--- a/src/d_iwad.h
+++ b/src/d_iwad.h
@@ -32,7 +32,9 @@
 #define IWAD_MASK_DOOM    ((1 << doom)           \
                          | (1 << doom2)          \
                          | (1 << pack_tnt)       \
-                         | (1 << pack_plut))
+                         | (1 << pack_plut)      \
+                         | (1 << pack_chex)      \
+                         | (1 << pack_hacx))
 #define IWAD_MASK_HERETIC (1 << heretic)
 #define IWAD_MASK_HEXEN   (1 << hexen)
 #define IWAD_MASK_STRIFE  (1 << strife)
--- a/src/d_mode.c
+++ b/src/d_mode.c
@@ -38,6 +38,7 @@
     int episode;
     int map;
 } valid_modes[] = {
+    { pack_chex, shareware,  1, 5 },
     { doom,      shareware,  1, 9 },
     { doom,      registered, 3, 9 },
     { doom,      retail,     4, 9 },
@@ -44,6 +45,7 @@
     { doom2,     commercial, 1, 32 },
     { pack_tnt,  commercial, 1, 32 },
     { pack_plut, commercial, 1, 32 },
+    { pack_hacx, commercial, 1, 32 },
     { heretic,   shareware,  1, 9 },
     { heretic,   registered, 3, 9 },
     { heretic,   retail,     5, 9 },
@@ -127,9 +129,11 @@
     GameVersion_t version;
 } valid_versions[] = {
     { doom,     exe_doom_1_9 },
+    { doom,     exe_hacx },
     { doom,     exe_ultimate },
-    { doom,     exe_chex },
     { doom,     exe_final },
+    { doom,     exe_final2 },
+    { doom,     exe_chex },
     { heretic,  exe_heretic_1_3 },
     { hexen,    exe_hexen_1_1 },
     { strife,   exe_strife_1_2 },
@@ -141,7 +145,8 @@
 
     // All Doom variants can use the Doom versions.
 
-    if (mission == doom2 || mission == pack_plut || mission == pack_tnt)
+    if (mission == doom2 || mission == pack_plut || mission == pack_tnt
+     || mission == pack_hacx || mission == pack_chex)
     {
         mission = doom;
     }
@@ -166,11 +171,13 @@
     {
         case doom:
         case heretic:
+        case pack_chex:
             return true;
 
         case none:
         case hexen:
         case doom2:
+        case pack_hacx:
         case pack_tnt:
         case pack_plut:
         case strife:
--- a/src/d_mode.h
+++ b/src/d_mode.h
@@ -38,7 +38,9 @@
     doom2,           // Doom 2
     pack_tnt,        // Final Doom: TNT: Evilution
     pack_plut,       // Final Doom: The Plutonia Experiment
-    heretic,         // Heretic 
+    pack_chex,       // Chex Quest (modded doom)
+    pack_hacx,       // Hacx (modded doom2)
+    heretic,         // Heretic
     hexen,           // Hexen
     strife,          // Strife
 
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -721,7 +721,7 @@
 
     // Make sure gamemode is set up correctly
 
-    if (gamemission == doom)
+    if (logical_gamemission == doom)
     {
         // Doom 1.  But which version?
 
@@ -754,7 +754,7 @@
 {
     gamedescription = "Unknown";
 
-    if (gamemission == doom)
+    if (logical_gamemission == doom)
     {
         // Doom 1.  But which version?
 
@@ -777,39 +777,15 @@
     {
         // Doom 2 of some kind.  But which mission?
 
-        if (gamemission == doom2)
+        if (logical_gamemission == doom2)
             gamedescription = GetGameName("DOOM 2: Hell on Earth");
-        else if (gamemission == pack_plut)
+        else if (logical_gamemission == pack_plut)
             gamedescription = GetGameName("DOOM 2: Plutonia Experiment"); 
-        else if (gamemission == pack_tnt)
+        else if (logical_gamemission == pack_tnt)
             gamedescription = GetGameName("DOOM 2: TNT - Evilution");
     }
 }
 
-// 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));
-}
-
-// Check if the IWAD file is the Hacx IWAD.
-// Returns true if this is hacx.wad.
-
-static boolean CheckHacx(char *iwadname)
-{
-    char *hacx_iwadname = "hacx.wad";
-
-    return (strlen(iwadname) > strlen(hacx_iwadname)
-     && !strcasecmp(iwadname + strlen(iwadname) - strlen(hacx_iwadname),
-                    hacx_iwadname));
-}
-
 //      print title for every printed line
 char            title[128];
 
@@ -933,15 +909,15 @@
     {
         // Determine automatically
 
-        if (CheckChex(iwadfile))
+        if (gamemission == pack_chex)
         {
             // chex.exe - identified by iwad filename
 
             gameversion = exe_chex;
         }
-        else if (CheckHacx(iwadfile))
+        else if (gamemission == pack_hacx)
         {
-            // hacx exe: identified by iwad filename
+            // hacx.exe: identified by iwad filename
 
             gameversion = exe_hacx;
         }
@@ -981,7 +957,8 @@
 
     // EXEs prior to the Final Doom exes do not support Final Doom.
 
-    if (gameversion < exe_final && gamemode == commercial)
+    if (gameversion < exe_final && gamemode == commercial
+     && (gamemission == pack_tnt || gamemission == pack_plut))
     {
         gamemission = doom2;
     }
@@ -1087,27 +1064,6 @@
     }
 }
 
-// Figure out what IWAD name to use for savegames.
-
-static char *SaveGameIWADName(void)
-{
-    // Chex quest hack
-
-    if (gameversion == exe_chex)
-    {
-        return "chex.wad";
-    }
-
-    // Hacx hack
-
-    if (gameversion == exe_hacx)
-    {
-        return "hacx.wad";
-    }
-
-    return D_SaveGameIWADName(gamemission);
-}
-
 //
 // D_DoomMain
 //
@@ -1422,7 +1378,7 @@
     LoadChexDeh();
     LoadHacxDeh();
     D_SetGameDescription();
-    savegamedir = M_GetSaveGameDir(SaveGameIWADName());
+    savegamedir = M_GetSaveGameDir(D_SaveGameIWADName(gamemission));
 
     // Check for -file in shareware
     if (modifiedgame)
--- a/src/doom/doomstat.h
+++ b/src/doom/doomstat.h
@@ -66,6 +66,15 @@
 extern GameVersion_t    gameversion;
 extern char            *gamedescription;
 
+// Convenience macro.
+// 'gamemission' can be equal to pack_chex or pack_hacx, but these are
+// just modified versions of doom and doom2, and should be interpreted
+// as the same most of the time.
+
+#define logical_gamemission                             \
+    (gamemission == pack_chex ? doom :                  \
+     gamemission == pack_hacx ? doom2 : gamemission)
+
 // Set if homebrew PWAD stuff has been added.
 extern  boolean	modifiedgame;
 
--- a/src/doom/f_finale.c
+++ b/src/doom/f_finale.c
@@ -122,7 +122,7 @@
     viewactive = false;
     automapactive = false;
 
-    if (gamemission == doom)
+    if (logical_gamemission == doom)
     {
         S_ChangeMusic(mus_victor, true);
     }
@@ -144,8 +144,8 @@
             screen->level = 5;
         }
 
-        if (gamemission == screen->mission
-         && (gamemission != doom || gameepisode == screen->episode)
+        if (logical_gamemission == screen->mission
+         && (logical_gamemission != doom || gameepisode == screen->episode)
          && gamemap == screen->level)
         {
             finaletext = screen->text;
--- a/src/doom/g_game.c
+++ b/src/doom/g_game.c
@@ -363,7 +363,7 @@
 {
     // Can't select the super shotgun in Doom 1.
 
-    if (weapon == wp_supershotgun && gamemission == doom)
+    if (weapon == wp_supershotgun && logical_gamemission == doom)
     {
         return false;
     }
--- a/src/doom/hu_stuff.c
+++ b/src/doom/hu_stuff.c
@@ -340,7 +340,7 @@
 		       hu_font,
 		       HU_FONTSTART);
     
-    switch ( gamemission )
+    switch ( logical_gamemission )
     {
       case doom:
 	s = HU_TITLE;
--- a/src/doom/m_menu.c
+++ b/src/doom/m_menu.c
@@ -1156,7 +1156,7 @@
 {
     char **endmsg;
 
-    if (gamemission == doom)
+    if (logical_gamemission == doom)
     {
         // Doom 1
 
--- a/src/doom/st_stuff.c
+++ b/src/doom/st_stuff.c
@@ -550,9 +550,9 @@
 	    S_ChangeMusic(musnum, 1);
 	}
       }
-      else if ( (gamemission == doom 
+      else if ( (logical_gamemission == doom 
                  && cht_CheckCheat(&cheat_noclip, ev->data2))
-             || (gamemission != doom 
+             || (logical_gamemission != doom 
                  && cht_CheckCheat(&cheat_commercial_noclip,ev->data2)))
       {	
         // Noclip cheat.