diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index 48e08b97f3..68c1ea1269 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -66,8 +66,6 @@ #include #include -constexpr uint32_t BlockBrakeImprovementsVersion = 27; - using namespace OpenRCT2; namespace OpenRCT2 @@ -1104,7 +1102,7 @@ namespace OpenRCT2 { it.element->SetInvisible(true); } - if (os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + if (os.GetHeader().TargetVersion < kBlockBrakeImprovementsVersion) { if (trackType == TrackElemType::Brakes) trackElement->SetBrakeClosed(true); @@ -2102,7 +2100,7 @@ namespace OpenRCT2 cs.ReadWrite(entity.scream_sound_id); cs.ReadWrite(entity.TrackSubposition); cs.ReadWrite(entity.NumLaps); - if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < kBlockBrakeImprovementsVersion) { uint8_t brakeSpeed; cs.ReadWrite(brakeSpeed); @@ -2132,7 +2130,7 @@ namespace OpenRCT2 entity.SetFlag(VehicleFlags::Crashed); } } - if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < BlockBrakeImprovementsVersion) + if (cs.GetMode() == OrcaStream::Mode::READING && os.GetHeader().TargetVersion < kBlockBrakeImprovementsVersion) { entity.BlockBrakeSpeed = kRCT2DefaultBlockBrakeSpeed; } diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index a2bd5d48d3..30e005c9b2 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,7 +11,7 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 36; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 37; // The minimum version that is forwards compatible with the current version. constexpr uint32_t PARK_FILE_MIN_VERSION = 33; @@ -23,6 +23,12 @@ namespace OpenRCT2 constexpr uint32_t PARK_FILE_MAGIC = 0x4B524150; // PARK struct IStream; + + // As uint16_t, in order to allow comparison with int32_t + constexpr uint16_t kLogFlumeSteepSlopeVersion = 16; + constexpr uint16_t kBlockBrakeImprovementsVersion = 27; + constexpr uint16_t kGigaCoasterInversions = 31; + constexpr uint16_t kWoodenFlatToSteepVersion = 37; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index e32615195a..a93c974572 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -18,6 +18,7 @@ #include "../interface/Viewport.h" #include "../management/Finance.h" #include "../network/network.h" +#include "../park/ParkFile.h" #include "../platform/Platform.h" #include "../rct1/RCT1.h" #include "../ride/RideColour.h" @@ -1007,7 +1008,7 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, track_type_t trackType, // Lots of Log Flumes exist where the downward slopes are simulated by using other track // types like the Splash Boats, but not actually made invisible, because they never needed // to be. - if (rideType == RIDE_TYPE_LOG_FLUME && parkFileVersion <= 15) + if (rideType == RIDE_TYPE_LOG_FLUME && parkFileVersion < kLogFlumeSteepSlopeVersion) { if (trackType == TrackElemType::Down25ToDown60 || trackType == TrackElemType::Down60 || trackType == TrackElemType::Down60ToDown25) @@ -1015,7 +1016,7 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, track_type_t trackType, return true; } } - else if (rideType == RIDE_TYPE_GIGA_COASTER && parkFileVersion <= 30) + else if (rideType == RIDE_TYPE_GIGA_COASTER && parkFileVersion < kGigaCoasterInversions) { switch (trackType) { @@ -1122,6 +1123,19 @@ bool TrackTypeMustBeMadeInvisible(ride_type_t rideType, track_type_t trackType, return true; } } + else if ( + (rideType == RIDE_TYPE_WOODEN_ROLLER_COASTER || rideType == RIDE_TYPE_CLASSIC_WOODEN_ROLLER_COASTER) + && parkFileVersion < kWoodenFlatToSteepVersion) + { + switch (trackType) + { + case TrackElemType::FlatToUp60LongBase: + case TrackElemType::Up60ToFlatLongBase: + case TrackElemType::FlatToDown60LongBase: + case TrackElemType::Down60ToFlatLongBase: + return true; + } + } return false; }