From 27e9a22e43f3482dc360dad0819e661fa3b42ec0 Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 00:20:16 +0200 Subject: [PATCH 1/7] Allow loading assets from disk even if they're already in memory --- src/Components/Modules/AssetInterfaces/IXModel.cpp | 5 +++-- src/Components/Modules/ZoneBuilder.cpp | 3 +++ src/Components/Modules/ZoneBuilder.hpp | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/Components/Modules/AssetInterfaces/IXModel.cpp b/src/Components/Modules/AssetInterfaces/IXModel.cpp index cdcee206..39b49b6a 100644 --- a/src/Components/Modules/AssetInterfaces/IXModel.cpp +++ b/src/Components/Modules/AssetInterfaces/IXModel.cpp @@ -84,13 +84,14 @@ namespace Assets void IXModel::load(Game::XAssetHeader* header, const std::string& name, Components::ZoneBuilder::Zone* builder) { - if (!builder->isPrimaryAsset()) + Components::FileSystem::File modelFile(Utils::String::VA("xmodel/%s.iw4xModel", name.data())); + + if (!builder->isPrimaryAsset() && (Components::ZoneBuilder::MatchTechsetsDvar.get() || !modelFile.exists())) { header->model = Components::AssetHandler::FindOriginalAsset(this->getType(), name.data()).model; if (header->model) return; } - Components::FileSystem::File modelFile(Utils::String::VA("xmodel/%s.iw4xModel", name.data())); if (modelFile.exists()) { diff --git a/src/Components/Modules/ZoneBuilder.cpp b/src/Components/Modules/ZoneBuilder.cpp index be9004f5..58c70572 100644 --- a/src/Components/Modules/ZoneBuilder.cpp +++ b/src/Components/Modules/ZoneBuilder.cpp @@ -10,6 +10,9 @@ namespace Components bool ZoneBuilder::Terminate; std::thread ZoneBuilder::CommandThread; + Dvar::Var ZoneBuilder::MatchTechsetsDvar; + Dvar::Var ZoneBuilder::PreferDiskAssetsDvar; + ZoneBuilder::Zone::Zone(const std::string& name) : indexStart(0), externalSize(0), // Reserve 100MB by default. diff --git a/src/Components/Modules/ZoneBuilder.hpp b/src/Components/Modules/ZoneBuilder.hpp index 8b0c12f0..5c647816 100644 --- a/src/Components/Modules/ZoneBuilder.hpp +++ b/src/Components/Modules/ZoneBuilder.hpp @@ -130,6 +130,7 @@ namespace Components static std::vector> EndAssetTrace(); static Game::XAssetHeader GetEmptyAssetIfCommon(Game::XAssetType type, const std::string& name, Zone* builder); + static Dvar::Var PreferDiskAssetsDvar; private: static int StoreTexture(Game::GfxImageLoadDef **loadDef, Game::GfxImage *image); From 3d24252a168d18652bf47fb3566ec6b9e8f1543b Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 00:25:24 +0200 Subject: [PATCH 2/7] Register dvar --- src/Components/Modules/ZoneBuilder.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Components/Modules/ZoneBuilder.cpp b/src/Components/Modules/ZoneBuilder.cpp index 58c70572..efff6316 100644 --- a/src/Components/Modules/ZoneBuilder.cpp +++ b/src/Components/Modules/ZoneBuilder.cpp @@ -10,7 +10,6 @@ namespace Components bool ZoneBuilder::Terminate; std::thread ZoneBuilder::CommandThread; - Dvar::Var ZoneBuilder::MatchTechsetsDvar; Dvar::Var ZoneBuilder::PreferDiskAssetsDvar; ZoneBuilder::Zone::Zone(const std::string& name) : indexStart(0), externalSize(0), @@ -1525,6 +1524,8 @@ namespace Components Logger::Print("%s\n", json11::Json(images).dump().data()); Logger::Print("------------------- END IWI DUMP -------------------\n"); }); + + ZoneBuilder::PreferDiskAssetsDvar = Dvar::Register("zb_prefer_disk_assets", false, Game::DVAR_FLAG_NONE, "Should zonebuilder prefer in-memory assets (requirements) or disk assets, when both are present?"); } } From 1f89c55a78bf4ae625698b21cf272e1c6fbd42f0 Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 01:07:53 +0200 Subject: [PATCH 3/7] whoopsie --- src/Components/Modules/AssetInterfaces/IXModel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/AssetInterfaces/IXModel.cpp b/src/Components/Modules/AssetInterfaces/IXModel.cpp index 39b49b6a..6f27ab5a 100644 --- a/src/Components/Modules/AssetInterfaces/IXModel.cpp +++ b/src/Components/Modules/AssetInterfaces/IXModel.cpp @@ -86,7 +86,7 @@ namespace Assets { Components::FileSystem::File modelFile(Utils::String::VA("xmodel/%s.iw4xModel", name.data())); - if (!builder->isPrimaryAsset() && (Components::ZoneBuilder::MatchTechsetsDvar.get() || !modelFile.exists())) + if (!builder->isPrimaryAsset() && (!Components::ZoneBuilder::PreferDiskAssetsDvar.get() || !modelFile.exists())) { header->model = Components::AssetHandler::FindOriginalAsset(this->getType(), name.data()).model; if (header->model) return; From ad9222a3cabda9678500acfa9704d442b835af95 Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 01:08:02 +0200 Subject: [PATCH 4/7] Better techset matching --- src/Components/Modules/AssetInterfaces/IMaterial.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Components/Modules/AssetInterfaces/IMaterial.cpp b/src/Components/Modules/AssetInterfaces/IMaterial.cpp index 886258bc..049d3dec 100644 --- a/src/Components/Modules/AssetInterfaces/IMaterial.cpp +++ b/src/Components/Modules/AssetInterfaces/IMaterial.cpp @@ -41,14 +41,13 @@ namespace Assets {"wc_unlit_falloff_add", "wc_unlit_falloff_add_lin_ua"}, {"wc_unlit", "wc_unlit_replace_lin"}, {"wc_unlit_alphatest", "wc_unlit_blend_lin"}, - {"wc_unlit_multiply_lin", "wc_unlit_multiply_lin"}, {"wc_unlit_blend", "wc_unlit_blend_lin_ua"}, {"wc_unlit_replace", "wc_unlit_replace_lin"}, {"mc_unlit_replace", "mc_unlit_replace_lin"}, {"mc_unlit_nofog", "mc_unlit_blend_nofog_ua"}, - {"mc_unlit", "mc_unlit_blend_lin"}, - {"mc_unlit_alphatest", "mc_unlit_blend_lin"} + {"mc_unlit", "mc_unlit_replace_lin_nocast"}, + {"mc_unlit_alphatest", "mc_unlit_replace_lin_nocast"} /*, {"", ""}, {"", ""}, From cbc980e1c4a520640f8d9e18bd6e2938bc4f8f2c Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 19:24:48 +0200 Subject: [PATCH 5/7] Add log print for material state copy --- src/Components/Modules/AssetInterfaces/IMaterial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/AssetInterfaces/IMaterial.cpp b/src/Components/Modules/AssetInterfaces/IMaterial.cpp index 049d3dec..3e52cb3c 100644 --- a/src/Components/Modules/AssetInterfaces/IMaterial.cpp +++ b/src/Components/Modules/AssetInterfaces/IMaterial.cpp @@ -195,7 +195,7 @@ namespace Assets std::memcpy(asset->stateBitsEntry, header.material->stateBitsEntry, 48); asset->constantCount = header.material->constantCount; asset->constantTable = header.material->constantTable; - + Components::Logger::Print("For %s, copied constants & statebits from %s\n", asset->info.name, header.material->info.name); replacementFound = true; } } From a721818cf6f17fe0cf5c7f3cdc2af606d2611932 Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Mon, 6 Sep 2021 21:45:04 +0200 Subject: [PATCH 6/7] Better techswap for trees --- src/Components/Modules/AssetInterfaces/IMaterial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/AssetInterfaces/IMaterial.cpp b/src/Components/Modules/AssetInterfaces/IMaterial.cpp index 3e52cb3c..89abca3d 100644 --- a/src/Components/Modules/AssetInterfaces/IMaterial.cpp +++ b/src/Components/Modules/AssetInterfaces/IMaterial.cpp @@ -47,7 +47,7 @@ namespace Assets {"mc_unlit_replace", "mc_unlit_replace_lin"}, {"mc_unlit_nofog", "mc_unlit_blend_nofog_ua"}, {"mc_unlit", "mc_unlit_replace_lin_nocast"}, - {"mc_unlit_alphatest", "mc_unlit_replace_lin_nocast"} + {"mc_unlit_alphatest", "mc_unlit_blend_lin"} /*, {"", ""}, {"", ""}, From e83ed92ca9b75e4d7b0a74fcda6491790b38fbda Mon Sep 17 00:00:00 2001 From: Louvenarde Date: Sun, 12 Sep 2021 20:36:42 +0200 Subject: [PATCH 7/7] Added missing carentan DLC --- src/Components/Modules/Maps.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Components/Modules/Maps.cpp b/src/Components/Modules/Maps.cpp index 24ee1d5f..012b1d41 100644 --- a/src/Components/Modules/Maps.cpp +++ b/src/Components/Modules/Maps.cpp @@ -771,7 +771,7 @@ namespace Components Maps::AddDlc({ 6, "Freighter", {"mp_cargoship_sh"} }); Maps::AddDlc({ 7, "Resurrection Pack", {"mp_shipment_long", "mp_rust_long", "mp_firingrange"} }); Maps::AddDlc({ 8, "Recycled Pack", {"mp_bloc_sh", "mp_crash_tropical", "mp_estate_tropical", "mp_fav_tropical", "mp_storm_spring"} }); - Maps::AddDlc({ 9, "Classics Pack #3", {"mp_farm", "mp_backlot", "mp_pipeline", "mp_countdown", "mp_crash_snow"} }); + Maps::AddDlc({ 9, "Classics Pack #3", {"mp_farm", "mp_backlot", "mp_pipeline", "mp_countdown", "mp_crash_snow", "mp_carentan"}}); Maps::UpdateDlcStatus();