From d73a64228a6502ce68e1c9fd1cc5197863a50c7e Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sun, 16 Mar 2014 02:23:14 -0400 Subject: doom: Add -dehlump parameter to load DEHACKED lumps. Lots of otherwise Vanilla-compatible WADs contain DEHACKED lumps. Allow these to be loaded by adding a -dehlump command line parameter. Thanks to Fabian Greffrath for the suggestion (fixes #349). --- src/deh_main.c | 27 +++++++++++++++++++-------- src/deh_main.h | 4 ++-- src/doom/d_main.c | 27 ++++++++++++++++++++++++++- 3 files changed, 47 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/deh_main.c b/src/deh_main.c index 4bb3e383..20858f32 100644 --- a/src/deh_main.c +++ b/src/deh_main.c @@ -348,16 +348,20 @@ int DEH_LoadFile(char *filename) } // Load dehacked file from WAD lump. +// If allow_long is set, allow long strings and cheats just for this lump. -int DEH_LoadLump(int lumpnum) +int DEH_LoadLump(int lumpnum, boolean allow_long) { deh_context_t *context; + boolean long_strings, long_cheats; - // If it's in a lump, it's probably designed for a modern source port, - // so allow it to do long string and cheat replacements. - - deh_allow_long_strings = true; - deh_allow_long_cheats = true; + if (allow_long) + { + long_strings = deh_allow_long_strings; + long_cheats = deh_allow_long_cheats; + deh_allow_long_strings = true; + deh_allow_long_cheats = true; + } context = DEH_OpenLump(lumpnum); @@ -371,10 +375,17 @@ int DEH_LoadLump(int lumpnum) DEH_CloseFile(context); + // Restore old value of long flags. + if (allow_long) + { + deh_allow_long_strings = long_strings; + deh_allow_long_cheats = long_cheats; + } + return 1; } -int DEH_LoadLumpByName(char *name) +int DEH_LoadLumpByName(char *name, boolean allow_long) { int lumpnum; @@ -386,7 +397,7 @@ int DEH_LoadLumpByName(char *name) return 0; } - return DEH_LoadLump(lumpnum); + return DEH_LoadLump(lumpnum, allow_long); } // Checks the command line for -deh argument diff --git a/src/deh_main.h b/src/deh_main.h index ea9e42da..7e0abe2d 100644 --- a/src/deh_main.h +++ b/src/deh_main.h @@ -41,8 +41,8 @@ void DEH_Init(void); int DEH_LoadFile(char *filename); -int DEH_LoadLump(int lumpnum); -int DEH_LoadLumpByName(char *name); +int DEH_LoadLump(int lumpnum, boolean allow_long); +int DEH_LoadLumpByName(char *name, boolean allow_long); boolean DEH_ParseAssignment(char *line, char **variable_name, char **value); diff --git a/src/doom/d_main.c b/src/doom/d_main.c index 3badb4ad..4068f677 100644 --- a/src/doom/d_main.c +++ b/src/doom/d_main.c @@ -1050,7 +1050,7 @@ static void LoadHacxDeh(void) if (gameversion == exe_hacx) { - if (!DEH_LoadLumpByName("DEHACKED")) + if (!DEH_LoadLumpByName("DEHACKED", true)) { I_Error("DEHACKED lump not found. Please check that this is the " "Hacx v1.2 IWAD."); @@ -1425,6 +1425,31 @@ void D_DoomMain (void) I_PrintDivider(); } + // Load DEHACKED lumps from WAD files - but only if we give the right + // command line parameter. + + //! + // @category mod + // + // Load Dehacked patches from DEHACKED lumps contained in one of the + // loaded PWAD files. + // + if (M_ParmExists("-dehlump")) + { + int i, loaded = 0; + + for (i = 0; i < numlumps; ++i) + { + if (!strncmp(lumpinfo[i].name, "DEHACKED", 8)) + { + DEH_LoadLump(i, false); + loaded++; + } + } + + printf("Loaded %i DEHACKED lumps from WAD files.\n", loaded); + } + DEH_printf("I_Init: Setting up machine state.\n"); I_CheckIsScreensaver(); I_InitTimer(); -- cgit v1.2.3