summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--src/m_menu.c113
2 files changed, 77 insertions, 38 deletions
diff --git a/NEWS b/NEWS
index fd2e0d51..0e7d5a22 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@
Handle multiple replacements of the same sprite in a PWAD.
Support specifying a specific version to emulate via the command line
(-gameversion)
+ Fix help screen orderings and skull positions. Behave exactly as
+ the original executables do.
0.1.1 (2005-10-18):
Display startup "banners" if they have been modified through
diff --git a/src/m_menu.c b/src/m_menu.c
index 555337e4..612bb481 100644
--- a/src/m_menu.c
+++ b/src/m_menu.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: m_menu.c 204 2005-10-16 20:55:50Z fraggle $
+// $Id: m_menu.c 225 2005-10-29 21:38:55Z fraggle $
//
// Copyright(C) 1993-1996 Id Software, Inc.
// Copyright(C) 2005 Simon Howard
@@ -22,6 +22,10 @@
// 02111-1307, USA.
//
// $Log$
+// Revision 1.11 2005/10/29 21:38:55 fraggle
+// Fix help screen orderings and skull positions to make Chocolate Doom
+// behave exactly like the original executables.
+//
// Revision 1.10 2005/10/16 20:55:50 fraggle
// Fix the '-cdrom' command-line option.
//
@@ -65,7 +69,7 @@
//-----------------------------------------------------------------------------
static const char
-rcsid[] = "$Id: m_menu.c 204 2005-10-16 20:55:50Z fraggle $";
+rcsid[] = "$Id: m_menu.c 225 2005-10-29 21:38:55Z fraggle $";
#include <stdlib.h>
#include <ctype.h>
@@ -787,21 +791,58 @@ void M_QuickLoad(void)
//
void M_DrawReadThis1(void)
{
+ char *lumpname = "CREDIT";
+ int skullx = 330, skully = 175;
+
inhelpscreens = true;
- switch ( gamemode )
+
+ // Different versions of Doom 1.9 work differently
+
+ switch (gameversion)
{
- case commercial:
- V_DrawPatchDirect (0,0,0,W_CacheLumpName("HELP",PU_CACHE));
- break;
- case shareware:
- case registered:
- case retail:
- V_DrawPatchDirect (0,0,0,W_CacheLumpName("HELP1",PU_CACHE));
- break;
- default:
- break;
+ case exe_doom_1_9:
+ if (gamemode == commercial)
+ {
+ // Doom 2
+
+ lumpname = "HELP";
+
+ skullx = 330;
+ skully = 165;
+ }
+ else
+ {
+ // Doom 1
+ // HELP2 is the first screen shown in Doom 1
+
+ lumpname = "HELP2";
+
+ skullx = 280;
+ skully = 185;
+ }
+ break;
+
+ case exe_ultimate:
+
+ // Ultimate Doom always displays "HELP1".
+
+ lumpname = "HELP1";
+
+ break;
+
+ case exe_final:
+
+ // Final Doom always displays "HELP".
+
+ lumpname = "HELP";
+
+ break;
}
- return;
+
+ V_DrawPatchDirect (0, 0, 0, W_CacheLumpName(lumpname, PU_CACHE));
+
+ ReadDef1.x = skullx;
+ ReadDef1.y = skully;
}
@@ -812,21 +853,11 @@ void M_DrawReadThis1(void)
void M_DrawReadThis2(void)
{
inhelpscreens = true;
- switch ( gamemode )
- {
- case retail:
- case commercial:
- // This hack keeps us from having to change menus.
- V_DrawPatchDirect (0,0,0,W_CacheLumpName("CREDIT",PU_CACHE));
- break;
- case shareware:
- case registered:
- V_DrawPatchDirect (0,0,0,W_CacheLumpName("HELP2",PU_CACHE));
- break;
- default:
- break;
- }
- return;
+
+ // We only ever draw the second page if this is
+ // gameversion == exe_doom_1_9 and gamemode == registered
+
+ V_DrawPatchDirect(0, 0, 0, W_CacheLumpName("HELP1", PU_CACHE));
}
@@ -1071,8 +1102,20 @@ void M_ReadThis(int choice)
void M_ReadThis2(int choice)
{
- choice = 0;
- M_SetupNextMenu(&ReadDef2);
+ // Doom 1.9 had two menus when playing Doom 1
+ // All others had only one
+
+ if (gameversion == exe_doom_1_9 && gamemode != commercial)
+ {
+ choice = 0;
+ M_SetupNextMenu(&ReadDef2);
+ }
+ else
+ {
+ // Close the menu
+
+ M_FinishReadThis(0);
+ }
}
void M_FinishReadThis(int choice)
@@ -1914,17 +1957,11 @@ void M_Init (void)
switch ( gamemode )
{
case commercial:
- // This is used because DOOM 2 had only one HELP
- // page. I use CREDIT as second page now, but
- // kept this hack for educational purposes.
+ // Commercial has no "read this" entry.
MainMenu[readthis] = MainMenu[quitdoom];
MainDef.numitems--;
MainDef.y += 8;
NewDef.prevMenu = &MainDef;
- ReadDef1.routine = M_DrawReadThis1;
- ReadDef1.x = 330;
- ReadDef1.y = 165;
- ReadMenu1[0].routine = M_FinishReadThis;
break;
case shareware:
// Episode 2 and 3 are handled,