From 0bc54aa69d062e4a94eee99b8c034fdd4ae21314 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Thu, 29 Jul 2021 14:34:18 +0200 Subject: [PATCH] Add version checks to path mappings --- src/openrct2/ParkFile.cpp | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/openrct2/ParkFile.cpp b/src/openrct2/ParkFile.cpp index 09639790ba..41d557f5d2 100644 --- a/src/openrct2/ParkFile.cpp +++ b/src/openrct2/ParkFile.cpp @@ -245,12 +245,14 @@ namespace OpenRCT2 auto* pathToSurfaceMap = _pathToSurfaceMap; auto* pathToQueueSurfaceMap = _pathToQueueSurfaceMap; auto* pathToRailingsMap = _pathToRailingsMap; + const auto version = os.GetHeader().TargetVersion; + log_error("version %d", version); ObjectList requiredObjects; os.ReadWriteChunk( ParkFileChunkType::OBJECTS, - [&requiredObjects, pathToSurfaceMap, pathToQueueSurfaceMap, - pathToRailingsMap](OrcaStream::ChunkStream& cs) { + [&requiredObjects, pathToSurfaceMap, pathToQueueSurfaceMap, pathToRailingsMap, + version](OrcaStream::ChunkStream& cs) { ObjectEntryIndex surfaceCount = 0; ObjectEntryIndex railingsCount = 0; auto numSubLists = cs.Read(); @@ -271,7 +273,7 @@ namespace OpenRCT2 rct_object_entry datEntry; cs.Read(&datEntry, sizeof(datEntry)); ObjectEntryDescriptor desc(datEntry); - if (datEntry.GetType() == ObjectType::Paths) + if (version <= 2 && datEntry.GetType() == ObjectType::Paths) { auto footpathMapping = GetFootpathMapping(desc); if (footpathMapping != nullptr) @@ -294,15 +296,18 @@ namespace OpenRCT2 desc.Identifier = MapToNewObjectIdentifier(cs.Read()); desc.Version = cs.Read(); - auto footpathMapping = GetFootpathMapping(desc); - if (footpathMapping != nullptr) + if (version <= 2) { - // We have surface objects for this footpath - UpdateFootpathsFromMapping( - pathToSurfaceMap, pathToQueueSurfaceMap, pathToRailingsMap, requiredObjects, - surfaceCount, railingsCount, j, footpathMapping); + auto footpathMapping = GetFootpathMapping(desc); + if (footpathMapping != nullptr) + { + // We have surface objects for this footpath + UpdateFootpathsFromMapping( + pathToSurfaceMap, pathToQueueSurfaceMap, pathToRailingsMap, requiredObjects, + surfaceCount, railingsCount, j, footpathMapping); - continue; + continue; + } } requiredObjects.SetObject(j, desc);