ref: 41865b179684eaf812fc9682936d9b79320f5a1d
parent: 6667c664975d612d6eecf4893b621df624cfc72b
parent: b1a2bc043a92c4203b0c7e46b8589f14a57e48ae
author: Simon Howard <fraggle@soulsphere.org>
date: Sat Jan 29 13:45:45 EST 2022
Merge pull request #1418 from Acts19quiz/master_Acts19quiz Add detection and search for doom2f.wad and french.deh, respectively.
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -38,6 +38,7 @@
{ "tnt.wad", pack_tnt, commercial, "Final Doom: TNT: Evilution" },
{ "doom.wad", doom, retail, "Doom" },
{ "doom1.wad", doom, shareware, "Doom Shareware" },
+ { "doom2f.wad", doom2, commercial, "Doom II: L'Enfer sur Terre" },
{ "chex.wad", pack_chex, retail, "Chex Quest" },
{ "hacx.wad", pack_hacx, commercial, "Hacx" },
{ "freedoom2.wad", doom2, commercial, "Freedoom: Phase 2" },
--- a/src/d_mode.h
+++ b/src/d_mode.h
@@ -35,6 +35,7 @@
heretic, // Heretic
hexen, // Hexen
strife, // Strife
+ doom2f, // Doom 2: L'Enfer sur Terre
none
} GameMission_t;
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -1183,6 +1183,14 @@
I_Endoom(endoom);
}
+boolean IsFrenchIWAD(void)
+{
+ return (gamemission == doom2 && W_CheckNumForName("M_RDTHIS") < 0
+ && W_CheckNumForName("M_EPISOD") < 0 && W_CheckNumForName("M_EPI1") < 0
+ && W_CheckNumForName("M_EPI2") < 0 && W_CheckNumForName("M_EPI3") < 0
+ && W_CheckNumForName("WIOSTF") < 0 && W_CheckNumForName("WIOBJ") >= 0);
+}
+
// Load dehacked patches needed for certain IWADs.
static void LoadIwadDeh(void)
{
@@ -1238,6 +1246,42 @@
if (!DEH_LoadFile(chex_deh))
{
I_Error("Failed to load chex.deh needed for emulating chex.exe.");
+ }
+ }
+
+ if (IsFrenchIWAD())
+ {
+ char *french_deh = NULL;
+ char *dirname;
+
+ // Look for french.deh in the same directory as the IWAD file.
+ dirname = M_DirName(iwadfile);
+ french_deh = M_StringJoin(dirname, DIR_SEPARATOR_S, "french.deh", NULL);
+ printf("French version\n");
+ free(dirname);
+
+ // If the dehacked patch isn't found, try searching the WAD
+ // search path instead. We might find it...
+ if (!M_FileExists(french_deh))
+ {
+ free(french_deh);
+ french_deh = D_FindWADByName("french.deh");
+ }
+
+ // Still not found?
+ if (french_deh == NULL)
+ {
+ I_Error("Unable to find French Doom II dehacked file\n"
+ "(french.deh). The dehacked file is required in order to\n"
+ "emulate French doom2.exe correctly. It can be found in\n"
+ "your nearest /idgames repository mirror at:\n\n"
+ " utils/exe_edit/patches/french.zip");
+ }
+
+ if (!DEH_LoadFile(french_deh))
+ {
+ I_Error("Failed to load french.deh needed for emulating French\n"
+ "doom2.exe.");
}
}
}