From 8cdece0252961e8a46e332c2984bb31763c9f116 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 13 Sep 2021 19:24:42 +0100 Subject: [PATCH] Fix incorrect objects in S6 import --- src/openrct2/rct2/S6Importer.cpp | 13 +++++++++++-- test/tests/PlayTests.cpp | 2 +- test/tests/S6ImportExportTests.cpp | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 4c1383cad6..d352da994f 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1603,9 +1603,18 @@ public: AddRequiredObjects(result, _s6.ScenarioTextObjects); ObjectList objectList; - for (rct_object_entry entry : result) + for (size_t i = 0; i < result.size(); i++) { - objectList.Add(ObjectEntryDescriptor(entry)); + ObjectType objectType; + ObjectEntryIndex entryIndex; + get_type_entry_index(i, &objectType, &entryIndex); + + auto desc = ObjectEntryDescriptor(result[i]); + if (desc.HasValue()) + { + assert(desc.GetType() == objectType); + objectList.SetObject(entryIndex, desc); + } } return objectList; diff --git a/test/tests/PlayTests.cpp b/test/tests/PlayTests.cpp index 9ff2d3846e..55b5695373 100644 --- a/test/tests/PlayTests.cpp +++ b/test/tests/PlayTests.cpp @@ -46,7 +46,7 @@ static std::unique_ptr localStartGame(const std::string& parkPath) auto importer = ParkImporter::CreateS6(context->GetObjectRepository()); auto loadResult = importer->LoadSavedGame(parkPath.c_str(), false); - context->GetObjectManager().LoadObjects(loadResult.RequiredObjects.data(), loadResult.RequiredObjects.size()); + context->GetObjectManager().LoadObjects(loadResult.RequiredObjects); importer->Import(); reset_sprite_spatial_index(); diff --git a/test/tests/S6ImportExportTests.cpp b/test/tests/S6ImportExportTests.cpp index 327042c350..b878970784 100644 --- a/test/tests/S6ImportExportTests.cpp +++ b/test/tests/S6ImportExportTests.cpp @@ -78,7 +78,7 @@ static bool ImportSave(MemoryStream& stream, std::unique_ptr& context, auto importer = ParkImporter::CreateS6(context->GetObjectRepository()); auto loadResult = importer->LoadFromStream(&stream, false); - objManager.LoadObjects(loadResult.RequiredObjects.data(), loadResult.RequiredObjects.size()); + objManager.LoadObjects(loadResult.RequiredObjects); importer->Import(); GameInit(retainSpatialIndices);