From 61a42afe280565dfd294e812b57cb78d31a53104 Mon Sep 17 00:00:00 2001 From: Jan Date: Sat, 3 Dec 2022 12:44:33 +0100 Subject: [PATCH] Mark scriptstrings as used even when referencing them via zone pointer --- .../Generating/Templates/ZoneLoadTemplate.cpp | 5 +++++ src/ZoneLoading/Loading/AssetLoader.cpp | 16 ++++++++++++++-- src/ZoneLoading/Loading/AssetLoader.h | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp index 7b56ebb4..682cd0b1 100644 --- a/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp +++ b/src/ZoneCodeGeneratorLib/Generating/Templates/ZoneLoadTemplate.cpp @@ -649,6 +649,11 @@ class ZoneLoadTemplate::Internal final : BaseTemplate LINE(MakeMemberAccess(info, member, modifier)<< " = m_stream->ConvertOffsetToPointer("<m_is_script_string && loadType == MemberLoadType::ARRAY_POINTER) + { + LINE("MarkScriptStringArrayAsUsed(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");") + } + m_intendation--; LINE("}") } diff --git a/src/ZoneLoading/Loading/AssetLoader.cpp b/src/ZoneLoading/Loading/AssetLoader.cpp index 2480a327..b2fb1eaf 100644 --- a/src/ZoneLoading/Loading/AssetLoader.cpp +++ b/src/ZoneLoading/Loading/AssetLoader.cpp @@ -50,12 +50,24 @@ void AssetLoader::LoadScriptStringArray(const bool atStreamStart, const size_t c } } +void AssetLoader::MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, const size_t count) +{ + for (size_t index = 0; index < count; index++) + { + const auto scrString = scrStringArray[index]; + if (scrString >= m_zone->m_script_strings.Count()) + continue; + + m_used_script_strings.emplace(scrString); + } +} + XAssetInfoGeneric* AssetLoader::LinkAsset(std::string name, void* asset) { std::vector usedScriptStrings; - if(!m_used_script_strings.empty()) + if (!m_used_script_strings.empty()) { - for(auto scrString : m_used_script_strings) + for (auto scrString : m_used_script_strings) { usedScriptStrings.push_back(scrString); } diff --git a/src/ZoneLoading/Loading/AssetLoader.h b/src/ZoneLoading/Loading/AssetLoader.h index 35323925..6c7550f6 100644 --- a/src/ZoneLoading/Loading/AssetLoader.h +++ b/src/ZoneLoading/Loading/AssetLoader.h @@ -23,6 +23,7 @@ protected: scr_string_t UseScriptString(scr_string_t scrString); void LoadScriptStringArray(bool atStreamStart, size_t count); + void MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, size_t count); XAssetInfoGeneric* LinkAsset(std::string name, void* asset);