diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 4d3495ef77..4a8473e42b 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -420,10 +420,10 @@ public: } switch (_currentTrackCurve) { - case TRACK_CURVE_LEFT_VERY_SMALL: - case TRACK_CURVE_LEFT_SMALL: - case TRACK_CURVE_LEFT: - case TRACK_CURVE_LEFT_LARGE: + case EnumValue(TrackCurve::LeftVerySmall): + case EnumValue(TrackCurve::LeftSmall): + case EnumValue(TrackCurve::Left): + case EnumValue(TrackCurve::LeftLarge): disabledWidgets |= (1uLL << WIDX_BANK_RIGHT); if (_previousTrackBankEnd == TRACK_BANK_NONE) { @@ -434,10 +434,10 @@ public: disabledWidgets |= (1uLL << WIDX_BANK_STRAIGHT); } break; - case TRACK_CURVE_RIGHT_LARGE: - case TRACK_CURVE_RIGHT: - case TRACK_CURVE_RIGHT_SMALL: - case TRACK_CURVE_RIGHT_VERY_SMALL: + case EnumValue(TrackCurve::RightLarge): + case EnumValue(TrackCurve::Right): + case EnumValue(TrackCurve::RightSmall): + case EnumValue(TrackCurve::RightVerySmall): disabledWidgets |= (1uLL << WIDX_BANK_LEFT); if (_previousTrackBankEnd == TRACK_BANK_NONE) { @@ -491,7 +491,7 @@ public: switch (_previousTrackSlopeEnd) { case TRACK_SLOPE_NONE: - if (_currentTrackCurve != TRACK_CURVE_NONE + if (_currentTrackCurve != EnumValue(TrackCurve::None) || (IsTrackEnabled(TRACK_SLOPE_STEEP_LONG) && TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP); @@ -596,7 +596,7 @@ public: { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP) | (1uLL << WIDX_CHAIN_LIFT); } - if (_currentTrackCurve != TRACK_CURVE_NONE) + if (_currentTrackCurve != EnumValue(TrackCurve::None)) { if (!IsTrackEnabled(TRACK_LIFT_HILL_CURVE)) { @@ -632,7 +632,7 @@ public: | (1uLL << WIDX_STRAIGHT) | (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_LARGE); } - if (_currentTrackCurve != TRACK_CURVE_NONE) + if (_currentTrackCurve != EnumValue(TrackCurve::None)) { if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE) { @@ -643,7 +643,7 @@ public: if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_25) { disabledWidgets |= (1uLL << WIDX_SLOPE_UP_STEEP); - if (_currentTrackCurve == TRACK_CURVE_LEFT || _currentTrackCurve == TRACK_CURVE_RIGHT + if (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right) || _rideConstructionState != RideConstructionState::Back || !IsTrackEnabled(TRACK_SLOPE_CURVE_BANKED)) { disabledWidgets |= (1uLL << WIDX_LEVEL); @@ -652,7 +652,7 @@ public: if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_25) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP); - if (_currentTrackCurve == TRACK_CURVE_LEFT || _currentTrackCurve == TRACK_CURVE_RIGHT + if (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right) || _rideConstructionState != RideConstructionState::Front || !IsTrackEnabled(TRACK_SLOPE_CURVE_BANKED)) { disabledWidgets |= (1uLL << WIDX_LEVEL); @@ -692,21 +692,21 @@ public: disabledWidgets |= (1uLL << WIDX_LEVEL) | (1uLL << WIDX_SLOPE_UP); disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN); } - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { disabledWidgets &= ~(1uLL << WIDX_LEFT_CURVE_SMALL); } - if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { disabledWidgets &= ~(1uLL << WIDX_RIGHT_CURVE_SMALL); } } } - if (_currentTrackCurve != TRACK_CURVE_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) { disabledWidgets |= (1uLL << WIDX_SLOPE_UP); } - if (_currentTrackCurve != TRACK_CURVE_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_DOWN_60) + if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TRACK_SLOPE_DOWN_60) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN); } @@ -725,17 +725,17 @@ public: } } } - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 && _currentTrackCurve != TRACK_CURVE_NONE) + if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 && _currentTrackCurve != EnumValue(TrackCurve::None)) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_LEVEL); } - if (_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 && _currentTrackCurve != TRACK_CURVE_NONE) + if (_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 && _currentTrackCurve != EnumValue(TrackCurve::None)) { disabledWidgets |= (1uLL << WIDX_LEVEL) | (1uLL << WIDX_SLOPE_UP_STEEP); } if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_90 || _previousTrackSlopeEnd == TRACK_SLOPE_UP_90) { - if (_currentTrackCurve != TRACK_CURVE_NONE) + if (_currentTrackCurve != EnumValue(TrackCurve::None)) { disabledWidgets |= (1uLL << WIDX_SLOPE_UP_STEEP); } @@ -748,7 +748,7 @@ public: } else if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_90 || _previousTrackSlopeEnd == TRACK_SLOPE_DOWN_90) { - if (_currentTrackCurve != TRACK_CURVE_NONE) + if (_currentTrackCurve != EnumValue(TrackCurve::None)) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP); } @@ -764,7 +764,7 @@ public: { // If the bank is none, attempt to show unbanked quarter helixes if (_currentTrackBankEnd == TRACK_BANK_NONE - && (_currentTrackCurve == TRACK_CURVE_LEFT || _currentTrackCurve == TRACK_CURVE_RIGHT)) + && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER)) disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN_STEEP); @@ -775,7 +775,7 @@ public: // for half or quarter helixes else if ( (_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT) - && (_currentTrackCurve == TRACK_CURVE_LEFT || _currentTrackCurve == TRACK_CURVE_RIGHT)) + && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER)) disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN_STEEP); @@ -786,7 +786,8 @@ public: // half helixes else if ( (_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT) - && (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL || _currentTrackCurve == TRACK_CURVE_RIGHT_SMALL)) + && (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) + || _currentTrackCurve == EnumValue(TrackCurve::RightSmall))) { if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF)) disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN_STEEP); @@ -798,7 +799,8 @@ public: { if (_rideConstructionState == RideConstructionState::Front) { - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL || _currentTrackCurve == TRACK_CURVE_RIGHT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) + || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE && (!currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT) @@ -810,7 +812,8 @@ public: } else if (_rideConstructionState == RideConstructionState::Back) { - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL || _currentTrackCurve == TRACK_CURVE_RIGHT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) + || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE) { @@ -1006,57 +1009,57 @@ public: { case WIDX_LEFT_CURVE: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_LEFT; + _currentTrackCurve = EnumValue(TrackCurve::Left); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_RIGHT_CURVE: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_RIGHT; + _currentTrackCurve = EnumValue(TrackCurve::Right); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_LEFT_CURVE_SMALL: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_LEFT_SMALL; + _currentTrackCurve = EnumValue(TrackCurve::LeftSmall); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_RIGHT_CURVE_SMALL: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_RIGHT_SMALL; + _currentTrackCurve = EnumValue(TrackCurve::RightSmall); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_LEFT_CURVE_VERY_SMALL: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_LEFT_VERY_SMALL; + _currentTrackCurve = EnumValue(TrackCurve::LeftVerySmall); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_RIGHT_CURVE_VERY_SMALL: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_RIGHT_VERY_SMALL; + _currentTrackCurve = EnumValue(TrackCurve::RightVerySmall); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_LEFT_CURVE_LARGE: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_LEFT_LARGE; + _currentTrackCurve = EnumValue(TrackCurve::LeftLarge); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_RIGHT_CURVE_LARGE: RideConstructionInvalidateCurrentTrack(); - _currentTrackCurve = TRACK_CURVE_RIGHT_LARGE; + _currentTrackCurve = EnumValue(TrackCurve::RightLarge); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; case WIDX_STRAIGHT: RideConstructionInvalidateCurrentTrack(); - if (_currentTrackCurve != TRACK_CURVE_NONE) + if (_currentTrackCurve != EnumValue(TrackCurve::None)) _currentTrackBankEnd = TRACK_BANK_NONE; - _currentTrackCurve = TRACK_CURVE_NONE; + _currentTrackCurve = EnumValue(TrackCurve::None); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; @@ -1064,14 +1067,14 @@ public: RideConstructionInvalidateCurrentTrack(); if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) { - if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected; @@ -1079,14 +1082,14 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixDownSmall | RideConstructionSpecialPieceSelected; @@ -1097,7 +1100,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER)) { - if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1105,7 +1108,7 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1118,7 +1121,7 @@ public: { if (_currentTrackBankEnd == TRACK_BANK_NONE) { - if (_currentTrackCurve == TRACK_CURVE_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left)) { _currentTrackCurve = TrackElemType::LeftQuarterHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1126,7 +1129,7 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right)) { _currentTrackCurve = TrackElemType::RightQuarterHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1157,22 +1160,22 @@ public: RideConstructionInvalidateCurrentTrack(); if (_rideConstructionState == RideConstructionState::Front && _previousTrackSlopeEnd == 6) { - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { _currentTrackBankEnd = TRACK_BANK_LEFT; } - else if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL) + else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { _currentTrackBankEnd = TRACK_BANK_RIGHT; } } else if (_rideConstructionState == RideConstructionState::Back && _previousTrackSlopeEnd == 2) { - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { _currentTrackBankEnd = TRACK_BANK_LEFT; } - else if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL) + else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { _currentTrackBankEnd = TRACK_BANK_RIGHT; } @@ -1187,7 +1190,8 @@ public: } if (currentRide->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { - if (_rideConstructionState == RideConstructionState::Front && _currentTrackCurve == TRACK_CURVE_NONE) + if (_rideConstructionState == RideConstructionState::Front + && _currentTrackCurve == EnumValue(TrackCurve::None)) { _currentTrackCurve = TrackElemType::ReverseFreefallSlope | RideConstructionSpecialPieceSelected; WindowRideConstructionUpdateActiveElements(); @@ -1202,28 +1206,28 @@ public: RideConstructionInvalidateCurrentTrack(); if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) { - if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_LEFT_SMALL && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT_SMALL && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; @@ -1233,7 +1237,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER)) { - if (_currentTrackCurve == TRACK_CURVE_LEFT && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) { _currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeUp | RideConstructionSpecialPieceSelected; @@ -1241,7 +1245,7 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) { _currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeUp | RideConstructionSpecialPieceSelected; @@ -1254,14 +1258,14 @@ public: { if (_currentTrackBankEnd == TRACK_BANK_NONE) { - if (_currentTrackCurve == TRACK_CURVE_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left)) { _currentTrackCurve = TrackElemType::LeftQuarterHelixLargeUp | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == TRACK_CURVE_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right)) { _currentTrackCurve = TrackElemType::RightQuarterHelixLargeUp | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; @@ -1658,7 +1662,7 @@ public: if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) && _currentTrackBankEnd != TRACK_BANK_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_NONE) { - if (_currentTrackCurve >= TRACK_CURVE_LEFT && _currentTrackCurve <= TRACK_CURVE_RIGHT_SMALL) + if (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall)) { // Enable helix widgets[WIDX_SLOPE_DOWN_STEEP].type = WindowWidgetType::FlatBtn; @@ -1739,7 +1743,7 @@ public: if ((IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER)) && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE - && (_currentTrackCurve == TRACK_CURVE_LEFT || _currentTrackCurve == TRACK_CURVE_RIGHT)) + && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN); widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_HELIX_DOWN_TIP; @@ -1765,7 +1769,7 @@ public: if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) - && (_currentTrackCurve >= TRACK_CURVE_LEFT && _currentTrackCurve <= TRACK_CURVE_RIGHT_SMALL) + && (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall)) && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd != TRACK_BANK_NONE) { widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN); @@ -1845,7 +1849,7 @@ public: widgets[WIDX_O_TRACK].image = ImageId(SPR_RIDE_CONSTRUCTION_WATER_CHANNEL); widgets[WIDX_U_TRACK].tooltip = STR_RIDE_CONSTRUCTION_STANDARD_RC_TRACK_TIP; widgets[WIDX_O_TRACK].tooltip = STR_RIDE_CONSTRUCTION_WATER_CHANNEL_TIP; - if ((_currentTrackCurve < TRACK_CURVE_LEFT_SMALL + if ((_currentTrackCurve < EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendLeft) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendRight)) && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE) @@ -1989,31 +1993,31 @@ public: WidgetIndex widgetIndex; switch (_currentTrackCurve) { - case TRACK_CURVE_NONE: + case EnumValue(TrackCurve::None): widgetIndex = WIDX_STRAIGHT; break; - case TRACK_CURVE_LEFT: + case EnumValue(TrackCurve::Left): widgetIndex = WIDX_LEFT_CURVE; break; - case TRACK_CURVE_RIGHT: + case EnumValue(TrackCurve::Right): widgetIndex = WIDX_RIGHT_CURVE; break; - case TRACK_CURVE_LEFT_SMALL: + case EnumValue(TrackCurve::LeftSmall): widgetIndex = WIDX_LEFT_CURVE_SMALL; break; - case TRACK_CURVE_RIGHT_SMALL: + case EnumValue(TrackCurve::RightSmall): widgetIndex = WIDX_RIGHT_CURVE_SMALL; break; - case TRACK_CURVE_LEFT_VERY_SMALL: + case EnumValue(TrackCurve::LeftVerySmall): widgetIndex = WIDX_LEFT_CURVE_VERY_SMALL; break; - case TRACK_CURVE_RIGHT_VERY_SMALL: + case EnumValue(TrackCurve::RightVerySmall): widgetIndex = WIDX_RIGHT_CURVE_VERY_SMALL; break; - case TRACK_CURVE_LEFT_LARGE: + case EnumValue(TrackCurve::LeftLarge): widgetIndex = WIDX_LEFT_CURVE_LARGE; break; - case TRACK_CURVE_RIGHT_LARGE: + case EnumValue(TrackCurve::RightLarge): widgetIndex = WIDX_RIGHT_CURVE_LARGE; break; default: @@ -3629,14 +3633,14 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() switch (_currentTrackCurve) { - case TRACK_CURVE_LEFT_SMALL: + case EnumValue(TrackCurve::LeftSmall): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE_VERY_SMALL) && w->widgets[WIDX_LEFT_CURVE_VERY_SMALL].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_LEFT_CURVE_VERY_SMALL); } break; - case TRACK_CURVE_LEFT: + case EnumValue(TrackCurve::Left): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE_SMALL) && w->widgets[WIDX_LEFT_CURVE_SMALL].type != WindowWidgetType::Empty) { @@ -3653,7 +3657,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_LEFT_LARGE: + case EnumValue(TrackCurve::LeftLarge): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE) && w->widgets[WIDX_LEFT_CURVE].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_LEFT_CURVE); @@ -3675,7 +3679,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_NONE: + case EnumValue(TrackCurve::None): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE_LARGE) && w->widgets[WIDX_LEFT_CURVE_LARGE].type != WindowWidgetType::Empty) { @@ -3702,7 +3706,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_RIGHT_LARGE: + case EnumValue(TrackCurve::RightLarge): if (!WidgetIsDisabled(*w, WIDX_STRAIGHT) && w->widgets[WIDX_STRAIGHT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_STRAIGHT); @@ -3734,7 +3738,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_RIGHT: + case EnumValue(TrackCurve::Right): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE_LARGE) && w->widgets[WIDX_RIGHT_CURVE_LARGE].type != WindowWidgetType::Empty) { @@ -3771,7 +3775,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_RIGHT_SMALL: + case EnumValue(TrackCurve::RightSmall): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE) && w->widgets[WIDX_RIGHT_CURVE].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_RIGHT_CURVE); @@ -3813,7 +3817,7 @@ void WindowRideConstructionKeyboardShortcutTurnLeft() return; } break; - case TRACK_CURVE_RIGHT_VERY_SMALL: + case EnumValue(TrackCurve::RightVerySmall): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE_SMALL) && w->widgets[WIDX_RIGHT_CURVE_SMALL].type != WindowWidgetType::Empty) { @@ -3875,14 +3879,14 @@ void WindowRideConstructionKeyboardShortcutTurnRight() switch (_currentTrackCurve) { - case TRACK_CURVE_RIGHT_SMALL: + case EnumValue(TrackCurve::RightSmall): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE_VERY_SMALL) && w->widgets[WIDX_RIGHT_CURVE_VERY_SMALL].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_RIGHT_CURVE_VERY_SMALL); } break; - case TRACK_CURVE_RIGHT: + case EnumValue(TrackCurve::Right): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE_SMALL) && w->widgets[WIDX_RIGHT_CURVE_SMALL].type != WindowWidgetType::Empty) { @@ -3899,7 +3903,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_RIGHT_LARGE: + case EnumValue(TrackCurve::RightLarge): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE) && w->widgets[WIDX_RIGHT_CURVE].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_RIGHT_CURVE); @@ -3921,7 +3925,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_NONE: + case EnumValue(TrackCurve::None): if (!WidgetIsDisabled(*w, WIDX_RIGHT_CURVE_LARGE) && w->widgets[WIDX_RIGHT_CURVE_LARGE].type != WindowWidgetType::Empty) { @@ -3948,7 +3952,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_LEFT_LARGE: + case EnumValue(TrackCurve::LeftLarge): if (!WidgetIsDisabled(*w, WIDX_STRAIGHT) && w->widgets[WIDX_STRAIGHT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_STRAIGHT); @@ -3980,7 +3984,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_LEFT: + case EnumValue(TrackCurve::Left): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE_LARGE) && w->widgets[WIDX_LEFT_CURVE_LARGE].type != WindowWidgetType::Empty) { @@ -4017,7 +4021,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_LEFT_SMALL: + case EnumValue(TrackCurve::LeftSmall): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE) && w->widgets[WIDX_LEFT_CURVE].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_LEFT_CURVE); @@ -4059,7 +4063,7 @@ void WindowRideConstructionKeyboardShortcutTurnRight() return; } break; - case TRACK_CURVE_LEFT_VERY_SMALL: + case EnumValue(TrackCurve::LeftVerySmall): if (!WidgetIsDisabled(*w, WIDX_LEFT_CURVE_SMALL) && w->widgets[WIDX_LEFT_CURVE_SMALL].type != WindowWidgetType::Empty) { diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 1d531945ba..4a35716787 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -206,17 +206,17 @@ enum TRACK_GROUP_COUNT, }; -enum +enum class TrackCurve : uint8_t { - TRACK_CURVE_LEFT_VERY_SMALL = 5, - TRACK_CURVE_LEFT_SMALL = 3, - TRACK_CURVE_LEFT = 1, - TRACK_CURVE_LEFT_LARGE = 7, - TRACK_CURVE_NONE = 0, - TRACK_CURVE_RIGHT_LARGE = 8, - TRACK_CURVE_RIGHT = 2, - TRACK_CURVE_RIGHT_SMALL = 4, - TRACK_CURVE_RIGHT_VERY_SMALL = 6 + LeftVerySmall = 5, + LeftSmall = 3, + Left = 1, + LeftLarge = 7, + None = 0, + RightLarge = 8, + Right = 2, + RightSmall = 4, + RightVerySmall = 6 }; enum diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index a8ea249a27..67e5214d30 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -3697,93 +3697,93 @@ static_assert(std::size(TrackPieceLengths) == TrackElemType::Count); // rct2: 0x00998C95 static constexpr TrackCurveChain gTrackCurveChain[] = { - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_VERY_SMALL, TRACK_CURVE_LEFT_VERY_SMALL }, - { TRACK_CURVE_RIGHT_VERY_SMALL, TRACK_CURVE_RIGHT_VERY_SMALL }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistUpToDown, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightTwistUpToDown, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistDownToUp }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightTwistDownToUp }, - { RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopDown, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopUp }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewDown, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewDown, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewUp }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewUp }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftVerySmall), EnumValue(TrackCurve::LeftVerySmall) }, + { EnumValue(TrackCurve::RightVerySmall), EnumValue(TrackCurve::RightVerySmall) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistUpToDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightTwistUpToDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistDownToUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightTwistDownToUp }, + { RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopUp }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewUp }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall }, @@ -3792,13 +3792,13 @@ static constexpr TrackCurveChain gTrackCurveChain[] = { { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpLarge, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpLarge }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownLarge, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownLarge }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownLarge, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownLarge }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, { RideConstructionSpecialPieceSelected | TrackElemType::Brakes, RideConstructionSpecialPieceSelected | TrackElemType::Brakes }, { RideConstructionSpecialPieceSelected | TrackElemType::Booster, RideConstructionSpecialPieceSelected | TrackElemType::Booster }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeDown }, @@ -3807,156 +3807,156 @@ static constexpr TrackCurveChain gTrackCurveChain[] = { { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeDown }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeDown }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, { RideConstructionSpecialPieceSelected | TrackElemType::Waterfall, RideConstructionSpecialPieceSelected | TrackElemType::Waterfall }, { RideConstructionSpecialPieceSelected | TrackElemType::Rapids, RideConstructionSpecialPieceSelected | TrackElemType::Rapids }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, TRACK_CURVE_NONE }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, EnumValue(TrackCurve::None) }, { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollDownToUp, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollDownToUp, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollUpToDown }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollUpToDown }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollDownToUp, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollDownToUp, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollUpToDown }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollUpToDown }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, { RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift, RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopDown, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopDown, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopUp }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopUp }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { RideConstructionSpecialPieceSelected | TrackElemType::InvertedFlatToDown90QuarterLoop, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::Up90ToInvertedFlatQuarterLoop }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopUp }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::InvertedFlatToDown90QuarterLoop, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::Up90ToInvertedFlatQuarterLoop }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill }, { RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, - { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, - { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, - { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, { 65535, 65535 }, // TrackElemType::FlatTrack1x4A - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::FlatTrack2x2 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::FlatTrack4x4 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack2x2 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack4x4 { 65535, 65535 }, // TrackElemType::FlatTrack2x4 { 65535, 65535 }, // TrackElemType::FlatTrack1x5 { 65535, 65535 }, // TrackElemType::FlatTrack1x1A @@ -3964,268 +3964,268 @@ static constexpr TrackCurveChain gTrackCurveChain[] = { { 65535, 65535 }, // TrackElemType::FlatTrack1x1B { 65535, 65535 }, // TrackElemType::FlatTrack1x4C { 65535, 65535 }, // TrackElemType::FlatTrack3x3 - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewDown, TRACK_CURVE_NONE }, // TrackElemType::LeftLargeCorkscrewUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewDown, TRACK_CURVE_NONE }, // TrackElemType::RightLargeCorkscrewUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewUp }, // TrackElemType::LeftLargeCorkscrewDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewUp }, // TrackElemType::RightCorkscrewDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopDown, TRACK_CURVE_NONE }, // TrackElemType::LeftMediumHalfLoopUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopDown, TRACK_CURVE_NONE }, // TrackElemType::RightMediumHalfLoopUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopUp }, // TrackElemType::LeftMediumHalfLoopDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopUp }, // TrackElemType::RightMediumHalfLoopDown - { RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::LeftZeroGRollUp - { RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::RightZeroGRollUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollUp }, // TrackElemType::LeftZeroGRollDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollUp }, // TrackElemType::RightZeroGRollDown - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::LeftLargeZeroGRollUp - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::RightLargeZeroGRollUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollUp }, // TrackElemType::LeftLargeZeroGRollDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollUp }, // TrackElemType::RightLargeZeroGRollDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedDown, TRACK_CURVE_NONE }, // LeftFlyerLargeHalfLoopUninvertedUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, TRACK_CURVE_NONE }, // RightFlyerLargeHalfLoopUninvertedUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedUp }, // LeftFlyerLargeHalfLoopInvertedDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp }, // RightFlyerLargeHalfLoopInvertedDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, TRACK_CURVE_NONE}, // LeftFlyerLargeHalfLoopInvertedUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, TRACK_CURVE_NONE }, // RightFlyerLargeHalfLoopInvertedUp - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedUp }, // LeftFlyerLargeHalfLoopUninvertedDown - { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedUp }, // RightFlyerLargeHalfLoopUninvertedDown - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // FlyerHalfLoopInvertedUp - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // FlyerHalfLoopUninvertedUp - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToDiagUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToDiagUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToDiagDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToDiagDown25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToOrthogonalUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToOrthogonalUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToOrthogonalDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToOrthogonalDown25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagUp25ToRightBankedUp25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedUp25ToUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagDown25ToRightBankedDown25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedDown25ToDown25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagFlatToLeftBankedUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagFlatToRightBankedUp25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedUp25ToFlat - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedUp25ToFlat - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagFlatToLeftBankedDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagFlatToRightBankedDown25 - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedDown25ToFlat - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedDown25ToFlat - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagUp25LeftBanked - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagUp25RightBanked - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagDown25LeftBanked - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagDown25RightBanked - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToDiagUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToDiagUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToDiagDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToDiagDown25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeCorkscrewUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeCorkscrewUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewUp }, // TrackElemType::LeftLargeCorkscrewDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewUp }, // TrackElemType::RightCorkscrewDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftMediumHalfLoopUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightMediumHalfLoopUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopUp }, // TrackElemType::LeftMediumHalfLoopDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopUp }, // TrackElemType::RightMediumHalfLoopDown + { RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftZeroGRollUp + { RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightZeroGRollUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollUp }, // TrackElemType::LeftZeroGRollDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollUp }, // TrackElemType::RightZeroGRollDown + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeZeroGRollUp + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeZeroGRollUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollUp }, // TrackElemType::LeftLargeZeroGRollDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollUp }, // TrackElemType::RightLargeZeroGRollDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopUninvertedUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopUninvertedUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedUp }, // LeftFlyerLargeHalfLoopInvertedDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp }, // RightFlyerLargeHalfLoopInvertedDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopInvertedUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopInvertedUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedUp }, // LeftFlyerLargeHalfLoopUninvertedDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedUp }, // RightFlyerLargeHalfLoopUninvertedDown + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopInvertedUp + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopUninvertedUp + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25ToRightBankedUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25ToRightBankedDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToFlat + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToFlat + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25LeftBanked + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25RightBanked + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25LeftBanked + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25RightBanked + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalDown25 { RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes, RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes - { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagBlockBrakes + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagBlockBrakes }; static_assert(std::size(gTrackCurveChain) == TrackElemType::Count); const TrackDescriptor gTrackDescriptors[186] = { - { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown60 }, - { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown60ToDown25 }, - { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown60ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown25ToDown60 }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown25 }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBank }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown25ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown60 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp60 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankToFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonal }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBank }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp25ToFlat }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBank }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp25 }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp25ToUp60 }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp60ToFlat }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp60ToUp25 }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp60 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down90 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down90ToDown60 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down60ToDown90 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down60 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down60ToDown25 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down60ToFlat }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25LeftBanked }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down25ToDown60 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25RightBanked }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedDown25ToRightBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::BankedLeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankToFlat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::FlatToDown60 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::FlatToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Flat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_VERY_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_VERY_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::FlatToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::FlatToUp60 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankToFlat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::BankedRightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25LeftBanked }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBank }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBank }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up25ToUp60 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedUp25ToRightBankedFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25RightBanked }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up60ToFlat }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up60ToUp25 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up60 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up60ToUp90 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up90ToUp60 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up90 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown60 }, + { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown60ToDown25 }, + { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown60ToFlat }, + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown25ToDown60 }, + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown25 }, + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBank }, + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown25ToFlat }, + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBank }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonal }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToDown25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBank }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToFlat }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToUp25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonal }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown60 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBank }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagFlat }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBank }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp60 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonal }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToDown25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankToFlat }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBank }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToUp25 }, + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonal }, + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBank }, + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp25ToFlat }, + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBank }, + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp25 }, + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp25ToUp60 }, + { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp60ToFlat }, + { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp60ToUp25 }, + { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp60 }, + { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown90 }, + { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down90 }, + { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down90ToDown60 }, + { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown90 }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown60 }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down60ToDown90 }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down60 }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down60ToDown25 }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down60ToFlat }, + { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown60 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25LeftBanked }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToFlat }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down25ToDown60 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBankedDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBankedDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBank }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down25ToFlat }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBank }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25RightBanked }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToFlat }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedDown25ToRightBankedFlat }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileDown25 }, + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::BankedLeftQuarterTurn5Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiag }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankToDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBank }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankToFlat }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiag }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::FlatToDown60 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::FlatToDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBank }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Flat }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftVerySmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1Tile }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightVerySmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1Tile }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBank }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::FlatToUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::FlatToUp60 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToDiag }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankToDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedDown25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankToFlat }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBank }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedUp25 }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiag }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::BankedRightQuarterTurn5Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3Tiles }, + { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToFlat }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25LeftBanked }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBank }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up25ToFlat }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBank }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBankedUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBankedUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up25ToUp60 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToFlat }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedUp25ToRightBankedFlat }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25RightBanked }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileUp25 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileUp25 }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp60 }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up60ToFlat }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up60ToUp25 }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up60 }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up60ToUp90 }, + { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp60 }, + { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp90 }, + { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up90ToUp60 }, + { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up90 }, + { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp90 }, + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 + { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat + { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat + { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked + { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked + { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 + { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 + { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; /** rct2: 0x00993D1C */ diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 868c33bca5..79452901de 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -28,7 +28,7 @@ struct TrackDescriptor bool starts_diagonal; uint8_t slope_start; uint8_t bank_start; - uint8_t track_curve; + TrackCurve track_curve; uint8_t slope_end; uint8_t bank_end; track_type_t track_element; diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index 4dd6423ab3..8f59ecc99f 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -145,7 +145,7 @@ static std::tuple window_ride_construction_update_state_get_ } bool startsDiagonal = (_currentTrackPieceDirection & (1 << 2)) != 0; - if (curve == TRACK_CURVE_LEFT_LARGE || curve == TRACK_CURVE_RIGHT_LARGE) + if (curve == EnumValue(TrackCurve::LeftLarge) || curve == EnumValue(TrackCurve::RightLarge)) { if (_rideConstructionState == RideConstructionState::Back) { @@ -159,7 +159,7 @@ static std::tuple window_ride_construction_update_state_get_ { const TrackDescriptor* trackDescriptor = &gTrackDescriptors[i]; - if (trackDescriptor->track_curve != curve) + if (EnumValue(trackDescriptor->track_curve) != curve) continue; if (trackDescriptor->starts_diagonal != startsDiagonal) continue;