diff --git a/src/ride/track_data.c b/src/ride/track_data.c index a6a37328c8..14e537e086 100644 --- a/src/ride/track_data.c +++ b/src/ride/track_data.c @@ -30179,3 +30179,263 @@ const rct_vehicle_info_list **gTrackVehicleInfo[17] = { TrackVehicleInfoList_8B9F98, TrackVehicleInfoList_8BAD28, }; + +/** rct2: 0x00993D1C */ +const sint16 AlternativeTrackTypes[256] = { + TRACK_ELEM_FLAT_COVERED, // TRACK_ELEM_FLAT + -1, + -1, + -1, + TRACK_ELEM_25_DEG_UP_COVERED, // TRACK_ELEM_25_DEG_UP + TRACK_ELEM_60_DEG_UP_COVERED, // TRACK_ELEM_60_DEG_UP + TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED, // TRACK_ELEM_FLAT_TO_25_DEG_UP + TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED, // TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP + TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED, // TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP + TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED, // TRACK_ELEM_25_DEG_UP_TO_FLAT + TRACK_ELEM_25_DEG_DOWN_COVERED, // TRACK_ELEM_25_DEG_DOWN + TRACK_ELEM_60_DEG_DOWN_COVERED, // TRACK_ELEM_60_DEG_DOWN + TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED, // TRACK_ELEM_FLAT_TO_25_DEG_DOWN + TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED, // TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN + TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED, // TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN + TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED, // TRACK_ELEM_25_DEG_DOWN_TO_FLAT + TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED, // TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES + TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED, // TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + TRACK_ELEM_S_BEND_LEFT_COVERED, // TRACK_ELEM_S_BEND_LEFT + TRACK_ELEM_S_BEND_RIGHT_COVERED, // TRACK_ELEM_S_BEND_RIGHT + -1, + -1, + TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED, // TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES + TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED, // TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, +}; diff --git a/src/ride/track_data.h b/src/ride/track_data.h index 0a9bc8e0b6..2d04712427 100644 --- a/src/ride/track_data.h +++ b/src/ride/track_data.h @@ -58,3 +58,5 @@ typedef struct { } rct_vehicle_info_list; extern const rct_vehicle_info_list **gTrackVehicleInfo[17]; + +extern const sint16 AlternativeTrackTypes[256]; diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 2f6338906a..0820fdeffe 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -2589,7 +2589,10 @@ static bool sub_6CA2DF(int *_trackType, int *_trackDirection, int *_rideIndex, i if (ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_TRACK_ELEMENTS_HAVE_TWO_VARIETIES) && _currentTrackCovered & 1) { if (ride->type != RIDE_TYPE_WATER_COASTER || trackType == TRACK_ELEM_FLAT || trackType == TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES || trackType == TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES) { - trackType = RCT2_GLOBAL(0x00993D1C + trackType, uint8); + sint16 alternativeType = AlternativeTrackTypes[trackType]; + if (alternativeType > -1) { + trackType = (uint8) alternativeType; + } edxRS16 &= 0xFFFE; // unsets 0x1 } }