From ba5627c544ed5cb0149747170e99c0e2fcdcf93a Mon Sep 17 00:00:00 2001 From: Spacek531 Date: Sun, 5 Mar 2023 22:26:07 -0800 Subject: [PATCH] load brake from parkfile --- src/openrct2/park/ParkFile.cpp | 34 +++++++++++++++++++++++++++++++--- src/openrct2/park/ParkFile.h | 4 ++-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index f2f904d566..b4746f148b 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -64,6 +64,8 @@ #include #include +constexpr const uint32_t BlockBrakeImprovementsVersion = 27; + using namespace OpenRCT2; namespace OpenRCT2 @@ -1092,12 +1094,19 @@ namespace OpenRCT2 else if (it.element->GetType() == TileElementType::Track) { auto* trackElement = it.element->AsTrack(); + auto trackType = trackElement->GetTrackType(); if (TrackTypeMustBeMadeInvisible( - trackElement->GetRideType(), trackElement->GetTrackType(), - os.GetHeader().TargetVersion)) + trackElement->GetRideType(), trackType, os.GetHeader().TargetVersion)) { it.element->SetInvisible(true); } + if (os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + { + if (trackType == TrackElemType::Brakes) + trackElement->SetBrakeClosed(true); + if (trackType == TrackElemType::BlockBrakes) + trackElement->SetBrakeBoosterSpeed(kRCT2DefaultBlockBrakeSpeed); + } } else if ( it.element->GetType() == TileElementType::SmallScenery && os.GetHeader().TargetVersion < 23) @@ -2088,7 +2097,18 @@ namespace OpenRCT2 cs.ReadWrite(entity.scream_sound_id); cs.ReadWrite(entity.TrackSubposition); cs.ReadWrite(entity.NumLaps); - cs.ReadWrite(entity.brake_speed); + if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + { + uint8_t brakeSpeed; + cs.ReadWrite(brakeSpeed); + if (entity.GetTrackType() == TrackElemType::BlockBrakes) + brakeSpeed = kRCT2DefaultBlockBrakeSpeed; + entity.brake_speed = brakeSpeed; + } + else + { + cs.ReadWrite(entity.brake_speed); + } cs.ReadWrite(entity.lost_time_out); cs.ReadWrite(entity.vertical_drop_countdown); cs.ReadWrite(entity.var_D3); @@ -2107,6 +2127,14 @@ namespace OpenRCT2 entity.SetFlag(VehicleFlags::Crashed); } } + if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + { + entity.BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed; + } + else + { + cs.ReadWrite(entity.BlockBrakeSpeed); + } } template<> void ParkFile::ReadWriteEntity(OrcaStream& os, OrcaStream::ChunkStream& cs, Guest& guest) diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 735f5b688c..977a10de69 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -9,10 +9,10 @@ struct ObjectRepositoryItem; namespace OpenRCT2 { // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 26; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 27; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 26; + constexpr uint32_t PARK_FILE_MIN_VERSION = 27; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp!