From 7f3dc5c0015a6065f3e7c2c92e2aa97fb08872cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Fri, 15 Oct 2021 01:12:38 +0300 Subject: [PATCH] Fix fallback for missing path objects --- src/openrct2/ride/TrackDesign.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 63cb9fae7c..5c33e6bd00 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -699,6 +699,25 @@ static ObjectEntryIndex TrackDesignGetDefaultRailingIndex() return OBJECT_ENTRY_INDEX_NULL; } +static ObjectEntryIndex TrackDesignGetDefaultPathIndex(bool isQueue) +{ + for (ObjectEntryIndex i = 0; i < MAX_PATH_OBJECTS; i++) + { + auto legacyPathEntry = GetLegacyFootpathEntry(i); + if (legacyPathEntry != nullptr) + { + const auto& surfaceDescriptor = isQueue ? legacyPathEntry->GetQueueSurfaceDescriptor() + : legacyPathEntry->GetPathSurfaceDescriptor(); + if (surfaceDescriptor.IsEditorOnly()) + { + continue; + } + return i; + } + } + return OBJECT_ENTRY_INDEX_NULL; +} + static std::optional TrackDesignPlaceSceneryElementGetEntry(const TrackDesignSceneryElement& scenery) { TrackSceneryEntry result; @@ -734,6 +753,13 @@ static std::optional TrackDesignPlaceSceneryElementGetEntry(c if (result.SecondaryIndex == OBJECT_ENTRY_INDEX_NULL) result.SecondaryIndex = TrackDesignGetDefaultRailingIndex(); + // NOTE: This block can be deleted in the NSF branch. + if (result.Index == OBJECT_ENTRY_INDEX_NULL) + { + result.Type = ObjectType::Paths; + result.Index = TrackDesignGetDefaultPathIndex(scenery.IsQueue()); + } + if (result.Index == OBJECT_ENTRY_INDEX_NULL) { _trackDesignPlaceStateSceneryUnavailable = true;