From 7916cebdc19ad19899ee919b37840248709584ee Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 15 Jul 2019 21:23:46 +0200 Subject: [PATCH] - merged the Hacx extra stuff into zd_extra.pk3 and added the ability to inject data into the resource directory after the IWAD so that the base resources can provide content that can override IWAD data if broken or not usable. Hacx in particular needs this to fix a handful of buggy actors and to override the IWAD's MAPINFO which is not localizable. --- CMakeLists.txt | 1 - src/gamedata/w_wad.cpp | 38 +++++++++++++++++++++++++++++++++ src/gamedata/w_wad.h | 1 + wadsrc/static/iwadinfo.txt | 1 - wadsrc_hacxextra/CMakeLists.txt | 3 --- 5 files changed, 39 insertions(+), 5 deletions(-) delete mode 100644 wadsrc_hacxextra/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b5f72c2c..7860358ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -408,7 +408,6 @@ add_subdirectory( wadsrc ) add_subdirectory( wadsrc_bm ) add_subdirectory( wadsrc_lights ) add_subdirectory( wadsrc_extra ) -add_subdirectory( wadsrc_hacxextra ) add_subdirectory( src ) if( NOT CMAKE_CROSSCOMPILING ) diff --git a/src/gamedata/w_wad.cpp b/src/gamedata/w_wad.cpp index 0d28b2a18..878ee2fd4 100644 --- a/src/gamedata/w_wad.cpp +++ b/src/gamedata/w_wad.cpp @@ -147,6 +147,7 @@ void FWadCollection::InitMultipleFiles (TArray &filenames, const TArray int baselump = NumLumps; AddFile (filenames[i]); } + MoveIWadModifiers(); NumLumps = LumpInfo.Size(); if (NumLumps == 0) @@ -1053,6 +1054,43 @@ void FWadCollection::FixMacHexen() } } +//========================================================================== +// +// MoveIWadModifiers +// +// Moves all content from the after_iwad subfolder of the internal +// resources to the first positions in the lump directory after the IWAD. +// Used to allow modifying content in the base files, this is needed +// so that Hacx and Harmony can override some content that clashes +// with localization. +// +//========================================================================== + +void FWadCollection::MoveIWadModifiers() +{ + TArray lumpsToMove; + + unsigned i; + for (i = 0; i < LumpInfo.Size(); i++) + { + auto& li = LumpInfo[i]; + if (li.wadnum >= GetIwadNum()) break; + if (li.lump->FullName.Left(11).CompareNoCase("after_iwad/") == 0) + { + lumpsToMove.Push(li); + LumpInfo.Delete(i--); + } + } + if (lumpsToMove.Size() == 0) return; + for (; i < LumpInfo.Size() && LumpInfo[i].wadnum <= Wads.GetMaxIwadNum(); i++); + for (auto& li : lumpsToMove) + { + li.lump->LumpNameSetup(li.lump->FullName.Mid(11)); + li.wadnum = Wads.GetMaxIwadNum(); // pretend this comes from the IWAD itself. + LumpInfo.Insert(i++, li); + } +} + //========================================================================== // // W_FindLump diff --git a/src/gamedata/w_wad.h b/src/gamedata/w_wad.h index 414174bd0..a51ac80c8 100644 --- a/src/gamedata/w_wad.h +++ b/src/gamedata/w_wad.h @@ -221,6 +221,7 @@ private: void RenameNerve(); void FixMacHexen(); void DeleteAll(); + void MoveIWadModifiers(); FileReader * GetFileReader(int wadnum); // Gets a FileReader object to the entire WAD }; diff --git a/wadsrc/static/iwadinfo.txt b/wadsrc/static/iwadinfo.txt index 7f699f7bf..a80db2180 100644 --- a/wadsrc/static/iwadinfo.txt +++ b/wadsrc/static/iwadinfo.txt @@ -82,7 +82,6 @@ IWad Mapinfo = "mapinfo/hacx.txt" MustContain = "MAP01", "HACX-R" BannerColors = "00 00 a8", "a8 a8 a8" - Load = ":hacx_gzdoom_stuff.pk3" DeleteLumps = "FONTDEFS" } diff --git a/wadsrc_hacxextra/CMakeLists.txt b/wadsrc_hacxextra/CMakeLists.txt deleted file mode 100644 index 9dfad4020..000000000 --- a/wadsrc_hacxextra/CMakeLists.txt +++ /dev/null @@ -1,3 +0,0 @@ -cmake_minimum_required( VERSION 2.8.7 ) - -add_pk3(hacx_gzdoom_stuff.pk3 ${CMAKE_CURRENT_SOURCE_DIR}/static)