diff --git a/src/sl/saveload.cpp b/src/sl/saveload.cpp index 1f77e122e8..464f0771e4 100644 --- a/src/sl/saveload.cpp +++ b/src/sl/saveload.cpp @@ -2456,6 +2456,21 @@ SaveLoadTableData SlTableHeaderOrRiff(const NamedSaveLoadTable &slt) return saveloads; } +SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTable &slt) +{ + SaveLoadTableData saveloads; + SlFilterNamedSaveLoadTable(slt, saveloads); + for (auto &sld : saveloads) { + if (sld.cmd == SL_STRUCTLIST || sld.cmd == SL_STRUCT) { + std::unique_ptr handler = sld.struct_handler_factory(); + sld.struct_handler = handler.get(); + saveloads.struct_handlers.push_back(std::move(handler)); + sld.struct_handler->table_data = SlPrepareNamedSaveLoadTableForPtrOrNull(sld.struct_handler->GetDescription()); + } + } + return saveloads; +} + void SlSaveTableObjectChunk(const SaveLoadTable &slt) { SlSetArrayIndex(0); diff --git a/src/sl/saveload.h b/src/sl/saveload.h index 1fb1d74373..c448f6beee 100644 --- a/src/sl/saveload.h +++ b/src/sl/saveload.h @@ -1094,6 +1094,7 @@ bool SlIsTableChunk(); void SlSkipTableHeader(); SaveLoadTableData SlTableHeader(const NamedSaveLoadTable &slt, TableHeaderSpecialHandler *special_handler = nullptr); SaveLoadTableData SlTableHeaderOrRiff(const NamedSaveLoadTable &slt); +SaveLoadTableData SlPrepareNamedSaveLoadTableForPtrOrNull(const NamedSaveLoadTable &slt); void SlSaveTableObjectChunk(const SaveLoadTable &slt); void SlLoadTableOrRiffFiltered(const SaveLoadTable &slt); void SlLoadTableWithArrayLengthPrefixesMissing();