diff --git a/src/openrct2/ParkFile.cpp b/src/openrct2/ParkFile.cpp index 4ab7e8778b..4445f192a8 100644 --- a/src/openrct2/ParkFile.cpp +++ b/src/openrct2/ParkFile.cpp @@ -1,5 +1,8 @@ #include "ParkFile.h" +#include "Context.h" +#include "object/ObjectManager.h" +#include "object/ObjectRepository.h" #include "OpenRCT2.h" #include "Version.h" #include "core/Crypt.h" @@ -58,6 +61,7 @@ void ParkFile::Save(const std::string_view& path) _header.Compression = COMPRESSION_NONE; WriteAuthoringChunk(); + WriteObjectsChunk(); WriteGeneralChunk(); // TODO avoid copying the buffer @@ -152,6 +156,35 @@ void ParkFile::WriteAuthoringChunk() EndChunk(); } +void ParkFile::WriteObjectsChunk() +{ + BeginChunk(ParkFileChunkType::OBJECTS); + BeginArray(); + // TODO do not hard code object count + auto& objManager = GetContext()->GetObjectManager(); + for (size_t i = 0; i < OBJECT_ENTRY_COUNT; i++) + { + auto obj = objManager.GetLoadedObject(i); + if (obj != nullptr) + { + auto entry = obj->GetObjectEntry(); + auto type = (uint16_t)(entry->flags & 0x0F); + type |= 0x8000; // Make as legacy object + WriteValue(type); + WriteString(std::string_view(entry->name, 8)); + WriteString(""); + } + else + { + WriteValue(0); + WriteString(""); + WriteString(""); + } + } + EndArray(); + EndChunk(); +} + void ParkFile::WriteGeneralChunk() { BeginChunk(ParkFileChunkType::GENERAL); diff --git a/src/openrct2/ParkFile.h b/src/openrct2/ParkFile.h index 31a837dc07..8e599b20ec 100644 --- a/src/openrct2/ParkFile.h +++ b/src/openrct2/ParkFile.h @@ -59,6 +59,7 @@ namespace OpenRCT2 } void WriteAuthoringChunk(); + void WriteObjectsChunk(); void WriteGeneralChunk(); }; } // namespace OpenRCT2