From 006e890f57abda5615a76ae5525a4614425b3227 Mon Sep 17 00:00:00 2001 From: Fabian Greffrath Date: Fri, 13 Feb 2015 11:26:56 +0100 Subject: 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. --- src/hexen/h2_main.c | 56 +++++++++++++++++++++++++++++++++++++++++------------ src/hexen/p_setup.c | 6 +----- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c index 185a6d70..62cd3d38 100644 --- a/src/hexen/h2_main.c +++ b/src/hexen/h2_main.c @@ -93,6 +93,7 @@ extern boolean askforquit; // 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 @@ static void D_AddFile(char *filename) 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,21 +371,13 @@ void D_DoomMain(void) 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 - -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"); + I_PrintStartupBanner(gamedescription); ST_Message("MN_Init: Init menu system.\n"); MN_Init(); @@ -673,7 +705,7 @@ void H2_GameLoop(void) 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(); diff --git a/src/hexen/p_setup.c b/src/hexen/p_setup.c index db9af228..428e6166 100644 --- a/src/hexen/p_setup.c +++ b/src/hexen/p_setup.c @@ -800,13 +800,9 @@ static void InitMapInfo(void) 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] -- cgit v1.2.3