From 9b7face116a7d8b83f5c092511be74092af3b95c Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Thu, 18 Apr 2024 22:29:52 +0200 Subject: [PATCH] Fix #21731: previously-invisible 'alt' rides now visible --- src/openrct2/network/NetworkBase.cpp | 2 +- src/openrct2/ride/RideData.cpp | 6 +- .../ride/coaster/meta/FlyingRollerCoaster.h | 70 +++++++++++++++++++ .../ride/coaster/meta/LayDownRollerCoaster.h | 70 +++++++++++++++++++ .../meta/MultiDimensionRollerCoaster.h | 70 +++++++++++++++++++ 5 files changed, 214 insertions(+), 4 deletions(-) diff --git a/src/openrct2/network/NetworkBase.cpp b/src/openrct2/network/NetworkBase.cpp index f7bd6ee87a..79700af5c3 100644 --- a/src/openrct2/network/NetworkBase.cpp +++ b/src/openrct2/network/NetworkBase.cpp @@ -46,7 +46,7 @@ using namespace OpenRCT2; // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "2" +#define NETWORK_STREAM_VERSION "3" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index fd8fdc4cbc..64e35c108f 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -307,15 +307,15 @@ constexpr RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER */ SideFrictionRollerCoasterRTD, /* RIDE_TYPE_STEEL_WILD_MOUSE */ SteelWildMouseRTD, /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER */ MultiDimensionRollerCoasterRTD, - /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT */ MultiDimensionRollerCoasterRTD, + /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT */ MultiDimensionRollerCoasterAltRTD, /* RIDE_TYPE_FLYING_ROLLER_COASTER */ FlyingRollerCoasterRTD, - /* RIDE_TYPE_FLYING_ROLLER_COASTER_ALT */ FlyingRollerCoasterRTD, + /* RIDE_TYPE_FLYING_ROLLER_COASTER_ALT */ FlyingRollerCoasterAltRTD, /* RIDE_TYPE_VIRGINIA_REEL */ VirginiaReelRTD, /* RIDE_TYPE_SPLASH_BOATS */ SplashBoatsRTD, /* RIDE_TYPE_MINI_HELICOPTERS */ MiniHelicoptersRTD, /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER */ LayDownRollerCoasterRTD, /* RIDE_TYPE_SUSPENDED_MONORAIL */ SuspendedMonorailRTD, - /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT */ LayDownRollerCoasterRTD, + /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT */ LayDownRollerCoasterAltRTD, /* RIDE_TYPE_REVERSER_ROLLER_COASTER */ ReverserRollerCoasterRTD, /* RIDE_TYPE_HEARTLINE_TWISTER_COASTER */ HeartlineTwisterCoasterRTD, /* RIDE_TYPE_MINI_GOLF */ MiniGolfRTD, diff --git a/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.h b/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.h index 0c7e6f443c..c8d1ca37cf 100644 --- a/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.h @@ -91,4 +91,74 @@ constexpr RideTypeDescriptor FlyingRollerCoasterRTD = }, }, }; + +constexpr RideTypeDescriptor FlyingRollerCoasterAltRTD = +{ + .Category = RIDE_CATEGORY_NONE, + .StartTrackPiece = TrackElemType::EndStation, + .TrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .InvertedTrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .Flags = RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | + RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED, + .RideModes = EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned), + .DefaultMode = RideMode::ContinuousCircuit, + .OperatingSettings = { 10, 27, 30, 25, 25, 0 }, + .Naming = { STR_RIDE_NAME_3A, STR_RIDE_DESCRIPTION_UNKNOWN }, + .NameConvention = { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }, + .EnumName = nameof(RIDE_TYPE_FLYING_ROLLER_COASTER_ALT), + .AvailableBreakdowns = (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE), + .Heights = { 30, 24, 8, 11, }, + .MaxMass = 35, + .LiftData = { OpenRCT2::Audio::SoundId::LiftBM, 4, 6 }, + .RatingsMultipliers = { 50, 30, 10 }, + .UpkeepCosts = { 49, 20, 90, 11, 3, 15 }, + .BuildCosts = { 62.50_GBP, 2.50_GBP, 50, }, + .DefaultPrices = { 20, 20 }, + .DefaultMusic = MUSIC_OBJECT_ROCK_1, + .PhotoItem = ShopItem::Photo2, + .BonusValue = 100, + .ColourPresets = TRACK_COLOUR_PRESETS( + { COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN, COLOUR_TEAL }, + { COLOUR_TEAL, COLOUR_TEAL, COLOUR_BORDEAUX_RED }, + { COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_DARK_PURPLE }, + ), + .ColourPreview = { SPR_RIDE_DESIGN_PREVIEW_FLYING_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_FLYING_ROLLER_COASTER_SUPPORTS }, + .ColourKey = RideColourKey::Ride, + .Name = "flying_rc_alt", + .RatingsData = + { + RatingsCalculationType::Normal, + { RIDE_RATING(4, 35), RIDE_RATING(1, 85), RIDE_RATING(4, 33) }, + 17, + -1, + false, + { + { RatingsModifierType::BonusLength, 6000, 764, 0, 0 }, + { RatingsModifierType::BonusSynchronisation, 0, RIDE_RATING(0, 40), RIDE_RATING(0, 05), 0 }, + { RatingsModifierType::BonusTrainLength, 0, 187245, 0, 0 }, + { RatingsModifierType::BonusMaxSpeed, 0, 44281, 88562, 35424 }, + { RatingsModifierType::BonusAverageSpeed, 0, 291271, 436906, 0 }, + { RatingsModifierType::BonusDuration, 150, 26214, 0, 0 }, + { RatingsModifierType::BonusGForces, 0, 24576, 38130, 49648 }, + { RatingsModifierType::BonusTurns, 0, 26749, 34767, 45749 }, + { RatingsModifierType::BonusDrops, 0, 29127, 46811, 49152 }, + { RatingsModifierType::BonusSheltered, 0, 15420, 32768, 35108 }, + { RatingsModifierType::BonusProximity, 0, 20130, 0, 0 }, + { RatingsModifierType::BonusScenery, 0, 6693, 0, 0 }, + { RatingsModifierType::RequirementInversions, 1, 2, 1, 1 }, + { RatingsModifierType::RequirementMaxSpeed, 0xA0000, 2, 1, 1 }, + { RatingsModifierType::RequirementNegativeGs, FIXED_2DP(0, 40), 2, 1, 1 }, + { RatingsModifierType::RequirementNumDrops, 2, 2, 1, 1 }, + { RatingsModifierType::PenaltyLateralGs, 0, 24576, 38130, 49648 }, + }, + }, +}; // clang-format on diff --git a/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h b/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h index 3616f3d6dc..b086209007 100644 --- a/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/LayDownRollerCoaster.h @@ -89,4 +89,74 @@ constexpr RideTypeDescriptor LayDownRollerCoasterRTD = }, }, }; + +constexpr RideTypeDescriptor LayDownRollerCoasterAltRTD = +{ + .Category = RIDE_CATEGORY_NONE, + .StartTrackPiece = TrackElemType::EndStation, + .TrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .InvertedTrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .Flags = RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | + RIDE_TYPE_FLAGS_COMMON_COASTER, + .RideModes = EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned), + .DefaultMode = RideMode::ContinuousCircuit, + .OperatingSettings = { 10, 27, 30, 25, 25, 0 }, + .Naming = { STR_RIDE_NAME_40, STR_RIDE_DESCRIPTION_UNKNOWN }, + .NameConvention = { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }, + .EnumName = nameof(RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT), + .AvailableBreakdowns = (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE), + .Heights = { 26, 24, 8, 11, }, + .MaxMass = 25, + .LiftData = { OpenRCT2::Audio::SoundId::LiftClassic, 4, 6 }, + .RatingsMultipliers = { 50, 30, 10 }, + .UpkeepCosts = { 49, 20, 90, 11, 3, 15 }, + .BuildCosts = { 53.50_GBP, 2.50_GBP, 50, }, + .DefaultPrices = { 20, 20 }, + .DefaultMusic = MUSIC_OBJECT_ROCK_1, + .PhotoItem = ShopItem::Photo2, + .BonusValue = 100, + .ColourPresets = TRACK_COLOUR_PRESETS( + { COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_YELLOW }, + { COLOUR_DARK_PURPLE, COLOUR_DARK_PURPLE, COLOUR_YELLOW }, + { COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_DARK_GREEN }, + ), + .ColourPreview = { SPR_RIDE_DESIGN_PREVIEW_LAY_DOWN_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_LAY_DOWN_ROLLER_COASTER_SUPPORTS }, + .ColourKey = RideColourKey::Ride, + .Name = "lay_down_rc_alt", + .RatingsData = + { + RatingsCalculationType::Normal, + { RIDE_RATING(3, 85), RIDE_RATING(1, 15), RIDE_RATING(2, 75) }, + 18, + -1, + true, + { + { RatingsModifierType::BonusLength, 6000, 764, 0, 0 }, + { RatingsModifierType::BonusSynchronisation, 0, RIDE_RATING(0, 40), RIDE_RATING(0, 05), 0 }, + { RatingsModifierType::BonusTrainLength, 0, 187245, 0, 0 }, + { RatingsModifierType::BonusMaxSpeed, 0, 44281, 88562, 35424 }, + { RatingsModifierType::BonusAverageSpeed, 0, 291271, 436906, 0 }, + { RatingsModifierType::BonusDuration, 150, 26214, 0, 0 }, + { RatingsModifierType::BonusGForces, 0, 24576, 38130, 49648 }, + { RatingsModifierType::BonusTurns, 0, 26749, 34767, 45749 }, + { RatingsModifierType::BonusDrops, 0, 29127, 46811, 49152 }, + { RatingsModifierType::BonusSheltered, 0, 15420, 32768, 35108 }, + { RatingsModifierType::BonusProximity, 0, 20130, 0, 0 }, + { RatingsModifierType::BonusScenery, 0, 6693, 0, 0 }, + { RatingsModifierType::RequirementInversions, 1, 4, 2, 2 }, + { RatingsModifierType::RequirementMaxSpeed, 0xA0000, 2, 2, 2 }, + { RatingsModifierType::RequirementNegativeGs, FIXED_2DP(0, 40), 2, 2, 2 }, + { RatingsModifierType::RequirementNumDrops, 2, 2, 2, 2 }, + { RatingsModifierType::PenaltyLateralGs, 0, 24576, 38130, 49648 }, + }, + }, +}; // clang-format on diff --git a/src/openrct2/ride/coaster/meta/MultiDimensionRollerCoaster.h b/src/openrct2/ride/coaster/meta/MultiDimensionRollerCoaster.h index 9c6151aec0..2911473643 100644 --- a/src/openrct2/ride/coaster/meta/MultiDimensionRollerCoaster.h +++ b/src/openrct2/ride/coaster/meta/MultiDimensionRollerCoaster.h @@ -91,4 +91,74 @@ constexpr RideTypeDescriptor MultiDimensionRollerCoasterRTD = }, }; +constexpr RideTypeDescriptor MultiDimensionRollerCoasterAltRTD = +{ + .Category = RIDE_CATEGORY_NONE, + .StartTrackPiece = TrackElemType::EndStation, + .TrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .InvertedTrackPaintFunctions = TrackDrawerDescriptor({ + .Drawer = nullptr, + .EnabledTrackPieces = { }, + .ExtraTrackPieces = { }, + }), + .Flags = RIDE_TYPE_FLAGS_TRACK_HAS_3_COLOURS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | + RIDE_TYPE_FLAGS_COMMON_COASTER | RIDE_TYPE_FLAG_HAS_SEAT_ROTATION, + .RideModes = EnumsToFlags(RideMode::ContinuousCircuit, RideMode::ContinuousCircuitBlockSectioned), + .DefaultMode = RideMode::ContinuousCircuit, + .OperatingSettings = { 10, 27, 30, 25, 25, 0 }, + .Naming = { STR_RIDE_NAME_38, STR_RIDE_DESCRIPTION_UNKNOWN }, + .NameConvention = { RideComponentType::Train, RideComponentType::Track, RideComponentType::Station }, + .EnumName = nameof(RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT), + .AvailableBreakdowns = (1 << BREAKDOWN_SAFETY_CUT_OUT) | (1 << BREAKDOWN_RESTRAINTS_STUCK_CLOSED) | (1 << BREAKDOWN_RESTRAINTS_STUCK_OPEN) | (1 << BREAKDOWN_VEHICLE_MALFUNCTION) | (1 << BREAKDOWN_BRAKES_FAILURE), + .Heights = { 40, 24, 8, 11, }, + .MaxMass = 78, + .LiftData = { OpenRCT2::Audio::SoundId::LiftFrictionWheels, 4, 6 }, + .RatingsMultipliers = { 50, 30, 10 }, + .UpkeepCosts = { 75, 20, 90, 11, 3, 15 }, + .BuildCosts = { 90.00_GBP, 2.50_GBP, 50, }, + .DefaultPrices = { 20, 20 }, + .DefaultMusic = MUSIC_OBJECT_ROCK_3, + .PhotoItem = ShopItem::Photo2, + .BonusValue = 100, + .ColourPresets = TRACK_COLOUR_PRESETS( + { COLOUR_BRIGHT_PINK, COLOUR_YELLOW, COLOUR_YELLOW }, + { COLOUR_LIGHT_PURPLE, COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED }, + { COLOUR_BORDEAUX_RED, COLOUR_WHITE, COLOUR_WHITE }, + ), + .ColourPreview = { SPR_RIDE_DESIGN_PREVIEW_MULTI_DIMENSION_ROLLER_COASTER_TRACK, SPR_RIDE_DESIGN_PREVIEW_MULTI_DIMENSION_ROLLER_COASTER_SUPPORTS }, + .ColourKey = RideColourKey::Ride, + .Name = "multi_dimension_rc_alt", + .RatingsData = + { + RatingsCalculationType::Normal, + { RIDE_RATING(3, 75), RIDE_RATING(1, 95), RIDE_RATING(4, 79) }, + 18, + -1, + true, + { + { RatingsModifierType::BonusLength, 6000, 764, 0, 0 }, + { RatingsModifierType::BonusSynchronisation, 0, RIDE_RATING(0, 40), RIDE_RATING(0, 05), 0 }, + { RatingsModifierType::BonusTrainLength, 0, 187245, 0, 0 }, + { RatingsModifierType::BonusMaxSpeed, 0, 44281, 88562, 35424 }, + { RatingsModifierType::BonusAverageSpeed, 0, 291271, 436906, 0 }, + { RatingsModifierType::BonusDuration, 150, 26214, 0, 0 }, + { RatingsModifierType::BonusGForces, 0, 24576, 38130, 49648 }, + { RatingsModifierType::BonusTurns, 0, 26749, 34767, 45749 }, + { RatingsModifierType::BonusDrops, 0, 29127, 46811, 49152 }, + { RatingsModifierType::BonusSheltered, 0, 15420, 32768, 35108 }, + { RatingsModifierType::BonusProximity, 0, 20130, 0, 0 }, + { RatingsModifierType::BonusScenery, 0, 6693, 0, 0 }, + { RatingsModifierType::RequirementInversions, 1, 4, 1, 1 }, + { RatingsModifierType::RequirementMaxSpeed, 0xA0000, 2, 1, 1 }, + { RatingsModifierType::RequirementNegativeGs, FIXED_2DP(0, 40), 2, 1, 1 }, + { RatingsModifierType::RequirementNumDrops, 2, 2, 1, 1 }, + { RatingsModifierType::PenaltyLateralGs, 0, 24576, 38130, 49648 }, + }, + }, +}; + // clang-format on