diff --git a/src/ride/ride.c b/src/ride/ride.c index 63e147cb57..a79a65177c 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -1429,7 +1429,7 @@ static void ride_construction_reset_current_piece() ride = get_ride(_currentRideIndex); if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_HAS_NO_TRACK) || ride->num_stations == 0) { - _currentTrackCurve = RCT2_GLOBAL(0x0097CC68 + (ride->type * 2), uint8) | 0x100; + _currentTrackCurve = RideConstructionDefaultTrackType[ride->type] | 0x100; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0; @@ -1882,7 +1882,7 @@ int sub_6CC3FB(int rideIndex) ride = get_ride(_currentRideIndex); - _currentTrackCurve = RCT2_ADDRESS(0x0097CC68, uint8)[ride->type * 2] | 0x100; + _currentTrackCurve = RideConstructionDefaultTrackType[ride->type] | 0x100; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0; @@ -4578,8 +4578,8 @@ static rct_vehicle *vehicle_create_car( direction = 4; } else { if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_16)) { - if (RCT2_GLOBAL(0x0097CC68 + (ride->type * 2), uint8) != FLAT_TRACK_ELEM_1_X_4_B) { - if (RCT2_GLOBAL(0x0097CC68 + (ride->type * 2), uint8) != FLAT_TRACK_ELEM_1_X_4_A) { + if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_B) { + if (RideConstructionDefaultTrackType[ride->type] != FLAT_TRACK_ELEM_1_X_4_A) { if (ride->type == RIDE_TYPE_ENTERPRISE) { direction += 5; } else { diff --git a/src/ride/ride_data.c b/src/ride/ride_data.c index 375be40400..1cc181e264 100644 --- a/src/ride/ride_data.c +++ b/src/ride/ride_data.c @@ -27,6 +27,7 @@ #include "../localisation/localisation.h" #include "ride.h" #include "ride_data.h" +#include "track.h" #include "../audio/audio.h" #include "../sprites.h" @@ -2387,3 +2388,98 @@ const rct_shop_item_stats ShopItemStats[SHOP_ITEM_COUNT] = { { 5, 16, 16, 20 }, // SHOP_ITEM_ROAST_SAUSAGE { 0, 0, 0, 0 }, // SHOP_ITEM_EMPTY_BOWL_BLUE }; + +/** rct2: 0x0097CC68 */ +const uint8 RideConstructionDefaultTrackType[] = { + TRACK_ELEM_END_STATION, // RIDE_TYPE_SPIRAL_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_STAND_UP_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_INVERTED_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_JUNIOR_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINIATURE_RAILWAY + TRACK_ELEM_END_STATION, // RIDE_TYPE_MONORAIL + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINI_SUSPENDED_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_BOAT_RIDE + TRACK_ELEM_END_STATION, // RIDE_TYPE_WOODEN_WILD_MOUSE + TRACK_ELEM_END_STATION, // RIDE_TYPE_STEEPLECHASE + TRACK_ELEM_END_STATION, // RIDE_TYPE_CAR_RIDE + TRACK_ELEM_TOWER_BASE, // RIDE_TYPE_LAUNCHED_FREEFALL + TRACK_ELEM_END_STATION, // RIDE_TYPE_BOBSLEIGH_COASTER + TRACK_ELEM_TOWER_BASE, // RIDE_TYPE_OBSERVATION_TOWER + TRACK_ELEM_END_STATION, // RIDE_TYPE_LOOPING_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_DINGHY_SLIDE + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINE_TRAIN_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_CHAIRLIFT + TRACK_ELEM_END_STATION, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER + TRACK_ELEM_MAZE, // RIDE_TYPE_MAZE + FLAT_TRACK_ELEM_2_X_2, // RIDE_TYPE_SPIRAL_SLIDE + TRACK_ELEM_END_STATION, // RIDE_TYPE_GO_KARTS + TRACK_ELEM_END_STATION, // RIDE_TYPE_LOG_FLUME + TRACK_ELEM_END_STATION, // RIDE_TYPE_RIVER_RAPIDS + FLAT_TRACK_ELEM_4_X_4, // RIDE_TYPE_DODGEMS + FLAT_TRACK_ELEM_1_X_5, // RIDE_TYPE_PIRATE_SHIP + FLAT_TRACK_ELEM_1_X_4_B, // RIDE_TYPE_SWINGING_INVERTER_SHIP + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_FOOD_STALL + FLAT_TRACK_ELEM_1_X_1_B, // RIDE_TYPE_1D + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_DRINK_STALL + FLAT_TRACK_ELEM_1_X_1_B, // RIDE_TYPE_1F + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_SHOP + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_MERRY_GO_ROUND + FLAT_TRACK_ELEM_1_X_1_B, // RIDE_TYPE_22 + FLAT_TRACK_ELEM_1_X_1_B, // RIDE_TYPE_INFORMATION_KIOSK + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_TOILETS + FLAT_TRACK_ELEM_1_X_4_C, // RIDE_TYPE_FERRIS_WHEEL + FLAT_TRACK_ELEM_2_X_2, // RIDE_TYPE_MOTION_SIMULATOR + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_3D_CINEMA + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_TOP_SPIN + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_SPACE_RINGS + TRACK_ELEM_END_STATION, // RIDE_TYPE_REVERSE_FREEFALL_COASTER + TRACK_ELEM_TOWER_BASE, // RIDE_TYPE_LIFT + TRACK_ELEM_END_STATION, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_CASH_MACHINE + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_TWIST + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_HAUNTED_HOUSE + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_FIRST_AID + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_CIRCUS_SHOW + TRACK_ELEM_END_STATION, // RIDE_TYPE_GHOST_TRAIN + TRACK_ELEM_END_STATION, // RIDE_TYPE_TWISTER_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_WOODEN_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_WILD_MOUSE + TRACK_ELEM_END_STATION, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_38 + TRACK_ELEM_END_STATION, // RIDE_TYPE_FLYING_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_3A + TRACK_ELEM_END_STATION, // RIDE_TYPE_VIRGINIA_REEL + TRACK_ELEM_END_STATION, // RIDE_TYPE_SPLASH_BOATS + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINI_HELICOPTERS + TRACK_ELEM_END_STATION, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_SUSPENDED_MONORAIL + TRACK_ELEM_END_STATION, // RIDE_TYPE_40 + TRACK_ELEM_END_STATION, // RIDE_TYPE_REVERSER_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINI_GOLF + TRACK_ELEM_END_STATION, // RIDE_TYPE_GIGA_COASTER + TRACK_ELEM_TOWER_BASE, // RIDE_TYPE_ROTO_DROP + FLAT_TRACK_ELEM_4_X_4, // RIDE_TYPE_FLYING_SAUCERS + FLAT_TRACK_ELEM_3_X_3, // RIDE_TYPE_CROOKED_HOUSE + TRACK_ELEM_END_STATION, // RIDE_TYPE_MONORAIL_CYCLES + TRACK_ELEM_END_STATION, // RIDE_TYPE_COMPACT_INVERTED_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_WATER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER + FLAT_TRACK_ELEM_1_X_4_A, // RIDE_TYPE_MAGIC_CARPET + TRACK_ELEM_END_STATION, // RIDE_TYPE_SUBMARINE_RIDE + TRACK_ELEM_END_STATION, // RIDE_TYPE_RIVER_RAFTS + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_50 + FLAT_TRACK_ELEM_4_X_4, // RIDE_TYPE_ENTERPRISE + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_52 + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_53 + FLAT_TRACK_ELEM_1_X_1_A, // RIDE_TYPE_54 + TRACK_ELEM_END_STATION, // RIDE_TYPE_55 + TRACK_ELEM_END_STATION, // RIDE_TYPE_INVERTED_IMPULSE_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINI_ROLLER_COASTER + TRACK_ELEM_END_STATION, // RIDE_TYPE_MINE_RIDE + TRACK_ELEM_END_STATION, // RIDE_TYPE_59 + TRACK_ELEM_END_STATION, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER +}; diff --git a/src/ride/ride_data.h b/src/ride/ride_data.h index 13c0a63c5d..b04770d748 100644 --- a/src/ride/ride_data.h +++ b/src/ride/ride_data.h @@ -164,4 +164,6 @@ extern const rating_tuple RideRatings[91]; extern const rct_shop_item_stats ShopItemStats[SHOP_ITEM_COUNT]; +extern const uint8 RideConstructionDefaultTrackType[91]; + #endif diff --git a/src/windows/new_ride.c b/src/windows/new_ride.c index 42c90a8e0f..da7696c00b 100644 --- a/src/windows/new_ride.c +++ b/src/windows/new_ride.c @@ -909,7 +909,7 @@ static void window_new_ride_paint_ride_information(rct_window *w, rct_drawpixeli // Price if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) { // Get price of ride - int unk2 = RCT2_GLOBAL(0x0097CC68 + (item.type * 2), uint8); + int unk2 = RideConstructionDefaultTrackType[item.type]; money32 price = RideTrackCosts[item.type].track_price; if (ride_type_has_flag(item.type, RIDE_TYPE_FLAG_FLAT_RIDE)) { price *= RCT2_ADDRESS(0x0099DE34, uint32)[unk2]; diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 1bb962555b..672405e245 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -573,7 +573,7 @@ rct_window *window_ride_construction_open() if (ride->type == RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER) RCT2_GLOBAL(0x00F440CE, uint8) = 30; - _currentTrackCurve = RCT2_ADDRESS(0x0097CC68, uint8)[ride->type * 2] | 0x100; + _currentTrackCurve = RideConstructionDefaultTrackType[ride->type] | 0x100; _currentTrackSlopeEnd = 0; _currentTrackBankEnd = 0; _currentTrackLiftHill = 0;