From 99b8d3eadbbc0f37cc516328cd591644205877b6 Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Fri, 6 Dec 2024 12:39:46 +0700 Subject: [PATCH 1/2] load extras.wad before IWAD --- src/d_main.c | 12 ++++++++++++ src/w_wad.c | 11 +++++++++++ src/w_wad.h | 1 + 3 files changed, 24 insertions(+) diff --git a/src/d_main.c b/src/d_main.c index c5c5d0d83..50c65f474 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1829,8 +1829,20 @@ void D_DoomMain(void) LoadBaseFile(); + boolean extras_wad = false; + const char *extras_path = D_FindWADByName("extras.wad"); + if (extras_path) + { + extras_wad = W_ExtrasWad(extras_path); + } + IdentifyVersion(); + if (extras_wad) + { + array_push(wadfiles, "extras.wad"); + } + // [FG] emulate a specific version of Doom InitGameVersion(); diff --git a/src/w_wad.c b/src/w_wad.c index 9b9ffa0e3..fd2b7d042 100644 --- a/src/w_wad.c +++ b/src/w_wad.c @@ -151,6 +151,17 @@ static void AddDirs(w_module_t *module, w_handle_t handle, const char *base) } } +boolean W_ExtrasWad(const char *path) +{ + w_handle_t handle = {0}; + if (w_file_module.Open(path, &handle) == W_FILE) + { + array_clear(wadfiles); // don't register it before IWAD + return true; + } + return false; +} + boolean W_AddPath(const char *path) { static int priority; diff --git a/src/w_wad.h b/src/w_wad.h index 3119d7570..5ade162f2 100644 --- a/src/w_wad.h +++ b/src/w_wad.h @@ -112,6 +112,7 @@ extern void **lumpcache; extern const char **wadfiles; boolean W_InitBaseFile(const char *path); +boolean W_ExtrasWad(const char *path); void W_AddBaseDir(const char *path); boolean W_AddPath(const char *path); From 7c7d28556b8562a891fb39f1e9d2a9984fbe07cb Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Fri, 6 Dec 2024 15:34:34 +0700 Subject: [PATCH 2/2] fix memory leak --- src/d_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index 50c65f474..4fe60c917 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -1830,10 +1830,11 @@ void D_DoomMain(void) LoadBaseFile(); boolean extras_wad = false; - const char *extras_path = D_FindWADByName("extras.wad"); + char *extras_path = D_FindWADByName("extras.wad"); if (extras_path) { extras_wad = W_ExtrasWad(extras_path); + free(extras_path); } IdentifyVersion();