diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index 93d3be228f..d1a7bf213b 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -101,7 +101,9 @@ struct ResearchItem { entryIndex = RCTEntryIndexToOpenRCT2EntryIndex(oldResearchItem.entryIndex); baseRideType = oldResearchItem.baseRideType; - type = RCT2RideTypeToOpenRCT2RideType(oldResearchItem.type, get_ride_entry(entryIndex)); + auto* rideEntry = get_ride_entry(entryIndex); + type = rideEntry != nullptr ? RCT2RideTypeToOpenRCT2RideType(oldResearchItem.type, rideEntry) + : oldResearchItem.type; flags = oldResearchItem.flags; category = oldResearchItem.category; } diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index ed8ca30d60..a1cc2ec0cd 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -34,6 +34,11 @@ using namespace OpenRCT2; static void RideObjectUpdateRideType(rct_ride_entry* rideEntry) { + if (rideEntry == nullptr) + { + return; + } + for (auto i = 0; i < MAX_RIDE_TYPES_PER_RIDE_ENTRY; i++) { auto oldRideType = rideEntry->ride_type[i]; diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 2efeadb13b..65a1022027 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -512,7 +512,10 @@ public: if (RCT2RideTypeNeedsConversion(src->type)) { auto* rideEntry = get_ride_entry(src->subtype); - rideType = RCT2RideTypeToOpenRCT2RideType(src->type, rideEntry); + if (rideEntry != nullptr) + { + rideType = RCT2RideTypeToOpenRCT2RideType(src->type, rideEntry); + } } dst->type = rideType; dst->subtype = src->subtype; diff --git a/src/openrct2/ride/TrackDesignRepository.cpp b/src/openrct2/ride/TrackDesignRepository.cpp index a366b88579..db5a7ca022 100644 --- a/src/openrct2/ride/TrackDesignRepository.cpp +++ b/src/openrct2/ride/TrackDesignRepository.cpp @@ -86,10 +86,16 @@ public: { std::scoped_lock lock(_objectLookupMutex); auto* rawObject = object_repository_load_object(&td6->vehicle_object); - const auto* rideEntry = static_cast( - static_cast(rawObject)->GetLegacyData()); - rideType = RCT2RideTypeToOpenRCT2RideType(td6->type, rideEntry); - object_delete(rawObject); + if (rawObject != nullptr) + { + const auto* rideEntry = static_cast( + static_cast(rawObject)->GetLegacyData()); + if (rideEntry != nullptr) + { + rideType = RCT2RideTypeToOpenRCT2RideType(td6->type, rideEntry); + } + object_delete(rawObject); + } } TrackRepositoryItem item;