From 3f55053d9cc691a9863cb6ba0111091d8eaddc50 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 6 Apr 2021 21:03:01 +0100 Subject: [PATCH] Fix read / write of DAT object entries --- src/openrct2/ParkFile.cpp | 14 ++++++++++---- src/openrct2/object/ObjectManager.cpp | 14 +++++++++++--- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/openrct2/ParkFile.cpp b/src/openrct2/ParkFile.cpp index 56ddf46554..92cab1b672 100644 --- a/src/openrct2/ParkFile.cpp +++ b/src/openrct2/ParkFile.cpp @@ -222,21 +222,27 @@ namespace OpenRCT2 { auto kind = cs.Read(); - ObjectEntryDescriptor desc; switch (kind) { case DESCRIPTOR_NONE: break; case DESCRIPTOR_DAT: - cs.Read(&desc.Entry, sizeof(rct_object_entry)); + { + rct_object_entry datEntry; + cs.Read(&datEntry, sizeof(datEntry)); + ObjectEntryDescriptor desc(datEntry); requiredObjects.SetObject(j, desc); break; + } case DESCRIPTOR_JSON: + { + ObjectEntryDescriptor desc; desc.Type = objectType; desc.Identifier = cs.Read(); desc.Version = cs.Read(); requiredObjects.SetObject(j, desc); break; + } default: throw std::runtime_error("Unknown object descriptor kind."); } @@ -1234,7 +1240,7 @@ namespace OpenRCT2 ReadWritePeep(cs, entity); } - std::vector GetPatrolArea(uint32_t staffId) + static std::vector GetPatrolArea(uint32_t staffId) { std::vector area; auto hasPatrol = gStaffModes[staffId] == StaffMode::Patrol; @@ -1266,7 +1272,7 @@ namespace OpenRCT2 return area; } - void SetPatrolArea(uint32_t staffId, const std::vector& area) + static void SetPatrolArea(uint32_t staffId, const std::vector& area) { if (area.empty()) { diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index 50733d204c..fc636164a8 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -113,9 +113,17 @@ public: auto obj = GetLoadedObject(objectType, i); if (obj != nullptr) { - auto entry = ObjectEntryDescriptor(obj->GetIdentifier()); - entry.Type = obj->GetObjectType(); - objectList.SetObject(i, entry); + if (obj->IsJsonObject()) + { + auto entry = ObjectEntryDescriptor(obj->GetIdentifier()); + entry.Type = obj->GetObjectType(); + objectList.SetObject(i, entry); + } + else + { + auto entry = ObjectEntryDescriptor(*obj->GetObjectEntry()); + objectList.SetObject(i, entry); + } } } }