diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index ed08306002..609afde613 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -2545,7 +2545,7 @@ void window_ride_construction_update_enabled_track_pieces() : ride->type; if (gCheatsEnableAllDrawableTrackPieces) { - _enabledRidePieces = RideTypePossibleTrackConfigurations[rideType]; + _enabledRidePieces = get_available_track_pieces_for_ride_type(rideType); return; } @@ -2556,7 +2556,7 @@ void window_ride_construction_update_enabled_track_pieces() } else { - _enabledRidePieces = RideTypePossibleTrackConfigurations[rideType]; + _enabledRidePieces = get_available_track_pieces_for_ride_type(rideType); } } diff --git a/src/openrct2/actions/TrackPlaceAction.hpp b/src/openrct2/actions/TrackPlaceAction.hpp index 3dfaa88e51..7f09b032c9 100644 --- a/src/openrct2/actions/TrackPlaceAction.hpp +++ b/src/openrct2/actions/TrackPlaceAction.hpp @@ -149,7 +149,7 @@ public: } // Backwards steep lift hills are allowed, even on roller coasters that do not support forwards steep lift hills. if ((_trackPlaceFlags & CONSTRUCTION_LIFT_HILL_SELECTED) - && !(RideTypePossibleTrackConfigurations[ride->type] & (1ULL << TRACK_LIFT_HILL_STEEP)) + && !track_piece_is_available_for_ride_type(ride->type, TRACK_LIFT_HILL_STEEP) && !gCheatsEnableChainLiftOnAllTrack) { if (TrackFlags[_trackType] & TRACK_ELEM_FLAG_IS_STEEP_UP) diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index d8909d6a81..ae5de17d67 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -573,9 +573,20 @@ bool ride_entry_is_invented(int32_t rideEntryIndex) return _researchedRideEntries[rideEntryIndex]; } +uint64_t get_available_track_pieces_for_ride_type(uint8_t rideType) +{ + uint64_t baseVals = RideTypePossibleTrackConfigurations[rideType]; + uint64_t extendedVals = 0; + if (gCheatsEnableAllDrawableTrackPieces) + { + extendedVals = RideTypeDescriptors[rideType].ExtraTrackPieces; + } + return baseVals | extendedVals; +} + bool track_piece_is_available_for_ride_type(uint8_t rideType, int32_t trackType) { - return RideTypePossibleTrackConfigurations[rideType] & (1ULL << trackType); + return (get_available_track_pieces_for_ride_type(rideType)) & (1ULL << trackType); } void ride_type_set_invented(uint32_t rideType) diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index 6ff0f1f4f2..7673dd973e 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -133,6 +133,7 @@ void scenery_set_invented(uint16_t sceneryItem); void scenery_set_not_invented(uint16_t sceneryItem); bool ride_type_is_invented(uint32_t rideType); bool ride_entry_is_invented(int32_t rideEntryIndex); +uint64_t get_available_track_pieces_for_ride_type(uint8_t rideType); bool track_piece_is_available_for_ride_type(uint8_t rideType, int32_t trackType); bool scenery_group_is_invented(int32_t sgIndex); void scenery_group_set_invented(int32_t sgIndex); diff --git a/src/openrct2/ride/RideData.cpp b/src/openrct2/ride/RideData.cpp index 6a0ae82258..d1cfb80959 100644 --- a/src/openrct2/ride/RideData.cpp +++ b/src/openrct2/ride/RideData.cpp @@ -26,6 +26,9 @@ #include "Ride.h" #include "ShopItem.h" #include "Track.h" +#include "coaster/meta/FlyingRollerCoaster.hpp" +#include "coaster/meta/MiniRollerCoaster.hpp" +#include "coaster/meta/SpiralRollerCoaster.hpp" #include @@ -2929,3 +2932,97 @@ const rct_string_id RideModeNames[] = { STR_RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED_MODE, }; // clang-format on + +constexpr const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT] = { + /* RIDE_TYPE_SPIRAL_ROLLER_COASTER */ SpiralRollerCoasterRTD, + /* RIDE_TYPE_STAND_UP_ROLLER_COASTER */ {}, + /* RIDE_TYPE_SUSPENDED_SWINGING_COASTER */ {}, + /* RIDE_TYPE_INVERTED_ROLLER_COASTER */ {}, + /* RIDE_TYPE_JUNIOR_ROLLER_COASTER */ {}, + /* RIDE_TYPE_MINIATURE_RAILWAY */ {}, + /* RIDE_TYPE_MONORAIL */ {}, + /* RIDE_TYPE_MINI_SUSPENDED_COASTER */ {}, + /* RIDE_TYPE_BOAT_HIRE */ {}, + /* RIDE_TYPE_WOODEN_WILD_MOUSE */ {}, + /* RIDE_TYPE_STEEPLECHASE */ {}, + /* RIDE_TYPE_CAR_RIDE */ {}, + /* RIDE_TYPE_LAUNCHED_FREEFALL */ {}, + /* RIDE_TYPE_BOBSLEIGH_COASTER */ {}, + /* RIDE_TYPE_OBSERVATION_TOWER */ {}, + /* RIDE_TYPE_LOOPING_ROLLER_COASTER */ {}, + /* RIDE_TYPE_DINGHY_SLIDE */ {}, + /* RIDE_TYPE_MINE_TRAIN_COASTER */ {}, + /* RIDE_TYPE_CHAIRLIFT */ {}, + /* RIDE_TYPE_CORKSCREW_ROLLER_COASTER */ {}, + /* RIDE_TYPE_MAZE */ {}, + /* RIDE_TYPE_SPIRAL_SLIDE */ {}, + /* RIDE_TYPE_GO_KARTS */ {}, + /* RIDE_TYPE_LOG_FLUME */ {}, + /* RIDE_TYPE_RIVER_RAPIDS */ {}, + /* RIDE_TYPE_DODGEMS */ {}, + /* RIDE_TYPE_SWINGING_SHIP */ {}, + /* RIDE_TYPE_SWINGING_INVERTER_SHIP */ {}, + /* RIDE_TYPE_FOOD_STALL */ {}, + /* RIDE_TYPE_1D */ {}, + /* RIDE_TYPE_DRINK_STALL */ {}, + /* RIDE_TYPE_1F */ {}, + /* RIDE_TYPE_SHOP */ {}, + /* RIDE_TYPE_MERRY_GO_ROUND */ {}, + /* RIDE_TYPE_22 */ {}, + /* RIDE_TYPE_INFORMATION_KIOSK */ {}, + /* RIDE_TYPE_TOILETS */ {}, + /* RIDE_TYPE_FERRIS_WHEEL */ {}, + /* RIDE_TYPE_MOTION_SIMULATOR */ {}, + /* RIDE_TYPE_3D_CINEMA */ {}, + /* RIDE_TYPE_TOP_SPIN */ {}, + /* RIDE_TYPE_SPACE_RINGS */ {}, + /* RIDE_TYPE_REVERSE_FREEFALL_COASTER */ {}, + /* RIDE_TYPE_LIFT */ {}, + /* RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER */ {}, + /* RIDE_TYPE_CASH_MACHINE */ {}, + /* RIDE_TYPE_TWIST */ {}, + /* RIDE_TYPE_HAUNTED_HOUSE */ {}, + /* RIDE_TYPE_FIRST_AID */ {}, + /* RIDE_TYPE_CIRCUS */ {}, + /* RIDE_TYPE_GHOST_TRAIN */ {}, + /* RIDE_TYPE_TWISTER_ROLLER_COASTER */ {}, + /* RIDE_TYPE_WOODEN_ROLLER_COASTER */ {}, + /* RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER */ {}, + /* RIDE_TYPE_STEEL_WILD_MOUSE */ {}, + /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER */ {}, + /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT */ {}, + /* RIDE_TYPE_FLYING_ROLLER_COASTER */ FlyingRollerCoasterRTD, + /* RIDE_TYPE_FLYING_ROLLER_COASTER_ALT */ {}, + /* RIDE_TYPE_VIRGINIA_REEL */ {}, + /* RIDE_TYPE_SPLASH_BOATS */ {}, + /* RIDE_TYPE_MINI_HELICOPTERS */ {}, + /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER */ {}, + /* RIDE_TYPE_SUSPENDED_MONORAIL */ {}, + /* RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT */ {}, + /* RIDE_TYPE_REVERSER_ROLLER_COASTER */ {}, + /* RIDE_TYPE_HEARTLINE_TWISTER_COASTER */ {}, + /* RIDE_TYPE_MINI_GOLF */ {}, + /* RIDE_TYPE_GIGA_COASTER */ {}, + /* RIDE_TYPE_ROTO_DROP */ {}, + /* RIDE_TYPE_FLYING_SAUCERS */ {}, + /* RIDE_TYPE_CROOKED_HOUSE */ {}, + /* RIDE_TYPE_MONORAIL_CYCLES */ {}, + /* RIDE_TYPE_COMPACT_INVERTED_COASTER */ {}, + /* RIDE_TYPE_WATER_COASTER */ {}, + /* RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER */ {}, + /* RIDE_TYPE_INVERTED_HAIRPIN_COASTER */ {}, + /* RIDE_TYPE_MAGIC_CARPET */ {}, + /* RIDE_TYPE_SUBMARINE_RIDE */ {}, + /* RIDE_TYPE_RIVER_RAFTS */ {}, + /* RIDE_TYPE_50 */ {}, + /* RIDE_TYPE_ENTERPRISE */ {}, + /* RIDE_TYPE_52 */ {}, + /* RIDE_TYPE_53 */ {}, + /* RIDE_TYPE_54 */ {}, + /* RIDE_TYPE_55 */ {}, + /* RIDE_TYPE_INVERTED_IMPULSE_COASTER */ {}, + /* RIDE_TYPE_MINI_ROLLER_COASTER */ MiniRollerCoasterRTD, + /* RIDE_TYPE_MINE_RIDE */ {}, + /* RIDE_TYPE_59 */ {}, + /* RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER */ {}, +}; diff --git a/src/openrct2/ride/RideData.h b/src/openrct2/ride/RideData.h index 6aedfd626e..e42fd0e8a1 100644 --- a/src/openrct2/ride/RideData.h +++ b/src/openrct2/ride/RideData.h @@ -85,6 +85,19 @@ struct rct_ride_lift_data uint8_t maximum_speed; }; +struct RideTypeDescriptor +{ + uint64_t ExtraTrackPieces; +}; + +#ifdef _WIN32 +# define SET_FIELD(fieldname, value) value +#else +# define SET_FIELD(fieldname, value) .fieldname = value +#endif + +extern const RideTypeDescriptor RideTypeDescriptors[RIDE_TYPE_COUNT]; + enum { RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK = (1 << 0), diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 42037f9925..c557855530 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -1078,7 +1078,7 @@ const uint64_t RideTypePossibleTrackConfigurations[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_LOG_FLUME */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_LOG_FLUME_REVERSER), /* RIDE_TYPE_RIVER_RAPIDS */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_RAPIDS), /* RIDE_TYPE_DODGEMS */ 0, - /* RIDE_TYPE_SWINGING_SHIP */ 0, + /* RIDE_TYPE_SWINGING_SHIP */ 0, /* RIDE_TYPE_SWINGING_INVERTER_SHIP */ 0, /* RIDE_TYPE_FOOD_STALL */ 0, /* RIDE_TYPE_1D */ 0, @@ -1101,12 +1101,12 @@ const uint64_t RideTypePossibleTrackConfigurations[RIDE_TYPE_COUNT] = { /* RIDE_TYPE_TWIST */ 0, /* RIDE_TYPE_HAUNTED_HOUSE */ 0, /* RIDE_TYPE_FIRST_AID */ 0, - /* RIDE_TYPE_CIRCUS */ 0, + /* RIDE_TYPE_CIRCUS */ 0, /* RIDE_TYPE_GHOST_TRAIN */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_SPINNING_TUNNEL), /* RIDE_TYPE_TWISTER_ROLLER_COASTER */ (1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HALF_LOOP) | (1ULL << TRACK_CORKSCREW) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BARREL_ROLL) | (1ULL << TRACK_POWERED_LIFT) | (1ULL << TRACK_HALF_LOOP_LARGE) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_SLOPE_STEEP_LONG) | (1ULL << TRACK_CURVE_VERTICAL) | (1ULL << TRACK_QUARTER_LOOP) | (1ULL << TRACK_BOOSTER), /* RIDE_TYPE_WOODEN_ROLLER_COASTER */ (1ULL << TRACK_FLAT) | (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_VERTICAL_LOOP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_WATER_SPLASH) | (1ULL << TRACK_SLOPE_CURVE_BANKED) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING), /* RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_SLOPE_STEEP), - /* RIDE_TYPE_STEEL_WILD_MOUSE */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_STEEP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_ROTATION_CONTROL_TOGGLE), + /* RIDE_TYPE_STEEL_WILD_MOUSE */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_LIFT_HILL_STEEP) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_LONG) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_CURVE_VERY_SMALL) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_ROTATION_CONTROL_TOGGLE), /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_STATION_END) | (1ULL << TRACK_LIFT_HILL) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_INLINE_TWIST_UNINVERTED) | (1ULL << TRACK_QUARTER_LOOP_UNINVERTED), /* RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_SLOPE_VERTICAL) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_INLINE_TWIST_INVERTED) | (1ULL << TRACK_QUARTER_LOOP_INVERTED), /* RIDE_TYPE_FLYING_ROLLER_COASTER */ (1ULL << TRACK_STRAIGHT) | (1ULL << TRACK_FLAT_ROLL_BANKING) | (1ULL << TRACK_SLOPE) | (1ULL << TRACK_SLOPE_STEEP) | (1ULL << TRACK_SLOPE_CURVE) | (1ULL << TRACK_SLOPE_CURVE_STEEP) | (1ULL << TRACK_S_BEND) | (1ULL << TRACK_CURVE_SMALL) | (1ULL << TRACK_CURVE) | (1ULL << TRACK_HELIX_SMALL) | (1ULL << TRACK_BRAKES) | (1ULL << TRACK_ON_RIDE_PHOTO) | (1ULL << TRACK_BLOCK_BRAKES) | (1ULL << TRACK_SLOPE_ROLL_BANKING) | (1ULL << TRACK_INLINE_TWIST_UNINVERTED) | (1ULL << TRACK_HALF_LOOP_UNINVERTED), diff --git a/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp b/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp index 1df9e34be4..eba4f97088 100644 --- a/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp +++ b/src/openrct2/ride/coaster/FlyingRollerCoaster.cpp @@ -18,6 +18,7 @@ #include "../RideData.h" #include "../TrackData.h" #include "../TrackPaint.h" +#include "BolligerMabillardTrack.h" /** rct2: 0x007C6FF4 */ static void flying_rc_track_flat( @@ -6243,6 +6244,22 @@ static void flying_rc_track_brakes( } } +static void flying_rc_track_booster( + paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, + const TileElement* tileElement) +{ + if (!tileElement->AsTrack()->IsInverted()) + { + bolliger_mabillard_track_booster( + session, rideIndex, trackSequence, direction, height, tileElement, METAL_SUPPORTS_TUBES_INVERTED); + } + else + { + // Should not occur, except when converting from other coaster types. + flying_rc_track_brakes(session, rideIndex, trackSequence, direction, height, tileElement); + } +} + /** rct2: 0x007C7674 */ static void flying_rc_track_left_quarter_banked_helix_large_up( paint_session* session, ride_id_t rideIndex, uint8_t trackSequence, uint8_t direction, int32_t height, @@ -17777,6 +17794,8 @@ TRACK_PAINT_FUNCTION get_track_paint_function_flying_rc(int32_t trackType, int32 return flying_rc_track_left_banked_25_deg_down_to_flat; case TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT: return flying_rc_track_right_banked_25_deg_down_to_flat; + case TRACK_ELEM_BOOSTER: + return flying_rc_track_booster; } return nullptr; } diff --git a/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.hpp b/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.hpp new file mode 100644 index 0000000000..2af5515098 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/FlyingRollerCoaster.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "../../RideData.h" +#include "../../Track.h" + +// clang-format off +constexpr const RideTypeDescriptor FlyingRollerCoasterRTD = +{ + SET_FIELD(ExtraTrackPieces, (1ULL << TRACK_BOOSTER)), +}; +// clang-format on diff --git a/src/openrct2/ride/coaster/meta/MiniRollerCoaster.hpp b/src/openrct2/ride/coaster/meta/MiniRollerCoaster.hpp new file mode 100644 index 0000000000..2164537441 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/MiniRollerCoaster.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "../../RideData.h" +#include "../../Track.h" + +// clang-format off +constexpr const RideTypeDescriptor MiniRollerCoasterRTD = +{ + SET_FIELD(ExtraTrackPieces, (1ULL << TRACK_BOOSTER)), +}; +// clang-format on diff --git a/src/openrct2/ride/coaster/meta/SpiralRollerCoaster.hpp b/src/openrct2/ride/coaster/meta/SpiralRollerCoaster.hpp new file mode 100644 index 0000000000..0725da29f7 --- /dev/null +++ b/src/openrct2/ride/coaster/meta/SpiralRollerCoaster.hpp @@ -0,0 +1,11 @@ +#pragma once + +#include "../../RideData.h" +#include "../../Track.h" + +// clang-format off +constexpr const RideTypeDescriptor SpiralRollerCoasterRTD = +{ + SET_FIELD(ExtraTrackPieces, (1ULL << TRACK_BOOSTER)) +}; +// clang-format on