From 8333266ca5b14838d189b5544dd4e32eaa912e20 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Sun, 25 Jun 2017 12:14:39 +0200 Subject: [PATCH] Name several ride construction flags, clean up ride_data.c, fix "mini coaster" boosters --- src/openrct2/network/network.h | 2 +- src/openrct2/ride/ride.c | 10 +- src/openrct2/ride/ride.h | 2 + src/openrct2/ride/ride_data.c | 184 +++++++++++------------ src/openrct2/ride/ride_data.h | 2 +- src/openrct2/ride/track.c | 14 +- src/openrct2/ride/track.h | 2 +- src/openrct2/ride/track_data.c | 32 ++-- src/openrct2/ride/vehicle.c | 8 +- src/openrct2/windows/ride_construction.c | 110 ++++++-------- src/openrct2/world/wall.cpp | 2 +- 11 files changed, 180 insertions(+), 188 deletions(-) diff --git a/src/openrct2/network/network.h b/src/openrct2/network/network.h index 9b3a182cb1..6302772868 100644 --- a/src/openrct2/network/network.h +++ b/src/openrct2/network/network.h @@ -56,7 +56,7 @@ extern "C" { // This define specifies which version of network stream current build uses. // It is used for making sure only compatible builds get connected, even within // single OpenRCT2 version. -#define NETWORK_STREAM_VERSION "19" +#define NETWORK_STREAM_VERSION "20" #define NETWORK_STREAM_ID OPENRCT2_VERSION "-" NETWORK_STREAM_VERSION #ifdef __cplusplus diff --git a/src/openrct2/ride/ride.c b/src/openrct2/ride/ride.c index 5863ba6016..f6ff079951 100644 --- a/src/openrct2/ride/ride.c +++ b/src/openrct2/ride/ride.c @@ -217,8 +217,8 @@ static void ride_update(sint32 rideIndex); static void ride_update_vehicle_colours(sint32 rideIndex); static void ride_set_vehicle_colours_to_random_preset(rct_ride *ride, uint8 preset_index); void loc_6DDF9C(rct_ride *ride, rct_map_element *mapElement); -bool sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *edxRS16, sint32 *x, sint32 *y, sint32 *z, sint32 *properties); -money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edxRS16, sint32 x, sint32 y, sint32 z); +bool sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *_liftHillAndAlternativeState, sint32 *x, sint32 *y, sint32 *z, sint32 *properties); +money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 liftHillAndAlternativeState, sint32 x, sint32 y, sint32 z); static void ride_set_name_to_track_default(rct_ride * ride, rct_ride_entry * rideEntry); static void ride_set_name_to_vehicle_default(rct_ride * ride, rct_ride_entry * rideEntry); @@ -1343,11 +1343,11 @@ sint32 sub_6C683D(sint32* x, sint32* y, sint32* z, sint32 direction, sint32 type void ride_restore_provisional_track_piece() { if (_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK) { - sint32 x, y, z, direction, type, rideIndex, edxRS16; - if (sub_6CA2DF(&type, &direction, &rideIndex, &edxRS16, &x, &y, &z, NULL)) { + sint32 x, y, z, direction, type, rideIndex, liftHillAndAlternativeState; + if (sub_6CA2DF(&type, &direction, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, NULL)) { ride_construction_remove_ghosts(); } else { - _currentTrackPrice = place_provisional_track_piece(rideIndex, type, direction, edxRS16, x, y, z); + _currentTrackPrice = place_provisional_track_piece(rideIndex, type, direction, liftHillAndAlternativeState, x, y, z); window_ride_construction_update_active_elements(); } } diff --git a/src/openrct2/ride/ride.h b/src/openrct2/ride/ride.h index b4ac78de87..c2d288a8f0 100644 --- a/src/openrct2/ride/ride.h +++ b/src/openrct2/ride/ride.h @@ -942,6 +942,8 @@ extern const rct_ride_properties RideProperties[RIDE_TYPE_COUNT]; #define TURN_MASK_3_ELEMENTS 0x0700 #define TURN_MASK_4_PLUS_ELEMENTS 0xF800 +#define CONSTRUCTION_LIFT_HILL_SELECTED 1 + /** Helper macros until rides are stored in this module. */ rct_ride *get_ride(sint32 index); rct_ride_entry *get_ride_entry(sint32 index); diff --git a/src/openrct2/ride/ride_data.c b/src/openrct2/ride/ride_data.c index bce3075233..f187b098a2 100644 --- a/src/openrct2/ride/ride_data.c +++ b/src/openrct2/ride/ride_data.c @@ -1126,97 +1126,97 @@ const rct_ride_entrance_definition RideEntranceDefinitions[RIDE_ENTRANCE_STYLE_C // rct2: 0x0097D4F0, 0x0097D4F1, 0x0097D4F2, 0x0097D4F4, 0x0097D4F5 const rct_ride_data_4 RideData4[RIDE_TYPE_COUNT] = { - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, 0 }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_STAND_UP_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_INVERTED_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_JUNIOR_ROLLER_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINIATURE_RAILWAY - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MONORAIL - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINI_SUSPENDED_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_BOAT_RIDE - { 20, 20, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_WOODEN_WILD_MOUSE - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_STEEPLECHASE - { 15, 0, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_CAR_RIDE - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_LAUNCHED_FREEFALL - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_BOBSLEIGH_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_OBSERVATION_TOWER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_LOOPING_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_DINGHY_SLIDE - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINE_TRAIN_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_CHAIRLIFT - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER - { 10, 0, RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MAZE - { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_SPIRAL_SLIDE - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_GO_KARTS - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_LOG_FLUME - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_RIVER_RAPIDS - { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_DODGEMS_BEAT, 0 }, // RIDE_TYPE_DODGEMS - { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_PIRATES, 0 }, // RIDE_TYPE_PIRATE_SHIP - { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_SWINGING_INVERTER_SHIP - { 9, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FOOD_STALL - { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_1D - { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_DRINK_STALL - { 8, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_1F - { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SHOP - { 10, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_FAIRGROUND_ORGAN, 0 }, // RIDE_TYPE_MERRY_GO_ROUND - { 9, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_22 - { 6, 25, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_INFORMATION_KIOSK - { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_TOILETS - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_FERRIS_WHEEL - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_MOTION_SIMULATOR - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_3D_CINEMA - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_TOP_SPIN - { 5, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SPACE_RINGS - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_REVERSE_FREEFALL_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_LIFT - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER - { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_CASH_MACHINE - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_TWIST - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_HORROR, 0 }, // RIDE_TYPE_HAUNTED_HOUSE - { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FIRST_AID - { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_CIRCUS_SHOW, 0 }, // RIDE_TYPE_CIRCUS_SHOW - { 15, 0, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_HORROR, 0 }, // RIDE_TYPE_GHOST_TRAIN - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_TWISTER_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_WOODEN_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_WILD_MOUSE - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED, MUSIC_STYLE_ROCK, RIDE_TYPE_FLYING_ROLLER_COASTER_ALT }, // RIDE_TYPE_FLYING_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FLYING_ROLLER_COASTER_ALT - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_VIRGINIA_REEL - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_SPLASH_BOATS - { 15, 0, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_HELICOPTERS - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_SUSPENDED_MONORAIL - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_REVERSER_ROLLER_COASTER - { 15, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_GOLF - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, 0 }, // RIDE_TYPE_GIGA_COASTER - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_ROTO_DROP - { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_FLYING_SAUCERS - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_CROOKED_HOUSE - { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MONORAIL_CYCLES - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_COMPACT_INVERTED_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_WATER_COASTER - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER - { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_EGYPTIAN, 0 }, // RIDE_TYPE_MAGIC_CARPET - { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_SUBMARINE_RIDE - { 10, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_RIVER_RAFTS - { 7, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_50 - { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_ENTERPRISE - { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_52 - { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_53 - { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_54 - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_55 - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_INVERTED_IMPULSE_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_ROLLER_COASTER - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINE_RIDE - { 20, 20, RIDE_TYPE_FLAG4_0 | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_59 - { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, 0 }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_STAND_UP_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_INVERTED_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_JUNIOR_ROLLER_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINIATURE_RAILWAY + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MONORAIL + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINI_SUSPENDED_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_BOAT_RIDE + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_WOODEN_WILD_MOUSE + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_STEEPLECHASE + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_CAR_RIDE + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_LAUNCHED_FREEFALL + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_BOBSLEIGH_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_OBSERVATION_TOWER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_LOOPING_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_DINGHY_SLIDE + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINE_TRAIN_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_CHAIRLIFT + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER + { 10, 0, RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MAZE + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_SPIRAL_SLIDE + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_GO_KARTS + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_LOG_FLUME + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_RIVER_RAPIDS + { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_DODGEMS_BEAT, 0 }, // RIDE_TYPE_DODGEMS + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_PIRATES, 0 }, // RIDE_TYPE_PIRATE_SHIP + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_SWINGING_INVERTER_SHIP + { 9, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FOOD_STALL + { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_1D + { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_DRINK_STALL + { 8, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_1F + { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SHOP + { 10, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_FAIRGROUND_ORGAN, 0 }, // RIDE_TYPE_MERRY_GO_ROUND + { 9, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_22 + { 6, 25, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_INFORMATION_KIOSK + { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_TOILETS + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_FERRIS_WHEEL + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_MOTION_SIMULATOR + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_3D_CINEMA + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_TOP_SPIN + { 5, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SPACE_RINGS + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_REVERSE_FREEFALL_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_LIFT + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER + { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_CASH_MACHINE + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_TWIST + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_HORROR, 0 }, // RIDE_TYPE_HAUNTED_HOUSE + { 0, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FIRST_AID + { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_CIRCUS_SHOW, 0 }, // RIDE_TYPE_CIRCUS_SHOW + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_HORROR, 0 }, // RIDE_TYPE_GHOST_TRAIN + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_TWISTER_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_WOODEN_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_WILD_MOUSE + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED, MUSIC_STYLE_ROCK, RIDE_TYPE_FLYING_ROLLER_COASTER_ALT }, // RIDE_TYPE_FLYING_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT | RIDE_TYPE_FLAG4_START_CONSTRUCTION_INVERTED, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_FLYING_ROLLER_COASTER_ALT + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_VIRGINIA_REEL + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_SPLASH_BOATS + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_HELICOPTERS + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_TRANSPORT_RIDE, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_SUSPENDED_MONORAIL + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_REVERSER_ROLLER_COASTER + { 15, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_GOLF + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_ALLOW_CABLE_LIFT_HILL | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_3, 0 }, // RIDE_TYPE_GIGA_COASTER + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_ROTO_DROP + { 15, 0, RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_FLYING_SAUCERS + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_CROOKED_HOUSE + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MONORAIL_CYCLES + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_TECHNO, 0 }, // RIDE_TYPE_COMPACT_INVERTED_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_WATER_COASTER + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER + { 15, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_EGYPTIAN, 0 }, // RIDE_TYPE_MAGIC_CARPET + { 10, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS, MUSIC_STYLE_WATER, 0 }, // RIDE_TYPE_SUBMARINE_RIDE + { 10, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_ALLOW_MORE_VEHICLES_THAN_STATION_FITS | RIDE_TYPE_FLAG4_SLIGHTLY_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_RIVER_RAFTS + { 7, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_50 + { 20, 0, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_SINGLE_SESSION | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_ENTERPRISE + { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_52 + { 15, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_53 + { 12, 0, 0, MUSIC_STYLE_GENTLE, 0 }, // RIDE_TYPE_54 + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_55 + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_INVERTED_IMPULSE_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_SUMMER, 0 }, // RIDE_TYPE_MINI_ROLLER_COASTER + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_WILD_WEST, 0 }, // RIDE_TYPE_MINE_RIDE + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK | RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK_STYLE_2, 0 }, // RIDE_TYPE_59 + { 20, 20, RIDE_TYPE_FLAG4_ALLOW_MUSIC | RIDE_TYPE_FLAG4_PEEP_CHECK_GFORCES | RIDE_TYPE_FLAG4_HAS_ENTRANCE_EXIT | RIDE_TYPE_FLAG4_HAS_AIR_TIME | RIDE_TYPE_FLAG4_ALLOW_MULTIPLE_CIRCUITS | RIDE_TYPE_FLAG4_SHOW_IN_TRACK_DESIGNER | RIDE_TYPE_FLAG4_INTERESTING_TO_LOOK_AT, MUSIC_STYLE_ROCK, 0 }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER }; // rct2: 0x0097DD78 @@ -2409,7 +2409,7 @@ const rct_ride_properties RideProperties[RIDE_TYPE_COUNT] = { RIDE_TYPE_FLAG_HAS_DATA_LOGGING | RIDE_TYPE_FLAG_HAS_DROPS | RIDE_TYPE_FLAG_HAS_LOAD_OPTIONS | RIDE_TYPE_FLAG_PEEP_WILL_RIDE_AGAIN | RIDE_TYPE_FLAG_HAS_VEHICLE_COLOURS | RIDE_TYPE_FLAG_CHECK_FOR_STALLING | RIDE_TYPE_FLAG_HAS_TRACK | RIDE_TYPE_FLAG_HAS_LARGE_CURVES | RIDE_TYPE_FLAG_SUPPORTS_MULTIPLE_TRACK_COLOUR, - 0, 0, 0, 0, 0, 0 }, // RIDE_TYPE_MINI_ROLLER_COASTER + 0, 0, 0, 0, 68, 1 }, // RIDE_TYPE_MINI_ROLLER_COASTER {RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_MAIN | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_ADDITIONAL | RIDE_TYPE_FLAG_HAS_TRACK_COLOUR_SUPPORTS | RIDE_TYPE_FLAG_HAS_LEAVE_WHEN_ANOTHER_VEHICLE_ARRIVES_AT_STATION | RIDE_TYPE_FLAG_CAN_SYNCHRONISE_ADJACENT_STATIONS | RIDE_TYPE_FLAG_HAS_G_FORCES | diff --git a/src/openrct2/ride/ride_data.h b/src/openrct2/ride/ride_data.h index 56159c2c1b..ef98012bd0 100644 --- a/src/openrct2/ride/ride_data.h +++ b/src/openrct2/ride/ride_data.h @@ -103,7 +103,7 @@ typedef struct rct_ride_lift_data { } rct_ride_lift_data; enum { - RIDE_TYPE_FLAG4_0 = (1 << 0), + RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK = (1 << 0), RIDE_TYPE_FLAG4_MUSIC_ON_DEFAULT = (1 << 1), RIDE_TYPE_FLAG4_ALLOW_MUSIC = (1 << 2), RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE = (1 << 3), // Used by the Flying RC, Lay-down RC, Multi-dimension RC diff --git a/src/openrct2/ride/track.c b/src/openrct2/ride/track.c index 9a1fb4a7a9..6f71ed15cf 100644 --- a/src/openrct2/ride/track.c +++ b/src/openrct2/ride/track.c @@ -914,7 +914,7 @@ static bool track_remove_station_element(sint32 x, sint32 y, sint32 z, sint32 di return true; } -static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 originY, sint32 originZ, sint32 direction, sint32 properties_1, sint32 properties_2, sint32 properties_3, sint32 edx_flags, sint32 flags) +static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 originY, sint32 originZ, sint32 direction, sint32 properties_1, sint32 properties_2, sint32 properties_3, sint32 liftHillAndAlternativeState, sint32 flags) { rct_ride *ride = get_ride(rideIndex); if (ride == NULL) @@ -972,7 +972,7 @@ static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 return MONEY32_UNDEFINED; } } - if ((edx_flags & (1 << 0)) && !(enabledTrackPieces & (1ULL << TRACK_LIFT_HILL_STEEP)) && !gCheatsEnableChainLiftOnAllTrack) { + if ((liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED) && !(enabledTrackPieces & (1ULL << TRACK_LIFT_HILL_STEEP)) && !gCheatsEnableChainLiftOnAllTrack) { if (TrackFlags[type] & TRACK_ELEM_FLAG_0400) { gGameCommandErrorText = STR_TOO_STEEP_FOR_LIFT_HILL; return MONEY32_UNDEFINED; @@ -1306,7 +1306,7 @@ static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 case TRACK_ELEM_60_DEG_UP_TO_FLAT: case TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT: case TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT: - if (!(edx_flags & 1)) + if (!(liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED)) break; //Fall Through case TRACK_ELEM_CABLE_LIFT_HILL: @@ -1336,7 +1336,7 @@ static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 uint8 map_type = direction; map_type |= MAP_ELEMENT_TYPE_TRACK; - if (edx_flags & 1){ + if (liftHillAndAlternativeState & CONSTRUCTION_LIFT_HILL_SELECTED){ map_type |= (1 << 7); } mapElement->type = map_type; @@ -1371,8 +1371,8 @@ static money32 track_place(sint32 rideIndex, sint32 type, sint32 originX, sint32 } uint8 colour = properties_2; - if (edx_flags & (1 << 1)){ - colour |= (1 << 2); + if (liftHillAndAlternativeState & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE){ + colour |= TRACK_ELEMENT_COLOUR_FLAG_INVERTED; } mapElement->properties.track.colour |= colour; @@ -2201,7 +2201,7 @@ sint32 track_get_actual_bank(rct_map_element *mapElement, sint32 bank) sint32 track_get_actual_bank_2(sint32 rideType, sint32 trackColour, sint32 bank) { if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (trackColour & 4) { + if (trackColour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED) { if (bank == TRACK_BANK_NONE) { bank = TRACK_BANK_UPSIDE_DOWN; } else if (bank == TRACK_BANK_UPSIDE_DOWN) { diff --git a/src/openrct2/ride/track.h b/src/openrct2/ride/track.h index 66b37be83a..e177eab650 100644 --- a/src/openrct2/ride/track.h +++ b/src/openrct2/ride/track.h @@ -203,7 +203,7 @@ enum { TRACK_ELEM_FLAG_0400 = (1 << 10), TRACK_ELEM_FLAG_HELIX = (1 << 11), TRACK_ELEM_FLAG_1000 = (1 << 12), - TRACK_ELEM_FLAG_2000 = (1 << 13), + TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT = (1 << 13), TRACK_ELEM_FLAG_4000 = (1 << 14), TRACK_ELEM_FLAG_8000 = (1 << 15), }; diff --git a/src/openrct2/ride/track_data.c b/src/openrct2/ride/track_data.c index 5a231b897b..0b3214dfd4 100644 --- a/src/openrct2/ride/track_data.c +++ b/src/openrct2/ride/track_data.c @@ -32971,10 +32971,10 @@ const uint16 FlatTrackFlags[] = { /* */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, /* */ TRACK_ELEM_FLAG_8000, /* */ TRACK_ELEM_FLAG_8000, - /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, + /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* */ 0, /* */ 0, /* */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, @@ -32983,10 +32983,10 @@ const uint16 FlatTrackFlags[] = { /* */ TRACK_ELEM_FLAG_TURN_RIGHT, /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, - /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, + /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* */ TRACK_ELEM_FLAG_TURN_LEFT, /* */ TRACK_ELEM_FLAG_TURN_RIGHT, /* */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, @@ -33229,10 +33229,10 @@ const uint16 TrackFlags[] = { /* TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, /* TRACK_ELEM_LEFT_BANK */ TRACK_ELEM_FLAG_8000, /* TRACK_ELEM_RIGHT_BANK */ TRACK_ELEM_FLAG_8000, - /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TRACK_ELEM_S_BEND_LEFT */ 0, /* TRACK_ELEM_S_BEND_RIGHT */ 0, /* TRACK_ELEM_LEFT_VERTICAL_LOOP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, @@ -33241,10 +33241,10 @@ const uint16 TrackFlags[] = { /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_BANK */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, - /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, - /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_2000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000 | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE */ TRACK_ELEM_FLAG_TURN_LEFT, /* TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TRACK_ELEM_LEFT_TWIST_DOWN_TO_UP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, diff --git a/src/openrct2/ride/vehicle.c b/src/openrct2/ride/vehicle.c index eefccfead2..decc156146 100644 --- a/src/openrct2/ride/vehicle.c +++ b/src/openrct2/ride/vehicle.c @@ -7410,7 +7410,7 @@ loc_6DB358: vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_11; sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (mapElement->properties.track.colour & 4) { + if (mapElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_11; } } @@ -7756,7 +7756,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh // Update VEHICLE_UPDATE_FLAG_11 vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_11; if (RideData4[ride->type].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (mapElement->properties.track.colour & 4) { + if (mapElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_11; } } @@ -8124,7 +8124,7 @@ loc_6DC476: sint32 rideType = get_ride(mapElement->properties.track.ride_index)->type; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_11; if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (mapElement->properties.track.colour & (1 << 2)) { + if (mapElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_11; } } @@ -8341,7 +8341,7 @@ loc_6DCA9A: rideType = get_ride(mapElement->properties.track.ride_index)->type; vehicle->update_flags &= ~VEHICLE_UPDATE_FLAG_11; if (RideData4[rideType].flags & RIDE_TYPE_FLAG4_HAS_ALTERNATIVE_TRACK_TYPE) { - if (mapElement->properties.track.colour & (1 << 2)) { + if (mapElement->properties.track.colour & TRACK_ELEMENT_COLOUR_FLAG_INVERTED) { vehicle->update_flags |= VEHICLE_UPDATE_FLAG_11; } } diff --git a/src/openrct2/windows/ride_construction.c b/src/openrct2/windows/ride_construction.c index 3e856d2eda..9de66a5540 100644 --- a/src/openrct2/windows/ride_construction.c +++ b/src/openrct2/windows/ride_construction.c @@ -441,17 +441,7 @@ rct_string_id RideConfigurationStringIds[] = { #pragma endregion -#pragma pack(push, 1) -union { - uint64 ab; - struct { - uint32 a; - uint32 b; - }; -} _enabledRidePieces; -assert_struct_size(_enabledRidePieces, 8); -#pragma pack(pop) - +uint64 _enabledRidePieces; static bool _trackPlaceCtrlState; static sint32 _trackPlaceCtrlZ; static bool _trackPlaceShiftState; @@ -483,7 +473,7 @@ static void window_ride_construction_draw_track_piece( sint32 width, sint32 height ); static void window_ride_construction_update_enabled_track_pieces(); -bool sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *edxRS16, sint32 *x, sint32 *y, sint32 *z, sint32 *properties); +bool sub_6CA2DF(sint32 *trackType, sint32 *trackDirection, sint32 *rideIndex, sint32 *_liftHillAndAlternativeState, sint32 *x, sint32 *y, sint32 *z, sint32 *properties); static void sub_6CBCE2( sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edx, sint32 originX, sint32 originY, sint32 originZ @@ -492,7 +482,7 @@ static void window_ride_construction_update_map_selection(); static void window_ride_construction_update_possible_ride_configurations(); static void window_ride_construction_update_widgets(rct_window *w); static void window_ride_construction_select_map_tiles(rct_ride *ride, sint32 trackType, sint32 trackDirection, sint32 x, sint32 y); -money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edxRS16, sint32 x, sint32 y, sint32 z); +money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 liftHillAndAlternativeState, sint32 x, sint32 y, sint32 z); static void window_ride_construction_show_special_track_dropdown(rct_window *w, rct_widget *widget); static void ride_selected_track_set_seat_rotation(sint32 seatRotation); static void loc_6C7502(sint32 al); @@ -522,7 +512,7 @@ static const rct_string_id RideConstructionSeatAngleRotationStrings[] = { static bool is_track_enabled(sint32 trackFlagIndex) { - return _enabledRidePieces.ab & (1ULL << trackFlagIndex); + return _enabledRidePieces & (1ULL << trackFlagIndex); } static sint32 ride_get_alternative_type(rct_ride *ride) @@ -1122,7 +1112,7 @@ static void window_ride_construction_resize(rct_window *w) if (_currentTrackCurve != TRACK_CURVE_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_DOWN_60) { disabledWidgets |= (1ULL << WIDX_SLOPE_DOWN); } - if ((_currentTrackLiftHill & 1) && !gCheatsEnableChainLiftOnAllTrack) { + if ((_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) && !gCheatsEnableChainLiftOnAllTrack) { if (_currentTrackSlopeEnd != TRACK_SLOPE_NONE && !is_track_enabled(TRACK_LIFT_HILL_CURVE)) { disabledWidgets |= (1ULL << WIDX_LEFT_CURVE_SMALL) | @@ -1523,8 +1513,8 @@ static void window_ride_construction_mousedown(rct_widgetindex widgetIndex, rct_ break; case WIDX_CHAIN_LIFT: ride_construction_invalidate_current_track(); - _currentTrackLiftHill ^= 1; - if (_currentTrackLiftHill & 1) { + _currentTrackLiftHill ^= CONSTRUCTION_LIFT_HILL_SELECTED; + if (_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) { _currentTrackAlternative &= ~RIDE_TYPE_ALTERNATIVE_TRACK_PIECES; } _currentTrackPrice = MONEY32_UNDEFINED; @@ -1596,7 +1586,7 @@ static void window_ride_construction_mousedown(rct_widgetindex widgetIndex, rct_ case WIDX_O_TRACK: ride_construction_invalidate_current_track(); _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_PIECES; - _currentTrackLiftHill &= ~1; + _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; _currentTrackPrice = MONEY32_UNDEFINED; window_ride_construction_update_active_elements(); break; @@ -1646,7 +1636,7 @@ static void window_ride_construction_dropdown(rct_window *w, rct_widgetindex wid case TRACK_ELEM_LEFT_VERTICAL_LOOP: case TRACK_ELEM_RIGHT_VERTICAL_LOOP: _currentTrackBankEnd = TRACK_BANK_NONE; - _currentTrackLiftHill &= ~1; + _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; break; } _currentTrackCurve = trackPiece | 0x100; @@ -1659,13 +1649,13 @@ static void window_ride_construction_dropdown(rct_window *w, rct_widgetindex wid */ static void window_ride_construction_construct(rct_window *w) { - sint32 trackType, trackDirection, rideIndex, edxRS16, x, y, z, properties; + sint32 trackType, trackDirection, rideIndex, liftHillAndAlternativeState, x, y, z, properties; track_begin_end trackBeginEnd; _currentTrackPrice = MONEY32_UNDEFINED; _trackPlaceCost = MONEY32_UNDEFINED; ride_construction_invalidate_current_track(); - if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, &x, &y, &z, &properties)) { + if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, &properties)) { window_ride_construction_update_active_elements(); return; } @@ -1684,7 +1674,7 @@ static void window_ride_construction_construct(rct_window *w) x, (GAME_COMMAND_FLAG_APPLY) | (trackDirection << 8), y, - rideIndex | (trackType << 8) | (edxRS16 << 16), + rideIndex | (trackType << 8) | (liftHillAndAlternativeState << 16), GAME_COMMAND_PLACE_TRACK, z | (properties << 16), 0 @@ -2222,8 +2212,8 @@ static void window_ride_construction_paint(rct_window *w, rct_drawpixelinfo *dpi if (widget->type == WWT_EMPTY) return; - sint32 trackType, trackDirection, rideIndex, edxRS16; - if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, NULL, NULL, NULL, NULL)) + sint32 trackType, trackDirection, rideIndex, liftHillAndAlternativeState; + if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, NULL, NULL, NULL, NULL)) return; // Draw track piece @@ -2232,7 +2222,7 @@ static void window_ride_construction_paint(rct_window *w, rct_drawpixelinfo *dpi width = widget->right - widget->left - 1; height = widget->bottom - widget->top - 1; if (clip_drawpixelinfo(&clipdpi, dpi, x, y, width, height)) { - window_ride_construction_draw_track_piece(w, &clipdpi, rideIndex, trackType, trackDirection, edxRS16, width, height); + window_ride_construction_draw_track_piece(w, &clipdpi, rideIndex, trackType, trackDirection, liftHillAndAlternativeState, width, height); } // Draw cost @@ -2584,34 +2574,34 @@ static bool sub_6CA2DF_get_track_element(uint8 *trackElement) { * @param[out] _trackType (dh) * @param[out] _trackDirection (bh) * @param[out] _rideIndex (dl) - * @param[out] _edxRS16 (edxrs16) + * @param[out] _liftHillAndAlternativeState (liftHillAndAlternativeState) * @param[out] _x (ax) * @param[out] _y (cx) * @param[out] _z (di) * @param[out] _properties (edirs16) * @return (CF) */ -bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, sint32 *_edxRS16, sint32 *_x, sint32 *_y, sint32 *_z, sint32 *_properties) { +bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, sint32 *_liftHillAndAlternativeState, sint32 *_x, sint32 *_y, sint32 *_z, sint32 *_properties) { uint8 trackType, trackDirection, rideIndex; - uint16 z, x, y, edxRS16, properties; + uint16 z, x, y, liftHillAndAlternativeState, properties; if (!sub_6CA2DF_get_track_element(&trackType)) { return true; } - edxRS16 = 0; + liftHillAndAlternativeState = 0; rideIndex = _currentRideIndex; - if (_currentTrackLiftHill & 1) { - edxRS16 |= 0x1; + if (_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) { + liftHillAndAlternativeState |= CONSTRUCTION_LIFT_HILL_SELECTED; } if (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) { - edxRS16 |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; + liftHillAndAlternativeState |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } rct_ride *ride = get_ride(rideIndex); - if (_enabledRidePieces.b & (1 << 8)) { + if (_enabledRidePieces & (1ULL << TRACK_SLOPE_STEEP_LONG)) { switch (trackType) { case TRACK_ELEM_FLAT_TO_60_DEG_UP: trackType = TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE; @@ -2643,7 +2633,7 @@ bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, if (alternativeType > -1) { trackType = (uint8) alternativeType; } - edxRS16 &= 0xFFFE; // unsets 0x1 + liftHillAndAlternativeState &= ~CONSTRUCTION_LIFT_HILL_SELECTED; } } @@ -2691,8 +2681,8 @@ bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, bool do_loc_6CAF26 = false; - if (!(_enabledRidePieces.a & (1 << 5))) { - if (TrackFlags[trackType] & TRACK_ELEM_FLAG_2000) { + if (!(_enabledRidePieces & (1ULL << TRACK_LIFT_HILL_CURVE))) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT) { do_loc_6CAF26 = true; } } @@ -2702,11 +2692,11 @@ bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, } if (do_loc_6CAF26 && !gCheatsEnableChainLiftOnAllTrack) { - edxRS16 &= 0xFFFE; //unsets 0x1 - _currentTrackLiftHill &= 0xFE; + liftHillAndAlternativeState &= ~CONSTRUCTION_LIFT_HILL_SELECTED; + _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; if (trackType == TRACK_ELEM_LEFT_CURVED_LIFT_HILL || trackType == TRACK_ELEM_RIGHT_CURVED_LIFT_HILL) { - edxRS16 |= 0x1; + liftHillAndAlternativeState |= CONSTRUCTION_LIFT_HILL_SELECTED; } } @@ -2721,7 +2711,7 @@ bool sub_6CA2DF(sint32 *_trackType, sint32 *_trackDirection, sint32 *_rideIndex, if (_trackType != NULL) *_trackType = trackType; if (_trackDirection != NULL) *_trackDirection = trackDirection; if (_rideIndex != NULL) *_rideIndex = rideIndex; - if (_edxRS16 != NULL) *_edxRS16 = edxRS16; + if (_liftHillAndAlternativeState != NULL) *_liftHillAndAlternativeState = liftHillAndAlternativeState; if (_x != NULL) *_x = x; if (_y != NULL) *_y = y; if (_z != NULL) *_z = z; @@ -2745,18 +2735,18 @@ static void window_ride_construction_update_enabled_track_pieces() sint32 rideType = (_currentTrackAlternative & RIDE_TYPE_ALTERNATIVE_TRACK_TYPE) ? RideData4[ride->type].alternate_type : ride->type; if (!gConfigInterface.select_by_track_type) { - _enabledRidePieces.ab = rideEntry->enabledTrackPieces & RideTypePossibleTrackConfigurations[rideType]; + _enabledRidePieces = rideEntry->enabledTrackPieces & RideTypePossibleTrackConfigurations[rideType]; } else { if (track_type_has_ride_groups(rideType)) { const ride_group * rideGroup = get_ride_group(rideType, rideEntry); - _enabledRidePieces.ab = rideGroup->available_track_pieces; + _enabledRidePieces = rideGroup->available_track_pieces; } else { - _enabledRidePieces.ab = RideTypePossibleTrackConfigurations[rideType]; + _enabledRidePieces = RideTypePossibleTrackConfigurations[rideType]; } } @@ -2767,7 +2757,7 @@ static void window_ride_construction_update_enabled_track_pieces() * * rct2: 0x006CA162 */ -money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 edxRS16, sint32 x, sint32 y, sint32 z) +money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 trackDirection, sint32 liftHillAndAlternativeState, sint32 x, sint32 y, sint32 z) { rct_ride *ride; money32 result; @@ -2775,7 +2765,7 @@ money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 ride_construction_remove_ghosts(); ride = get_ride(rideIndex); if (ride->type == RIDE_TYPE_MAZE) { - result = game_do_command(x, 105 | (4 << 8), y, rideIndex | (trackType << 8) | (edxRS16 << 16), GAME_COMMAND_SET_MAZE_TRACK, z, 0); + result = game_do_command(x, 105 | (4 << 8), y, rideIndex | (trackType << 8) | (liftHillAndAlternativeState << 16), GAME_COMMAND_SET_MAZE_TRACK, z, 0); if (result == MONEY32_UNDEFINED) return result; @@ -2790,7 +2780,7 @@ money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 return result; } else { - result = game_do_command(x, 105 | (trackDirection << 8), y, rideIndex | (trackType << 8) | (edxRS16 << 16), GAME_COMMAND_PLACE_TRACK, z, 0); + result = game_do_command(x, 105 | (trackDirection << 8), y, rideIndex | (trackType << 8) | (liftHillAndAlternativeState << 16), GAME_COMMAND_PLACE_TRACK, z, 0); if (result == MONEY32_UNDEFINED) return result; @@ -2817,7 +2807,7 @@ money32 place_provisional_track_piece(sint32 rideIndex, sint32 trackType, sint32 */ void sub_6C94D8() { - sint32 x, y, z, direction, type, rideIndex, edxRS16; + sint32 x, y, z, direction, type, rideIndex, liftHillAndAlternativeState; // Recheck if area is fine for new track. // Set by footpath placement @@ -2830,10 +2820,10 @@ void sub_6C94D8() case RIDE_CONSTRUCTION_STATE_FRONT: case RIDE_CONSTRUCTION_STATE_BACK: if (!(_currentTrackSelectionFlags & TRACK_SELECTION_FLAG_TRACK)) { - if (sub_6CA2DF(&type, &direction, &rideIndex, &edxRS16, &x, &y, &z, NULL)) { + if (sub_6CA2DF(&type, &direction, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, NULL)) { ride_construction_remove_ghosts(); } else { - _currentTrackPrice = place_provisional_track_piece(rideIndex, type, direction, edxRS16, x, y, z); + _currentTrackPrice = place_provisional_track_piece(rideIndex, type, direction, liftHillAndAlternativeState, x, y, z); window_ride_construction_update_active_elements(); } } @@ -3506,7 +3496,7 @@ static void window_ride_construction_update_widgets(rct_window *w) pressedWidgets |= (1ULL << widgetIndex); } - if (_currentTrackLiftHill & 1) + if (_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) pressedWidgets |= (1 << WIDX_CHAIN_LIFT); w->pressed_widgets = pressedWidgets; @@ -3616,7 +3606,7 @@ static void loc_6C7502(sint32 al) _currentTrackPrice = MONEY32_UNDEFINED; if (_rideConstructionState == RIDE_CONSTRUCTION_STATE_FRONT) { if (al != 2 && al != 4 && al != 0) { - _currentTrackLiftHill &= ~1; + _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; } } window_ride_construction_update_active_elements(); @@ -3684,8 +3674,8 @@ void ride_construction_toolupdate_construct(sint32 screenX, sint32 screenY) gMapSelectionTiles[1].x = -1; gMapSelectionTiles[1].y = -1; - sint32 trackType, trackDirection, rideIndex, edxRS16; - if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, NULL, NULL, NULL, NULL)) { + sint32 trackType, trackDirection, rideIndex, liftHillAndAlternativeState; + if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, NULL, NULL, NULL, NULL)) { ride_construction_invalidate_current_track(); map_invalidate_map_selection_tiles(); return; @@ -3745,8 +3735,8 @@ void ride_construction_toolupdate_construct(sint32 screenX, sint32 screenY) _previousTrackPieceZ = z; if (ride->type == RIDE_TYPE_MAZE) { for (;;) { - sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, &x, &y, &z, NULL); - _currentTrackPrice = place_provisional_track_piece(rideIndex, trackType, trackDirection, edxRS16, x, y, z); + sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, NULL); + _currentTrackPrice = place_provisional_track_piece(rideIndex, trackType, trackDirection, liftHillAndAlternativeState, x, y, z); if (_currentTrackPrice != MONEY32_UNDEFINED) break; @@ -3768,8 +3758,8 @@ void ride_construction_toolupdate_construct(sint32 screenX, sint32 screenY) } for (;;) { - sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, &x, &y, &z, NULL); - _currentTrackPrice = place_provisional_track_piece(rideIndex, trackType, trackDirection, edxRS16, x, y, z); + sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, NULL); + _currentTrackPrice = place_provisional_track_piece(rideIndex, trackType, trackDirection, liftHillAndAlternativeState, x, y, z); if (_currentTrackPrice != MONEY32_UNDEFINED) break; @@ -3844,13 +3834,13 @@ void ride_construction_toolupdate_entrance_exit(sint32 screenX, sint32 screenY) void ride_construction_tooldown_construct(sint32 screenX, sint32 screenY) { const CursorState * state = context_get_cursor_state(); - sint32 trackType, trackDirection, rideIndex, edxRS16, x, y, z, properties, highestZ; + sint32 trackType, trackDirection, rideIndex, liftHillAndAlternativeState, x, y, z, properties, highestZ; rct_window *w; map_invalidate_map_selection_tiles(); ride_construction_invalidate_current_track(); - if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &edxRS16, &x, &y, &z, &properties)) + if (sub_6CA2DF(&trackType, &trackDirection, &rideIndex, &liftHillAndAlternativeState, &x, &y, &z, &properties)) return; _currentTrackPieceType = trackType; @@ -4383,7 +4373,7 @@ void window_ride_construction_keyboard_shortcut_use_track_default() window_event_mouse_down_call(w, WIDX_LEVEL); } - if (!widget_is_disabled(w, WIDX_CHAIN_LIFT) && w->widgets[WIDX_CHAIN_LIFT].type != WWT_EMPTY && _currentTrackLiftHill & 1) { + if (!widget_is_disabled(w, WIDX_CHAIN_LIFT) && w->widgets[WIDX_CHAIN_LIFT].type != WWT_EMPTY && _currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) { window_event_mouse_down_call(w, WIDX_CHAIN_LIFT); } diff --git a/src/openrct2/world/wall.cpp b/src/openrct2/world/wall.cpp index 083f41815b..a7a65f7bb7 100644 --- a/src/openrct2/world/wall.cpp +++ b/src/openrct2/world/wall.cpp @@ -84,7 +84,7 @@ static bool WallCheckObstructionWithTrack(rct_scenery_entry * wall, } // The following code checks if a door is allowed on the track - if (!(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_0)) + if (!(RideData4[ride->type].flags & RIDE_TYPE_FLAG4_ALLOW_DOORS_ON_TRACK)) { return false; }