shithub: choc

Download patch

ref: ed4adeba77bf7dd803e7b944ee5f871965a0ca29
parent: b0519667da8edcea1592a0ba7b0dfa4b4709e034
author: Simon Howard <fraggle@gmail.com>
date: Tue Mar 8 20:06:07 EST 2011

Add support for the alternate version of the Final Doom executable that
fixes the demo loop crash (thanks Porsche Monty, Enjay).

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

--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,16 @@
 1.6.0 (2011-??-??):
 
+     * Added support for the alternate version of the Final Doom
+       executable included in some later versions of the Id Anthology.
+       This version fixed the demo loop crash that occurred with the
+       "original" Final Doom executable.
+
+       This executable can be selected on the command line with
+       -gameversion final2. It has been made the default when playing
+       with the Final Doom IWADs (the original behavior can be
+       selected with -gameversion final).  (thanks Porsche Monty,
+       Enjay).
+
     Compatibility:
      * Very short sound effects are not played, to better emulate the
        behavior of DMX in Vanilla Doom (thanks to Quasar for help in
--- a/NOT-BUGS
+++ b/NOT-BUGS
@@ -31,29 +31,6 @@
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
-== Game exits in demo loop when playing Final Doom ==
-
-When playing with the Final Doom IWAD files (tnt.wad, plutonia.wad),
-if you leave the game at the title screen to play through the demo
-loop, it will eventually exit with the following error message:
-
-    W_GetNumForName: demo4 not found!
-
-This is the same behavior as the Vanilla executables that were
-bundled with Final Doom.  When Ultimate Doom was developed, a fourth
-demo was added to the demo loop, and this change was retained in the
-Final Doom version of the executable.  However, the Final Doom IWADs
-do not include a fourth demo, so the game crashes.
-
-One way to work around this problem is to make the game emulate the
-original (pre-Ultimate Doom) v1.9 executable.  To do this, add the
-command line argument "-gameversion 1.9" when running the game.
-However, be aware this version does have some subtle differences that
-will affect the playback of Final Doom demos (lost soul bouncing,
-teleport behavior).
-
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
 == Game exits when accessing the options menu ==
 
 The game may exit with the message "Bad V_DrawPatch" when accessing
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -500,6 +500,9 @@
     // include a DEMO4 lump, so the game bombs out with an error
     // when it reaches this point in the demo sequence.
 
+    // However! There is an alternate version of Final Doom that
+    // includes a fixed executable.
+
     if (gameversion == exe_ultimate || gameversion == exe_final)
       demosequence = (demosequence+1)%7;
     else
@@ -659,6 +662,7 @@
     {"Hacx",                 "hacx",       exe_hacx},
     {"Ultimate Doom",        "ultimate",   exe_ultimate},
     {"Final Doom",           "final",      exe_final},
+    {"Final Doom (alt)",     "final2",     exe_final2},
     {"Chex Quest",           "chex",       exe_chex},
     { NULL,                  NULL,         0},
 };
@@ -675,7 +679,7 @@
     // @category compat
     //
     // Emulate a specific version of Doom.  Valid values are "1.9",
-    // "ultimate" and "final".
+    // "ultimate", "final", "final2", "hacx" and "chex".
     //
 
     p = M_CheckParmWithArgs("-gameversion", 1);
@@ -731,8 +735,10 @@
             else
             {
                 // Final Doom: tnt or plutonia
+                // Default to the "alt" version of the executable that
+                // fixes the demo loop behavior.
 
-                gameversion = exe_final;
+                gameversion = exe_final2;
             }
         }
     }
--- a/src/doomdef.h
+++ b/src/doomdef.h
@@ -107,6 +107,7 @@
     exe_hacx,       // Hacx executable (Doom 1.9 with patch applied)
     exe_ultimate,   // Ultimate Doom (retail)
     exe_final,      // Final Doom
+    exe_final2,     // Final Doom (alternate exe)
     exe_chex,       // Chex Quest executable (based on Final Doom)
 } GameVersion_t;
 
--- a/src/doomstat.c
+++ b/src/doomstat.c
@@ -32,7 +32,7 @@
 // Game Mode - identify IWAD as shareware, retail etc.
 GameMode_t gamemode = indetermined;
 GameMission_t	gamemission = doom;
-GameVersion_t   gameversion = exe_final;
+GameVersion_t   gameversion = exe_final2;
 char *gamedescription;
 
 // Set if homebrew PWAD stuff has been added.
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -820,6 +820,7 @@
             break;
 
         case exe_final:
+        case exe_final2:
 
             // Final Doom always displays "HELP".