diff --git a/src/openrct2/actions/TrackPlaceAction.cpp b/src/openrct2/actions/TrackPlaceAction.cpp index eebd0f83d3..a39a80a00e 100644 --- a/src/openrct2/actions/TrackPlaceAction.cpp +++ b/src/openrct2/actions/TrackPlaceAction.cpp @@ -551,8 +551,7 @@ GameActions::Result TrackPlaceAction::Execute() const RideMode newMode = RideMode::ContinuousCircuitBlockSectioned; if (ride->mode == RideMode::PoweredLaunch) { - if (ride->GetRideTypeDescriptor().RideModes - & (1ULL << static_cast(RideMode::PoweredLaunchBlockSectioned)) + if (ride->GetRideTypeDescriptor().SupportsRideMode(RideMode::PoweredLaunchBlockSectioned) || gCheatsShowAllOperatingModes) newMode = RideMode::PoweredLaunchBlockSectioned; else diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 72742856cb..c0687aa665 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -376,6 +376,11 @@ ResearchCategory RideTypeDescriptor::GetResearchCategory() const return ResearchCategory::Transport; } +bool RideTypeDescriptor::SupportsRideMode(RideMode rideMode) const +{ + return RideModes & EnumToFlag(rideMode); +} + static RideTrackGroup _enabledRidePieces = {}; bool IsTrackEnabled(int32_t trackFlagIndex) diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index e198b3a3f0..fb70685a32 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -220,6 +220,7 @@ struct RideTypeDescriptor void GetAvailableTrackPieces(RideTrackGroup& res) const; bool SupportsTrackPiece(const uint64_t trackPiece) const; ResearchCategory GetResearchCategory() const; + bool SupportsRideMode(RideMode rideMode) const; }; #ifdef _WIN32