summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Howard2014-03-16 02:23:14 -0400
committerSimon Howard2014-03-16 02:23:14 -0400
commitd73a64228a6502ce68e1c9fd1cc5197863a50c7e (patch)
tree9d06c190aebca18e3eee99c05dadb8d7489bb7a1 /src
parent9f955ea5b1f124554d58733238dff4da1d9f54c4 (diff)
downloadchocolate-doom-d73a64228a6502ce68e1c9fd1cc5197863a50c7e.tar.gz
chocolate-doom-d73a64228a6502ce68e1c9fd1cc5197863a50c7e.tar.bz2
chocolate-doom-d73a64228a6502ce68e1c9fd1cc5197863a50c7e.zip
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).
Diffstat (limited to 'src')
-rw-r--r--src/deh_main.c27
-rw-r--r--src/deh_main.h4
-rw-r--r--src/doom/d_main.c27
3 files changed, 47 insertions, 11 deletions
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();