diff --git a/src/ride/ride.c b/src/ride/ride.c index 360e0b0133..c45774dec6 100644 --- a/src/ride/ride.c +++ b/src/ride/ride.c @@ -4180,7 +4180,7 @@ static bool ride_check_track_contains_inversions(rct_xy_element *input, rct_xy_e track_circuit_iterator_begin(&it, *input); while (track_circuit_iterator_next(&it)) { trackType = it.current.element->properties.track.type; - if (RCT2_ADDRESS(0x0099423C, uint16)[trackType] & 0x4000) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_4000) { *output = it.current; return true; } @@ -4215,7 +4215,7 @@ static bool ride_check_track_contains_banked(rct_xy_element *input, rct_xy_eleme track_circuit_iterator_begin(&it, *input); while (track_circuit_iterator_next(&it)) { trackType = output->element->properties.track.type; - if (RCT2_ADDRESS(0x0099423C, uint16)[trackType] & 0x8000) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_8000) { *output = it.current; return true; } diff --git a/src/ride/track.c b/src/ride/track.c index 39818411f8..aa6babdf63 100644 --- a/src/ride/track.c +++ b/src/ride/track.c @@ -977,7 +977,7 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in } } if ((edx_flags & (1 << 0)) && !(enabledTrackPieces & (1ULL << TRACK_LIFT_HILL_STEEP)) && !gCheatsEnableChainLiftOnAllTrack) { - if (RCT2_ADDRESS(0x0099423C, uint16)[type] & 0x400) { + if (TrackFlags[type] & TRACK_ELEM_FLAG_0400) { gGameCommandErrorText = STR_TOO_STEEP_FOR_LIFT_HILL; return MONEY32_UNDEFINED; } @@ -1022,10 +1022,10 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in } } - uint16 *trackFlags = (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? - RCT2_ADDRESS(0x0099443C, uint16) : - RCT2_ADDRESS(0x0099423C, uint16); - if (trackFlags[type] & 0x100) { + const uint16 *trackFlags = (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) ? + FlatTrackFlags : + TrackFlags; + if (trackFlags[type] & TRACK_ELEM_FLAG_0100) { if ((originZ & 0x0F) != 8) { gGameCommandErrorText = 954; return MONEY32_UNDEFINED; @@ -1142,7 +1142,7 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in gTrackGroundFlags = bh; if (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) { - if (RCT2_ADDRESS(0x0099443C, uint16)[type] & 0x200) { + if (FlatTrackFlags[type] & TRACK_ELEM_FLAG_0200) { if (gTrackGroundFlags & TRACK_ELEMENT_LOCATION_IS_UNDERGROUND) { gGameCommandErrorText = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; return MONEY32_UNDEFINED; @@ -1150,7 +1150,7 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in } } else { - if (RCT2_ADDRESS(0x0099423C, uint16)[type] & 0x200) { + if (TrackFlags[type] & TRACK_ELEM_FLAG_0200) { if (gTrackGroundFlags & TRACK_ELEMENT_LOCATION_IS_UNDERGROUND) { gGameCommandErrorText = STR_CAN_ONLY_BUILD_THIS_ABOVE_GROUND; return MONEY32_UNDEFINED; @@ -1159,7 +1159,7 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in } if (rideTypeFlags & RIDE_TYPE_FLAG_FLAT_RIDE) { - if (RCT2_ADDRESS(0x0099443C, uint16)[type] & 1) { + if (FlatTrackFlags[type] & TRACK_ELEM_FLAG_0001) { if (!(gMapGroundFlags & ELEMENT_IS_UNDERWATER)) { gGameCommandErrorText = STR_CAN_ONLY_BUILD_THIS_UNDERWATER; return MONEY32_UNDEFINED; @@ -1167,7 +1167,7 @@ static money32 track_place(int rideIndex, int type, int originX, int originY, in } } else { - if (RCT2_ADDRESS(0x0099423C, uint16)[type] & 1) { + if (TrackFlags[type] & TRACK_ELEM_FLAG_0001) { // No element has this flag if (gMapGroundFlags & ELEMENT_IS_UNDERWATER) { gGameCommandErrorText = STR_CAN_ONLY_BUILD_THIS_UNDERWATER; return MONEY32_UNDEFINED; diff --git a/src/ride/track.h b/src/ride/track.h index 192e0d1c0b..323607b39c 100644 --- a/src/ride/track.h +++ b/src/ride/track.h @@ -184,6 +184,7 @@ enum { }; enum { + TRACK_ELEM_FLAG_0001 = (1 << 0), TRACK_ELEM_FLAG_TURN_LEFT = (1 << 1), TRACK_ELEM_FLAG_TURN_RIGHT = (1 << 2), TRACK_ELEM_FLAG_TURN_BANKED = (1 << 3), @@ -191,7 +192,14 @@ enum { TRACK_ELEM_FLAG_DOWN = (1 << 5), TRACK_ELEM_FLAG_UP = (1 << 6), TRACK_ELEM_FLAG_INVERSION = (1 << 7), + TRACK_ELEM_FLAG_0100 = (1 << 8), + TRACK_ELEM_FLAG_0200 = (1 << 9), + 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_4000 = (1 << 14), + TRACK_ELEM_FLAG_8000 = (1 << 15), }; enum { diff --git a/src/ride/track_data.c b/src/ride/track_data.c index 473457e47c..a05a4d09a6 100644 --- a/src/ride/track_data.c +++ b/src/ride/track_data.c @@ -32770,3 +32770,523 @@ const uint8 FlatRideTrackSequenceElementAllowedWallEdges[][16] = { { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }; + +/** rct2: 0x0099443C */ +const uint16 FlatTrackFlags[] = { + TRACK_ELEM_FLAG_1000, + 0, + 0, + 0, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_TURN_LEFT, + TRACK_ELEM_FLAG_TURN_RIGHT, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + 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_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + 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, + 0, + 0, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_TURN_LEFT, + 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_RIGHT, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + 0, + 0, + 0, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_TURN_LEFT, + TRACK_ELEM_FLAG_TURN_RIGHT, + 0, + 0, + TRACK_ELEM_FLAG_TURN_LEFT, + TRACK_ELEM_FLAG_TURN_RIGHT, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | 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_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + 0, + 0, + TRACK_ELEM_FLAG_0200, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + 0, + 0, + TRACK_ELEM_FLAG_0200, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + 0, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + 0, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_TURN_LEFT, + TRACK_ELEM_FLAG_TURN_RIGHT, + TRACK_ELEM_FLAG_TURN_LEFT, + 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_BANKED | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + 0, + 0, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_INVERSION, + TRACK_ELEM_FLAG_INVERSION, + TRACK_ELEM_FLAG_INVERSION, + TRACK_ELEM_FLAG_INVERSION, + TRACK_ELEM_FLAG_INVERSION, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_UP, + 0, + 0, + 0, + TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_DOWN, + 0, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | 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_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, + TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, +}; + +/** rct2: 0x0099423C */ +const uint16 TrackFlags[] = { + /* TRACK_ELEM_FLAT */ TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_END_STATION */ 0, + /* TRACK_ELEM_BEGIN_STATION */ 0, + /* TRACK_ELEM_MIDDLE_STATION */ 0, + /* TRACK_ELEM_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_FLAT_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_25_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_FLAT_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_25_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES */ TRACK_ELEM_FLAG_TURN_LEFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES */ TRACK_ELEM_FLAG_TURN_RIGHT, + /* TRACK_ELEM_FLAT_TO_LEFT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_FLAT_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANK_TO_FLAT */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANK_TO_FLAT */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANK_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANK_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_UP_TO_LEFT_BANK */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANK_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANK_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANK */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* 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_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, + /* TRACK_ELEM_RIGHT_VERTICAL_LOOP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES */ TRACK_ELEM_FLAG_TURN_LEFT, + /* 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_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, + /* TRACK_ELEM_RIGHT_TWIST_DOWN_TO_UP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_TWIST_UP_TO_DOWN */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_TWIST_UP_TO_DOWN */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_HALF_LOOP_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_HALF_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_CORKSCREW_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_CORKSCREW_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_CORKSCREW_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_CORKSCREW_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_FLAT_TO_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_FLAT_TO_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_TOWER_BASE */ 0, + /* TRACK_ELEM_TOWER_SECTION */ 0, + /* TRACK_ELEM_FLAT_COVERED */ 0, + /* TRACK_ELEM_25_DEG_UP_COVERED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_60_DEG_UP_COVERED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_FLAT_TO_25_DEG_UP_COVERED */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_25_DEG_UP_TO_FLAT_COVERED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_25_DEG_DOWN_COVERED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_60_DEG_DOWN_COVERED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_FLAT_TO_25_DEG_DOWN_COVERED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_25_DEG_DOWN_TO_FLAT_COVERED */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED */ TRACK_ELEM_FLAG_TURN_LEFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED */ TRACK_ELEM_FLAG_TURN_RIGHT, + /* TRACK_ELEM_S_BEND_LEFT_COVERED */ 0, + /* TRACK_ELEM_S_BEND_RIGHT_COVERED */ 0, + /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED */ TRACK_ELEM_FLAG_TURN_LEFT, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED */ TRACK_ELEM_FLAG_TURN_RIGHT, + /* TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_BRAKES */ 0, + /* TRACK_ELEM_ROTATION_CONTROL_TOGGLE */ 0, + /* TRACK_ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP */ TRACK_ELEM_FLAG_0200, + /* TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, + /* TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, + /* TRACK_ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, + /* TRACK_ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, + /* TRACK_ELEM_25_DEG_UP_LEFT_BANKED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_UP_RIGHT_BANKED */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_WATERFALL */ 0, + /* TRACK_ELEM_RAPIDS */ 0, + /* TRACK_ELEM_ON_RIDE_PHOTO */ TRACK_ELEM_FLAG_0200, + /* TRACK_ELEM_25_DEG_DOWN_LEFT_BANKED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_DOWN_RIGHT_BANKED */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_WATER_SPLASH */ 0, + /* TRACK_ELEM_FLAT_TO_60_DEG_UP_LONG_BASE */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_WHIRLPOOL */ 0, + /* TRACK_ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_CABLE_LIFT_HILL */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_REVERSE_WHOA_BELLY_SLOPE */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_REVERSE_WHOA_BELLY_VERTICAL */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_90_DEG_UP */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_90_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_60_DEG_UP_TO_90_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_90_DEG_DOWN_TO_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_90_DEG_UP_TO_60_DEG_UP */ TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_60_DEG_DOWN_TO_90_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_BRAKE_FOR_DROP */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_LEFT_EIGHTH_TO_DIAG */ TRACK_ELEM_FLAG_TURN_LEFT, + /* TRACK_ELEM_RIGHT_EIGHTH_TO_DIAG */ TRACK_ELEM_FLAG_TURN_RIGHT, + /* TRACK_ELEM_LEFT_EIGHTH_TO_ORTHOGONAL */ TRACK_ELEM_FLAG_TURN_LEFT, + /* TRACK_ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL */ TRACK_ELEM_FLAG_TURN_RIGHT, + /* TRACK_ELEM_LEFT_EIGHTH_BANK_TO_DIAG */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_DIAG */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_FLAT */ TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_FLAT_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_FLAT_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_25_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_FLAT_TO_60_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_0400 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_FLAT_TO_60_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_60_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_1000, + /* TRACK_ELEM_DIAG_FLAT_TO_LEFT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_FLAT_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_LEFT_BANK_TO_FLAT */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_RIGHT_BANK_TO_FLAT */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_DIAG_LEFT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_DIAG_RIGHT_BANK */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LOG_FLUME_REVERSER */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_SPINNING_TUNNEL */ TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_BANK_TO_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_8000, + /* TRACK_ELEM_RIGHT_BANK_TO_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_8000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_POWERED_LIFT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100, + /* TRACK_ELEM_LEFT_LARGE_HALF_LOOP_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_LARGE_HALF_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_LARGE_HALF_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_FLYER_TWIST_UP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_FLYER_TWIST_UP */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_FLYER_TWIST_DOWN */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_FLYER_TWIST_DOWN */ TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_FLYER_HALF_LOOP_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_FLYER_HALF_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_FLYER_CORKSCREW_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_FLYER_CORKSCREW_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_FLYER_CORKSCREW_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_FLYER_CORKSCREW_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_HEARTLINE_TRANSFER_UP */ 0, + /* TRACK_ELEM_HEARTLINE_TRANSFER_DOWN */ 0, + /* TRACK_ELEM_LEFT_HEARTLINE_ROLL */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_RIGHT_HEARTLINE_ROLL */ TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_MINI_GOLF_HOLE_A */ TRACK_ELEM_FLAG_INVERSION, + /* TRACK_ELEM_MINI_GOLF_HOLE_B */ TRACK_ELEM_FLAG_INVERSION, + /* TRACK_ELEM_MINI_GOLF_HOLE_C */ TRACK_ELEM_FLAG_INVERSION, + /* TRACK_ELEM_MINI_GOLF_HOLE_D */ TRACK_ELEM_FLAG_INVERSION, + /* TRACK_ELEM_MINI_GOLF_HOLE_E */ TRACK_ELEM_FLAG_INVERSION, + /* TRACK_ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_LEFT_CURVED_LIFT_HILL */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_RIGHT_CURVED_LIFT_HILL */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_LEFT_REVERSER */ 0, + /* TRACK_ELEM_RIGHT_REVERSER */ 0, + /* TRACK_ELEM_AIR_THRUST_TOP_CAP */ 0, + /* TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL */ TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_BLOCK_BRAKES */ 0, + /* TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_0100 | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_8000, + /* TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, + /* TRACK_ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, + /* TRACK_ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, + /* TRACK_ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_4000, + /* */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION | TRACK_ELEM_FLAG_4000, +}; diff --git a/src/ride/track_data.h b/src/ride/track_data.h index e38eba3a67..e293f48f5a 100644 --- a/src/ride/track_data.h +++ b/src/ride/track_data.h @@ -82,3 +82,6 @@ extern const uint32 TrackHeightMarkerPositions[256]; extern const uint8 TrackSequenceElementAllowedWallEdges[256][16]; extern const uint8 FlatRideTrackSequenceElementAllowedWallEdges[256][16]; + +extern const uint16 FlatTrackFlags[256]; +extern const uint16 TrackFlags[256]; diff --git a/src/ride/vehicle.c b/src/ride/vehicle.c index 77420cb977..e1f1ad59d4 100644 --- a/src/ride/vehicle.c +++ b/src/ride/vehicle.c @@ -1138,7 +1138,7 @@ static void vehicle_update_measurements(rct_vehicle *vehicle) } // ax - uint16 track_flags = RCT2_ADDRESS(0x0099423C, uint16)[track_elem_type]; + uint16 track_flags = TrackFlags[track_elem_type]; uint32 testing_flags = ride->testing_flags; if (testing_flags & RIDE_TESTING_TURN_LEFT && @@ -7486,7 +7486,7 @@ static bool vehicle_update_track_motion_backwards_get_new_track(rct_vehicle *veh if (RCT2_GLOBAL(0x00F64E08, sint32) < 0) { if (vehicle->next_vehicle_on_train == SPRITE_INDEX_NULL) { trackType = mapElement->properties.track.type; - if (!(RCT2_ADDRESS(0x0099423C, uint16)[trackType] & 0x20)) { + if (!(TrackFlags[trackType] & TRACK_ELEM_FLAG_DOWN)) { RCT2_GLOBAL(0x00F64E18, uint32) |= VEHICLE_UPDATE_MOTION_TRACK_FLAG_9; } } diff --git a/src/windows/ride_construction.c b/src/windows/ride_construction.c index 63c581273b..104753c3c6 100644 --- a/src/windows/ride_construction.c +++ b/src/windows/ride_construction.c @@ -2642,12 +2642,12 @@ static bool sub_6CA2DF(int *_trackType, int *_trackDirection, int *_rideIndex, i bool do_loc_6CAF26 = false; if (!(_enabledRidePieces.a & (1 << 5))) { - if (RCT2_ADDRESS(0x0099423C, uint16)[trackType] & 0x2000) { + if (TrackFlags[trackType] & TRACK_ELEM_FLAG_2000) { do_loc_6CAF26 = true; } } - if (!(RCT2_ADDRESS(0x0099423C, uint16)[trackType] & 0x1000)) { + if (!(TrackFlags[trackType] & TRACK_ELEM_FLAG_1000)) { do_loc_6CAF26 = true; }