From 44d547a4bcaf856b08423798afd785ce61187526 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 14 Jan 2024 23:36:12 +0100 Subject: [PATCH] Make TrackPitch into an enum class --- src/openrct2-ui/ride/Construction.cpp | 2 +- src/openrct2-ui/ride/Construction.h | 2 +- src/openrct2-ui/windows/RideConstruction.cpp | 200 ++-- src/openrct2/ride/RideConstruction.cpp | 20 +- src/openrct2/ride/RideConstruction.h | 4 +- src/openrct2/ride/Track.cpp | 8 +- src/openrct2/ride/Track.h | 35 +- src/openrct2/ride/TrackData.cpp | 1050 ++++++++--------- src/openrct2/ride/TrackData.h | 4 +- src/openrct2/scripting/ScriptEngine.cpp | 14 +- .../bindings/ride/ScTrackSegment.cpp | 4 +- src/openrct2/windows/_legacy.cpp | 14 +- 12 files changed, 678 insertions(+), 679 deletions(-) diff --git a/src/openrct2-ui/ride/Construction.cpp b/src/openrct2-ui/ride/Construction.cpp index 336b66d47a..5770979f93 100644 --- a/src/openrct2-ui/ride/Construction.cpp +++ b/src/openrct2-ui/ride/Construction.cpp @@ -42,7 +42,7 @@ void RideConstructNew(RideSelection listItem) } SpecialElementsDropdownState BuildSpecialElementsList( - const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, TrackBank buildBank, RideConstructionState state) + const Ride& currentRide, uint8_t buildDirection, TrackPitch buildSlope, TrackBank buildBank, RideConstructionState state) { auto buildDirectionIsDiagonal = TrackPieceDirectionIsDiagonal(buildDirection); SpecialElementsDropdownState list; diff --git a/src/openrct2-ui/ride/Construction.h b/src/openrct2-ui/ride/Construction.h index 34473e9e22..d05858b600 100644 --- a/src/openrct2-ui/ride/Construction.h +++ b/src/openrct2-ui/ride/Construction.h @@ -159,6 +159,6 @@ struct SpecialElementsDropdownState }; SpecialElementsDropdownState BuildSpecialElementsList( - const Ride& currentRide, uint8_t buildDirection, uint8_t buildSlope, TrackBank buildBank, RideConstructionState state); + const Ride& currentRide, uint8_t buildDirection, TrackPitch buildSlope, TrackBank buildBank, RideConstructionState state); void RideConstructNew(RideSelection listItem); diff --git a/src/openrct2-ui/windows/RideConstruction.cpp b/src/openrct2-ui/windows/RideConstruction.cpp index 9855139727..71caf9cd07 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -226,7 +226,7 @@ public: _currentSeatRotationAngle = 4; _currentTrackCurve = currentRide->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; - _currentTrackSlopeEnd = 0; + _currentTrackSlopeEnd = TrackPitch::None; _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; @@ -235,7 +235,7 @@ public: _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = TrackBank::None; - _previousTrackSlopeEnd = 0; + _previousTrackSlopeEnd = TrackPitch::None; _currentTrackPieceDirection = 0; _rideConstructionState = RideConstructionState::Place; @@ -324,11 +324,11 @@ public: } // Disable large curves if the start or end of the track is sloped and large sloped curves are not available - if ((_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _currentTrackSlopeEnd != TRACK_SLOPE_NONE)) + if ((_previousTrackSlopeEnd != TrackPitch::None || _currentTrackSlopeEnd != TrackPitch::None)) { if (!IsTrackEnabled(TRACK_SLOPE_CURVE_LARGE) - || !(_previousTrackSlopeEnd == TRACK_SLOPE_UP_25 || _previousTrackSlopeEnd == TRACK_SLOPE_DOWN_25) - || !(_currentTrackSlopeEnd == TRACK_SLOPE_UP_25 || _currentTrackSlopeEnd == TRACK_SLOPE_DOWN_25)) + || !(_previousTrackSlopeEnd == TrackPitch::Up25 || _previousTrackSlopeEnd == TrackPitch::Down25) + || !(_currentTrackSlopeEnd == TrackPitch::Up25 || _currentTrackSlopeEnd == TrackPitch::Down25)) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_LARGE) | (1uLL << WIDX_RIGHT_CURVE_LARGE); } @@ -336,7 +336,7 @@ public: if (IsTrackEnabled(TRACK_SLOPE_CURVE) && IsTrackEnabled(TRACK_CURVE_VERY_SMALL)) { // Disable small curves if the start or end of the track is sloped. - if (_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _currentTrackSlopeEnd != TRACK_SLOPE_NONE) + if (_previousTrackSlopeEnd != TrackPitch::None || _currentTrackSlopeEnd != TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_VERY_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_VERY_SMALL); @@ -347,9 +347,9 @@ public: if (IsTrackEnabled(TRACK_CURVE_VERTICAL)) { // Disable all curves only on vertical track - if (_previousTrackSlopeEnd != TRACK_SLOPE_UP_90 || _currentTrackSlopeEnd != TRACK_SLOPE_UP_90) + if (_previousTrackSlopeEnd != TrackPitch::Up90 || _currentTrackSlopeEnd != TrackPitch::Up90) { - if (_previousTrackSlopeEnd != TRACK_SLOPE_DOWN_90 || _currentTrackSlopeEnd != TRACK_SLOPE_DOWN_90) + if (_previousTrackSlopeEnd != TrackPitch::Down90 || _currentTrackSlopeEnd != TrackPitch::Down90) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_VERY_SMALL) | (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_SMALL) @@ -360,7 +360,7 @@ public: else { // Disable all curves on sloped track - if (_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _currentTrackSlopeEnd != TRACK_SLOPE_NONE) + if (_previousTrackSlopeEnd != TrackPitch::None || _currentTrackSlopeEnd != TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_VERY_SMALL) | (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_SMALL) @@ -375,8 +375,8 @@ public: | (1uLL << WIDX_BANK_RIGHT); } // Disable banking if the start track is steep and the end of the track becomes flat. - if ((_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 || _previousTrackSlopeEnd == TRACK_SLOPE_UP_60) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE) + if ((_previousTrackSlopeEnd == TrackPitch::Down60 || _previousTrackSlopeEnd == TrackPitch::Up60) + && _currentTrackSlopeEnd == TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } @@ -392,7 +392,7 @@ public: // If ride type does not have access to diagonal sloped turns, disallow simultaneous use of banked and sloped diagonals if (!IsTrackEnabled(TRACK_SLOPE_CURVE_LARGE) && TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection)) { - if (_currentTrackSlopeEnd != TRACK_SLOPE_NONE) + if (_currentTrackSlopeEnd != TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } @@ -405,11 +405,11 @@ public: && !gCheatsEnableAllDrawableTrackPieces) { // Disable lift hill toggle and banking if current track piece is uphill - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_25 || _previousTrackSlopeEnd == TRACK_SLOPE_UP_60 - || _currentTrackSlopeEnd == TRACK_SLOPE_UP_25 || _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + if (_previousTrackSlopeEnd == TrackPitch::Up25 || _previousTrackSlopeEnd == TrackPitch::Up60 + || _currentTrackSlopeEnd == TrackPitch::Up25 || _currentTrackSlopeEnd == TrackPitch::Up60) disabledWidgets |= 1uLL << WIDX_CHAIN_LIFT | (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); // Disable upward slope if current track piece is not flat - if ((_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _previousTrackBankEnd != TrackBank::None) + if ((_previousTrackSlopeEnd != TrackPitch::None || _previousTrackBankEnd != TrackBank::None) && !(_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED)) disabledWidgets |= (1uLL << WIDX_SLOPE_UP); } @@ -460,8 +460,8 @@ public: { switch (_currentTrackSlopeEnd) { - case TRACK_SLOPE_UP_60: - case TRACK_SLOPE_DOWN_60: + case TrackPitch::Up60: + case TrackPitch::Down60: disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_VERY_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_VERY_SMALL); if (!IsTrackEnabled(TRACK_SLOPE_CURVE_STEEP)) @@ -469,8 +469,8 @@ public: disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE_SMALL); } break; - case TRACK_SLOPE_UP_90: - case TRACK_SLOPE_DOWN_90: + case TrackPitch::Up90: + case TrackPitch::Down90: disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_VERY_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_VERY_SMALL); if (!IsTrackEnabled(TRACK_CURVE_VERTICAL)) @@ -478,6 +478,8 @@ public: disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE_SMALL); } break; + default: + break; } } else @@ -490,17 +492,17 @@ public: switch (_previousTrackSlopeEnd) { - case TRACK_SLOPE_NONE: + case TrackPitch::None: if (_currentTrackCurve != EnumValue(TrackCurve::None) || (IsTrackEnabled(TRACK_SLOPE_STEEP_LONG) && TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP); } break; - case TRACK_SLOPE_DOWN_25: + case TrackPitch::Down25: disabledWidgets |= (1uLL << WIDX_SLOPE_UP) | (1uLL << WIDX_SLOPE_UP_STEEP); break; - case TRACK_SLOPE_DOWN_60: + case TrackPitch::Down60: disabledWidgets |= (1uLL << WIDX_SLOPE_UP) | (1uLL << WIDX_SLOPE_UP_STEEP); if (!IsTrackEnabled(TRACK_SLOPE_LONG) && !(IsTrackEnabled(TRACK_SLOPE_STEEP_LONG) && !TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) @@ -508,10 +510,10 @@ public: disabledWidgets |= (1uLL << WIDX_LEVEL); } break; - case TRACK_SLOPE_UP_25: + case TrackPitch::Up25: disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_DOWN); break; - case TRACK_SLOPE_UP_60: + case TrackPitch::Up60: disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_DOWN); if (!IsTrackEnabled(TRACK_SLOPE_LONG) && !(IsTrackEnabled(TRACK_SLOPE_STEEP_LONG) && !TrackPieceDirectionIsDiagonal(_currentTrackPieceDirection))) @@ -519,12 +521,12 @@ public: disabledWidgets |= (1uLL << WIDX_LEVEL); } break; - case TRACK_SLOPE_DOWN_90: - case TRACK_SLOPE_UP_90: + case TrackPitch::Down90: + case TrackPitch::Up90: disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_LEVEL) | (1uLL << WIDX_SLOPE_UP); break; } - if (_previousTrackSlopeEnd == TRACK_SLOPE_NONE) + if (_previousTrackSlopeEnd == TrackPitch::None) { if (!IsTrackEnabled(TRACK_SLOPE_LONG) && !IsTrackEnabled(TRACK_SLOPE_STEEP_LONG)) { @@ -533,15 +535,15 @@ public: } if (IsTrackEnabled(TRACK_SLOPE_VERTICAL)) { - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 && _currentTrackPieceDirection < 4) + if (_previousTrackSlopeEnd == TrackPitch::Up60 && _currentTrackPieceDirection < 4) { disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN_STEEP); } - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_90) + if (_previousTrackSlopeEnd == TrackPitch::Up90) { disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN_STEEP); } - if (_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 && _currentTrackPieceDirection < 4) + if (_previousTrackSlopeEnd == TrackPitch::Down60 && _currentTrackPieceDirection < 4) { disabledWidgets &= ~(1uLL << WIDX_SLOPE_UP_STEEP); } @@ -561,13 +563,13 @@ public: disabledWidgets |= (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_LARGE) | (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE); } - if (_currentTrackSlopeEnd != TRACK_SLOPE_NONE) + if (_currentTrackSlopeEnd != TrackPitch::None) { if (IsTrackEnabled(TRACK_SLOPE_ROLL_BANKING)) { - if (_previousTrackSlopeEnd == TRACK_SLOPE_NONE) + if (_previousTrackSlopeEnd == TrackPitch::None) { - if (_currentTrackSlopeEnd != TRACK_SLOPE_UP_25 && _currentTrackSlopeEnd != TRACK_SLOPE_DOWN_25) + if (_currentTrackSlopeEnd != TrackPitch::Up25 && _currentTrackSlopeEnd != TrackPitch::Down25) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } @@ -580,7 +582,7 @@ public: } else { - if (_currentTrackSlopeEnd != TRACK_SLOPE_UP_25 && _currentTrackSlopeEnd != TRACK_SLOPE_DOWN_25) + if (_currentTrackSlopeEnd != TrackPitch::Up25 && _currentTrackSlopeEnd != TrackPitch::Down25) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } @@ -602,26 +604,26 @@ public: { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE) + if (_currentTrackSlopeEnd == TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + if (_currentTrackSlopeEnd == TrackPitch::Up60) { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_60) + if (_currentTrackSlopeEnd == TrackPitch::Down60) { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } } - if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_90 || _previousTrackSlopeEnd == TRACK_SLOPE_UP_90) + if (_currentTrackSlopeEnd == TrackPitch::Up90 || _previousTrackSlopeEnd == TrackPitch::Up90) { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } if (!IsTrackEnabled(TRACK_LIFT_HILL_STEEP)) { - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 || _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + if (_previousTrackSlopeEnd == TrackPitch::Up60 || _currentTrackSlopeEnd == TrackPitch::Up60) { disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } @@ -634,13 +636,13 @@ public: } if (_currentTrackCurve != EnumValue(TrackCurve::None)) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE) + if (_currentTrackSlopeEnd == TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP); } if (_currentTrackSlopeEnd == _previousTrackSlopeEnd) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_25) + if (_currentTrackSlopeEnd == TrackPitch::Up25) { disabledWidgets |= (1uLL << WIDX_SLOPE_UP_STEEP); if (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right) @@ -649,7 +651,7 @@ public: disabledWidgets |= (1uLL << WIDX_LEVEL); } } - if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_25) + if (_currentTrackSlopeEnd == TrackPitch::Down25) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP); if (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right) @@ -677,17 +679,17 @@ public: disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); disabledWidgets &= ~(1uLL << WIDX_BANK_STRAIGHT); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE) + if (_currentTrackSlopeEnd == TrackPitch::None) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP); disabledWidgets &= ~(1uLL << WIDX_LEVEL); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_UP_25) + if (_currentTrackSlopeEnd == TrackPitch::Up25) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_LEVEL); disabledWidgets &= ~(1uLL << WIDX_SLOPE_UP); } - if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_25) + if (_currentTrackSlopeEnd == TrackPitch::Down25) { disabledWidgets |= (1uLL << WIDX_LEVEL) | (1uLL << WIDX_SLOPE_UP); disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN); @@ -702,17 +704,17 @@ public: } } } - if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TrackPitch::Up60) { disabledWidgets |= (1uLL << WIDX_SLOPE_UP); } - if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TRACK_SLOPE_DOWN_60) + if (_currentTrackCurve != EnumValue(TrackCurve::None) && _currentTrackSlopeEnd == TrackPitch::Down60) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN); } if ((_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED) && !gCheatsEnableChainLiftOnAllTrack) { - if (_currentTrackSlopeEnd != TRACK_SLOPE_NONE && !IsTrackEnabled(TRACK_LIFT_HILL_CURVE)) + if (_currentTrackSlopeEnd != TrackPitch::None && !IsTrackEnabled(TRACK_LIFT_HILL_CURVE)) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE) | (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_LARGE); @@ -725,15 +727,15 @@ public: } } } - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 && _currentTrackCurve != EnumValue(TrackCurve::None)) + if (_previousTrackSlopeEnd == TrackPitch::Up60 && _currentTrackCurve != EnumValue(TrackCurve::None)) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_LEVEL); } - if (_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 && _currentTrackCurve != EnumValue(TrackCurve::None)) + if (_previousTrackSlopeEnd == TrackPitch::Down60 && _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 (_currentTrackSlopeEnd == TrackPitch::Up90 || _previousTrackSlopeEnd == TrackPitch::Up90) { if (_currentTrackCurve != EnumValue(TrackCurve::None)) { @@ -746,7 +748,7 @@ public: | (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE); } } - else if (_currentTrackSlopeEnd == TRACK_SLOPE_DOWN_90 || _previousTrackSlopeEnd == TRACK_SLOPE_DOWN_90) + else if (_currentTrackSlopeEnd == TrackPitch::Down90 || _previousTrackSlopeEnd == TrackPitch::Down90) { if (_currentTrackCurve != EnumValue(TrackCurve::None)) { @@ -760,7 +762,7 @@ public: } } // If the previous track is flat and the next track is flat, attempt to show buttons for helixes - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackSlopeEnd == _previousTrackSlopeEnd) + if (_currentTrackSlopeEnd == TrackPitch::None && _currentTrackSlopeEnd == _previousTrackSlopeEnd) { // If the bank is none, attempt to show unbanked quarter helixes if (_currentTrackBankEnd == TrackBank::None @@ -802,7 +804,7 @@ public: if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None + if (_currentTrackSlopeEnd == TrackPitch::None && _previousTrackBankEnd != TrackBank::None && (!currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT) || gCheatsEnableAllDrawableTrackPieces)) { @@ -815,7 +817,7 @@ public: if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None) + if (_currentTrackSlopeEnd == TrackPitch::None && _previousTrackBankEnd != TrackBank::None) { disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN); } @@ -1141,11 +1143,11 @@ public: } if (widgets[WIDX_SLOPE_DOWN_STEEP].tooltip == STR_RIDE_CONSTRUCTION_STEEP_SLOPE_DOWN_TIP) { - UpdateLiftHillSelected(TRACK_SLOPE_DOWN_60); + UpdateLiftHillSelected(TrackPitch::Down60); } else { - UpdateLiftHillSelected(TRACK_SLOPE_UP_90); + UpdateLiftHillSelected(TrackPitch::Up90); } break; case WIDX_SLOPE_DOWN: @@ -1154,11 +1156,11 @@ public: { _currentTrackBankEnd = TrackBank::None; } - UpdateLiftHillSelected(TRACK_SLOPE_DOWN_25); + UpdateLiftHillSelected(TrackPitch::Down25); break; case WIDX_LEVEL: RideConstructionInvalidateCurrentTrack(); - if (_rideConstructionState == RideConstructionState::Front && _previousTrackSlopeEnd == 6) + if (_rideConstructionState == RideConstructionState::Front && _previousTrackSlopeEnd == TrackPitch::Down25) { if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { @@ -1169,7 +1171,7 @@ public: _currentTrackBankEnd = TrackBank::Right; } } - else if (_rideConstructionState == RideConstructionState::Back && _previousTrackSlopeEnd == 2) + else if (_rideConstructionState == RideConstructionState::Back && _previousTrackSlopeEnd == TrackPitch::Up25) { if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { @@ -1180,7 +1182,7 @@ public: _currentTrackBankEnd = TrackBank::Right; } } - UpdateLiftHillSelected(TRACK_SLOPE_NONE); + UpdateLiftHillSelected(TrackPitch::None); break; case WIDX_SLOPE_UP: RideConstructionInvalidateCurrentTrack(); @@ -1199,7 +1201,7 @@ public: } else { - UpdateLiftHillSelected(TRACK_SLOPE_UP_25); + UpdateLiftHillSelected(TrackPitch::Up25); } break; case WIDX_SLOPE_UP_STEEP: @@ -1276,11 +1278,11 @@ public: } if (widgets[WIDX_SLOPE_UP_STEEP].tooltip == STR_RIDE_CONSTRUCTION_STEEP_SLOPE_UP_TIP) { - UpdateLiftHillSelected(TRACK_SLOPE_UP_60); + UpdateLiftHillSelected(TrackPitch::Up60); } else { - UpdateLiftHillSelected(TRACK_SLOPE_DOWN_90); + UpdateLiftHillSelected(TrackPitch::Down90); } break; case WIDX_CHAIN_LIFT: @@ -1416,7 +1418,7 @@ public: case TrackElemType::EndStation: case TrackElemType::SBendLeft: case TrackElemType::SBendRight: - _currentTrackSlopeEnd = 0; + _currentTrackSlopeEnd = TrackPitch::None; break; case TrackElemType::LeftVerticalLoop: case TrackElemType::RightVerticalLoop: @@ -1660,7 +1662,7 @@ public: widgets[WIDX_SLOPE_UP].type = WindowWidgetType::FlatBtn; } if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) - && _currentTrackBankEnd != TrackBank::None && _currentTrackSlopeEnd == TRACK_SLOPE_NONE) + && _currentTrackBankEnd != TrackBank::None && _currentTrackSlopeEnd == TrackPitch::None) { if (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall)) { @@ -1681,7 +1683,7 @@ public: } if (currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT) - && (_currentTrackSlopeEnd == TRACK_SLOPE_UP_25 || _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) + && (_currentTrackSlopeEnd == TrackPitch::Up25 || _currentTrackSlopeEnd == TrackPitch::Up60) && !gCheatsEnableAllDrawableTrackPieces) { _currentTrackLiftHill |= CONSTRUCTION_LIFT_HILL_SELECTED; @@ -1711,7 +1713,7 @@ public: widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_STEEP_SLOPE_DOWN_TIP; if (IsTrackEnabled(TRACK_SLOPE_VERTICAL)) { - if (_previousTrackSlopeEnd == TRACK_SLOPE_UP_60 || _previousTrackSlopeEnd == TRACK_SLOPE_UP_90) + if (_previousTrackSlopeEnd == TrackPitch::Up60 || _previousTrackSlopeEnd == TrackPitch::Up90) { int32_t originalSlopeUpSteepLeft = widgets[WIDX_SLOPE_UP_STEEP].left; int32_t originalSlopeUpSteepRight = widgets[WIDX_SLOPE_UP_STEEP].right; @@ -1725,7 +1727,7 @@ public: widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_VERTICAL_RISE); widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_VERTICAL_RISE_TIP; } - else if (_previousTrackSlopeEnd == TRACK_SLOPE_DOWN_60 || _previousTrackSlopeEnd == TRACK_SLOPE_DOWN_90) + else if (_previousTrackSlopeEnd == TrackPitch::Down60 || _previousTrackSlopeEnd == TrackPitch::Down90) { int32_t originalSlopeDownSteepLeft = widgets[WIDX_SLOPE_DOWN_STEEP].left; int32_t originalSlopeDownSteepRight = widgets[WIDX_SLOPE_DOWN_STEEP].right; @@ -1742,7 +1744,7 @@ public: } if ((IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER)) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TrackBank::None + && _currentTrackSlopeEnd == TrackPitch::None && _currentTrackBankEnd == TrackBank::None && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN); @@ -1770,7 +1772,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 >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall)) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd != TrackBank::None) + && _currentTrackSlopeEnd == TrackPitch::None && _currentTrackBankEnd != TrackBank::None) { widgets[WIDX_SLOPE_DOWN_STEEP].image = ImageId(SPR_RIDE_CONSTRUCTION_HELIX_DOWN); widgets[WIDX_SLOPE_DOWN_STEEP].tooltip = STR_RIDE_CONSTRUCTION_HELIX_DOWN_TIP; @@ -1852,7 +1854,7 @@ public: if ((_currentTrackCurve < EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendLeft) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendRight)) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TrackBank::None) + && _currentTrackSlopeEnd == TrackPitch::None && _currentTrackBankEnd == TrackBank::None) { widgets[WIDX_BANKING_GROUPBOX].text = STR_RIDE_CONSTRUCTION_TRACK_STYLE; widgets[WIDX_U_TRACK].type = WindowWidgetType::FlatBtn; @@ -2028,18 +2030,18 @@ public: switch (_currentTrackSlopeEnd) { - case TRACK_SLOPE_DOWN_60: - case TRACK_SLOPE_UP_90: + case TrackPitch::Down60: + case TrackPitch::Up90: widgetIndex = WIDX_SLOPE_DOWN_STEEP; break; - case TRACK_SLOPE_DOWN_25: + case TrackPitch::Down25: widgetIndex = WIDX_SLOPE_DOWN; break; - case TRACK_SLOPE_UP_25: + case TrackPitch::Up25: widgetIndex = WIDX_SLOPE_UP; break; - case TRACK_SLOPE_UP_60: - case TRACK_SLOPE_DOWN_90: + case TrackPitch::Up60: + case TrackPitch::Down90: widgetIndex = WIDX_SLOPE_UP_STEEP; break; default: @@ -2228,7 +2230,7 @@ private: const bool helixSelected = (_currentTrackCurve & RideConstructionSpecialPieceSelected) && TrackTypeIsHelix(_currentTrackCurve & ~RideConstructionSpecialPieceSelected); - if (helixSelected || (_currentTrackSlopeEnd != TRACK_SLOPE_NONE)) + if (helixSelected || (_currentTrackSlopeEnd != TrackPitch::None)) { ViewportSetVisibility(ViewportVisibility::TrackHeights); } @@ -2406,7 +2408,7 @@ private: } } - void UpdateLiftHillSelected(int32_t slope) + void UpdateLiftHillSelected(TrackPitch slope) { _currentTrackSlopeEnd = slope; _currentTrackPrice = MONEY64_UNDEFINED; @@ -2414,9 +2416,9 @@ private: { switch (slope) { - case TRACK_SLOPE_NONE: - case TRACK_SLOPE_UP_25: - case TRACK_SLOPE_UP_60: + case TrackPitch::None: + case TrackPitch::Up25: + case TrackPitch::Up60: break; default: _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; @@ -3592,8 +3594,8 @@ void RideConstructionTooldownConstruct(const ScreenCoordsXY& screenCoords) { int32_t saveTrackDirection = _currentTrackPieceDirection; auto saveCurrentTrackCurve = _currentTrackCurve; - int32_t savePreviousTrackSlopeEnd = _previousTrackSlopeEnd; - int32_t saveCurrentTrackSlopeEnd = _currentTrackSlopeEnd; + auto savePreviousTrackSlopeEnd = _previousTrackSlopeEnd; + auto saveCurrentTrackSlopeEnd = _currentTrackSlopeEnd; auto savePreviousTrackBankEnd = _previousTrackBankEnd; auto saveCurrentTrackBankEnd = _currentTrackBankEnd; int32_t saveCurrentTrackAlternative = _currentTrackAlternative; @@ -4155,7 +4157,7 @@ void WindowRideConstructionKeyboardShortcutSlopeDown() switch (_currentTrackSlopeEnd) { - case TRACK_SLOPE_DOWN_60: + case TrackPitch::Down60: if (IsTrackEnabled(TRACK_SLOPE_VERTICAL) && !WidgetIsDisabled(*w, WIDX_SLOPE_UP_STEEP) && w->widgets[WIDX_SLOPE_UP_STEEP].image.GetIndex() == SPR_RIDE_CONSTRUCTION_VERTICAL_DROP && w->widgets[WIDX_SLOPE_UP_STEEP].type != WindowWidgetType::Empty) @@ -4163,14 +4165,14 @@ void WindowRideConstructionKeyboardShortcutSlopeDown() WindowEventMouseDownCall(w, WIDX_SLOPE_UP_STEEP); } break; - case TRACK_SLOPE_DOWN_25: + case TrackPitch::Down25: if (!WidgetIsDisabled(*w, WIDX_SLOPE_DOWN_STEEP) && w->widgets[WIDX_SLOPE_DOWN_STEEP].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_DOWN_STEEP); } break; - case TRACK_SLOPE_NONE: + case TrackPitch::None: if (!WidgetIsDisabled(*w, WIDX_SLOPE_DOWN) && w->widgets[WIDX_SLOPE_DOWN].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_DOWN); @@ -4192,7 +4194,7 @@ void WindowRideConstructionKeyboardShortcutSlopeDown() return; } break; - case TRACK_SLOPE_UP_25: + case TrackPitch::Up25: if (!WidgetIsDisabled(*w, WIDX_LEVEL) && w->widgets[WIDX_LEVEL].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_LEVEL); @@ -4212,7 +4214,7 @@ void WindowRideConstructionKeyboardShortcutSlopeDown() return; } break; - case TRACK_SLOPE_UP_60: + case TrackPitch::Up60: if (!WidgetIsDisabled(*w, WIDX_SLOPE_UP) && w->widgets[WIDX_SLOPE_UP].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_UP); @@ -4242,7 +4244,7 @@ void WindowRideConstructionKeyboardShortcutSlopeDown() return; } break; - case TRACK_SLOPE_UP_90: + case TrackPitch::Up90: if (IsTrackEnabled(TRACK_SLOPE_VERTICAL) && !WidgetIsDisabled(*w, WIDX_SLOPE_UP_STEEP) && w->widgets[WIDX_SLOPE_DOWN_STEEP].image.GetIndex() == SPR_RIDE_CONSTRUCTION_VERTICAL_RISE && w->widgets[WIDX_SLOPE_DOWN_STEEP].type != WindowWidgetType::Empty) @@ -4265,7 +4267,7 @@ void WindowRideConstructionKeyboardShortcutSlopeUp() switch (_currentTrackSlopeEnd) { - case TRACK_SLOPE_UP_60: + case TrackPitch::Up60: if (IsTrackEnabled(TRACK_SLOPE_VERTICAL) && !WidgetIsDisabled(*w, WIDX_SLOPE_DOWN_STEEP) && w->widgets[WIDX_SLOPE_DOWN_STEEP].image.GetIndex() == SPR_RIDE_CONSTRUCTION_VERTICAL_RISE && w->widgets[WIDX_SLOPE_DOWN_STEEP].type != WindowWidgetType::Empty) @@ -4273,13 +4275,13 @@ void WindowRideConstructionKeyboardShortcutSlopeUp() WindowEventMouseDownCall(w, WIDX_SLOPE_DOWN_STEEP); } break; - case TRACK_SLOPE_UP_25: + case TrackPitch::Up25: if (!WidgetIsDisabled(*w, WIDX_SLOPE_UP_STEEP) && w->widgets[WIDX_SLOPE_UP_STEEP].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_UP_STEEP); } break; - case TRACK_SLOPE_NONE: + case TrackPitch::None: if (!WidgetIsDisabled(*w, WIDX_SLOPE_UP) && w->widgets[WIDX_SLOPE_UP].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_UP); @@ -4300,7 +4302,7 @@ void WindowRideConstructionKeyboardShortcutSlopeUp() return; } break; - case TRACK_SLOPE_DOWN_25: + case TrackPitch::Down25: if (!WidgetIsDisabled(*w, WIDX_LEVEL) && w->widgets[WIDX_LEVEL].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_LEVEL); @@ -4319,7 +4321,7 @@ void WindowRideConstructionKeyboardShortcutSlopeUp() return; } break; - case TRACK_SLOPE_DOWN_60: + case TrackPitch::Down60: if (!WidgetIsDisabled(*w, WIDX_SLOPE_DOWN) && w->widgets[WIDX_SLOPE_DOWN].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_SLOPE_DOWN); @@ -4348,7 +4350,7 @@ void WindowRideConstructionKeyboardShortcutSlopeUp() return; } break; - case TRACK_SLOPE_DOWN_90: + case TrackPitch::Down90: if (IsTrackEnabled(TRACK_SLOPE_VERTICAL) && !WidgetIsDisabled(*w, WIDX_SLOPE_DOWN_STEEP) && w->widgets[WIDX_SLOPE_UP_STEEP].image.GetIndex() == SPR_RIDE_CONSTRUCTION_VERTICAL_DROP && w->widgets[WIDX_SLOPE_DOWN_STEEP].type != WindowWidgetType::Empty) @@ -4499,8 +4501,8 @@ static void WindowRideConstructionMouseUpDemolishNextPiece(const CoordsXYZD& pie _currentTrackSelectionFlags = 0; _currentTrackPieceDirection = piecePos.direction & 3; auto savedCurrentTrackCurve = _currentTrackCurve; - int32_t savedPreviousTrackSlopeEnd = _previousTrackSlopeEnd; - int32_t savedCurrentTrackSlopeEnd = _currentTrackSlopeEnd; + auto savedPreviousTrackSlopeEnd = _previousTrackSlopeEnd; + auto savedCurrentTrackSlopeEnd = _currentTrackSlopeEnd; auto savedPreviousTrackBankEnd = _previousTrackBankEnd; auto savedCurrentTrackBankEnd = _currentTrackBankEnd; int32_t savedCurrentTrackAlternative = _currentTrackAlternative; diff --git a/src/openrct2/ride/RideConstruction.cpp b/src/openrct2/ride/RideConstruction.cpp index 27433d6213..f372ea115a 100644 --- a/src/openrct2/ride/RideConstruction.cpp +++ b/src/openrct2/ride/RideConstruction.cpp @@ -64,14 +64,14 @@ uint8_t _currentTrackPieceDirection; track_type_t _currentTrackPieceType; uint8_t _currentTrackSelectionFlags; uint32_t _rideConstructionNextArrowPulse = 0; -uint8_t _currentTrackSlopeEnd; +TrackPitch _currentTrackSlopeEnd; TrackBank _currentTrackBankEnd; uint8_t _currentTrackLiftHill; uint8_t _currentTrackAlternative; track_type_t _selectedTrackType; TrackBank _previousTrackBankEnd; -uint8_t _previousTrackSlopeEnd; +TrackPitch _previousTrackSlopeEnd; CoordsXYZ _previousTrackPiece; @@ -606,7 +606,7 @@ static void ride_construction_reset_current_piece() if (rtd.HasFlag(RIDE_TYPE_FLAG_HAS_TRACK) || ride->num_stations == 0) { _currentTrackCurve = rtd.StartTrackPiece | RideConstructionSpecialPieceSelected; - _currentTrackSlopeEnd = 0; + _currentTrackSlopeEnd = TrackPitch::None; _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; @@ -614,7 +614,7 @@ static void ride_construction_reset_current_piece() { _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } - _previousTrackSlopeEnd = 0; + _previousTrackSlopeEnd = TrackPitch::None; _previousTrackBankEnd = TrackBank::None; } else @@ -637,7 +637,7 @@ void RideConstructionSetDefaultNextPiece() const auto& rtd = ride->GetRideTypeDescriptor(); - int32_t z, direction, trackType, curve, slope; + int32_t z, direction, trackType, curve; TrackBeginEnd trackBeginEnd; CoordsXYE xyElement; TileElement* tileElement; @@ -676,7 +676,7 @@ void RideConstructionSetDefaultNextPiece() ted = &GetTrackElementDescriptor(trackType); curve = ted->CurveChain.next; auto bank = ted->Definition.bank_end; - slope = ted->Definition.vangle_end; + auto slope = ted->Definition.vangle_end; // Set track curve _currentTrackCurve = curve; @@ -697,7 +697,7 @@ void RideConstructionSetDefaultNextPiece() _currentTrackSlopeEnd = slope; _previousTrackSlopeEnd = slope; _currentTrackLiftHill = tileElement->AsTrack()->HasChain() - && ((slope != TRACK_SLOPE_DOWN_25 && slope != TRACK_SLOPE_DOWN_60) || gCheatsEnableChainLiftOnAllTrack); + && ((slope != TrackPitch::Down25 && slope != TrackPitch::Down60) || gCheatsEnableChainLiftOnAllTrack); break; } case RideConstructionState::Back: @@ -724,7 +724,7 @@ void RideConstructionSetDefaultNextPiece() ted = &GetTrackElementDescriptor(trackType); curve = ted->CurveChain.previous; auto bank = ted->Definition.bank_start; - slope = ted->Definition.vangle_start; + auto slope = ted->Definition.vangle_start; // Set track curve _currentTrackCurve = curve; @@ -1123,7 +1123,7 @@ int32_t RideInitialiseConstructionWindow(Ride& ride) InputSetFlag(INPUT_FLAG_6, true); _currentTrackCurve = ride.GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; - _currentTrackSlopeEnd = 0; + _currentTrackSlopeEnd = TrackPitch::None; _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; @@ -1132,7 +1132,7 @@ int32_t RideInitialiseConstructionWindow(Ride& ride) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; _previousTrackBankEnd = TrackBank::None; - _previousTrackSlopeEnd = 0; + _previousTrackSlopeEnd = TrackPitch::None; _currentTrackPieceDirection = 0; _rideConstructionState = RideConstructionState::Place; diff --git a/src/openrct2/ride/RideConstruction.h b/src/openrct2/ride/RideConstruction.h index 96e46205b4..ba6dcdcc9f 100644 --- a/src/openrct2/ride/RideConstruction.h +++ b/src/openrct2/ride/RideConstruction.h @@ -48,14 +48,14 @@ extern uint8_t _currentTrackPieceDirection; extern track_type_t _currentTrackPieceType; extern uint8_t _currentTrackSelectionFlags; extern uint32_t _rideConstructionNextArrowPulse; -extern uint8_t _currentTrackSlopeEnd; +extern TrackPitch _currentTrackSlopeEnd; extern TrackBank _currentTrackBankEnd; extern uint8_t _currentTrackLiftHill; extern uint8_t _currentTrackAlternative; extern track_type_t _selectedTrackType; extern TrackBank _previousTrackBankEnd; -extern uint8_t _previousTrackSlopeEnd; +extern TrackPitch _previousTrackSlopeEnd; extern CoordsXYZ _previousTrackPiece; diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 8472dd1e43..7d1aa7a9dd 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -53,18 +53,16 @@ PitchAndRoll TrackPitchAndRollEnd(track_type_t trackType) */ int32_t TrackIsConnectedByShape(TileElement* a, TileElement* b) { - int32_t trackType, aAngle, bAngle; - - trackType = a->AsTrack()->GetTrackType(); + auto trackType = a->AsTrack()->GetTrackType(); const auto* ted = &GetTrackElementDescriptor(trackType); auto aBank = ted->Definition.bank_end; - aAngle = ted->Definition.vangle_end; + auto aAngle = ted->Definition.vangle_end; aBank = TrackGetActualBank(a, aBank); trackType = b->AsTrack()->GetTrackType(); ted = &GetTrackElementDescriptor(trackType); auto bBank = ted->Definition.bank_start; - bAngle = ted->Definition.vangle_start; + auto bAngle = ted->Definition.vangle_start; bBank = TrackGetActualBank(b, bBank); return aBank == bBank && aAngle == bAngle; diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 6199eee6f8..3c3d61ccb4 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -23,7 +23,6 @@ constexpr int32_t kBlockBrakeBaseSpeed = 0x20364; constexpr int32_t kBlockBrakeSpeedOffset = kBlockBrakeBaseSpeed - (kRCT2DefaultBlockBrakeSpeed << 16); using track_type_t = uint16_t; -using pitch_type_t = uint8_t; struct ResultWithMessage; @@ -35,11 +34,25 @@ enum class TrackBank : uint8_t UpsideDown = 15, }; +enum class TrackPitch : uint8_t +{ + None = 0, + Up25 = 2, + Up60 = 4, + Down25 = 6, + Down60 = 8, + Up90 = 10, + Down90 = 18, + + Tower = 10, + ReverseFreefall = 10 +}; + struct TrackDefinition { track_type_t type; - pitch_type_t vangle_end; - pitch_type_t vangle_start; + TrackPitch vangle_end; + TrackPitch vangle_start; TrackBank bank_end; TrackBank bank_start; int8_t preview_z_offset; @@ -47,7 +60,7 @@ struct TrackDefinition struct PitchAndRoll { - pitch_type_t Pitch; + TrackPitch Pitch; TrackBank Roll; }; constexpr bool operator==(const PitchAndRoll& vb1, const PitchAndRoll& vb2) @@ -226,20 +239,6 @@ enum class TrackCurve : uint8_t RightVerySmall = 6 }; -enum -{ - TRACK_SLOPE_NONE = 0, - TRACK_SLOPE_UP_25 = 2, - TRACK_SLOPE_UP_60 = 4, - TRACK_SLOPE_DOWN_25 = 6, - TRACK_SLOPE_DOWN_60 = 8, - TRACK_SLOPE_UP_90 = 10, - TRACK_SLOPE_DOWN_90 = 18, - - TRACK_VANGLE_TOWER = 10, - TRACK_VANGLE_REVERSE_FREEFALL = 10 -}; - enum { TRACK_ELEM_FLAG_ONLY_UNDERWATER = (1 << 0), diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 630c780883..ac6a5ded1e 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -4040,192 +4040,192 @@ static constexpr TrackCurveChain gTrackCurveChain[] = { static_assert(std::size(gTrackCurveChain) == TrackElemType::Count); const TrackDescriptor gTrackDescriptors[186] = { - { true, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::DiagDown60 }, - { true, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagDown60ToDown25 }, - { true, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagDown60ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::DiagDown25ToDown60 }, - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagDown25 }, - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagDown25ToLeftBank }, - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagDown25ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagDown25ToRightBank }, - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonal }, - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagLeftBankToDown25 }, - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagLeftBank }, - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagLeftBankToFlat }, - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagLeftBankToUp25 }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::DiagFlatToDown60 }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagFlatToDown25 }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagFlatToLeftBank }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagFlat }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagFlatToRightBank }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagFlatToUp25 }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::DiagFlatToUp60 }, - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagRightBankToDown25 }, - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagRightBankToFlat }, - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagRightBank }, - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagRightBankToUp25 }, - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonal }, - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagUp25ToLeftBank }, - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagUp25ToFlat }, - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagUp25ToRightBank }, - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagUp25 }, - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::DiagUp25ToUp60 }, - { true, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagUp60ToFlat }, - { true, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagUp60ToUp25 }, - { true, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::DiagUp60 }, - { false, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackElemType::LeftQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackElemType::Down90 }, - { false, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::Down90ToDown60 }, - { false, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackElemType::RightQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::LeftQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackElemType::Down60ToDown90 }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::Down60 }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::Down60ToDown25 }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::Down60ToFlat }, - { false, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::RightQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::Down25LeftBanked }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::Down25ToDown60 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::Down25ToLeftBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::Down25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::Down25ToRightBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::Down25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::Down25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::Down25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::Down25RightBanked }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightBankedDown25ToRightBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::Left, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::BankedLeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftBankToDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftBank }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftBankToFlat }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftBankToUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::Left, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftEighthToDiag }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackElemType::FlatToDown60 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::FlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::FlatToDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::FlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::FlatToLeftBank }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::Flat }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::LeftVerySmall, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::RightVerySmall, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::FlatToRightBank }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::FlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::FlatToUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::FlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::FlatToUp60 }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightEighthToDiag }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::Right, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightBankToDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::RightBankedFlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightBankToFlat }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightBank }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightBankToUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::RightBankedFlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::Right, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::BankedRightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::Left, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::LeftBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::Up25LeftBanked }, - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::Left, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::Up25ToLeftBank }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::Up25ToFlat }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::Up25ToRightBank }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::Up25ToLeftBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::Up25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::Up25ToRightBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::Up25ToUp60 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::Right, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::RightBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::RightBankedUp25ToRightBankedFlat }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::Up25RightBanked }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::Right, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::LeftQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::Up60ToFlat }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::Up60ToUp25 }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::Up60 }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_90, TrackBank::None, TrackElemType::Up60ToUp90 }, - { false, TRACK_SLOPE_UP_60, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::RightQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_90, TrackBank::None, TrackCurve::LeftSmall, TRACK_SLOPE_UP_90, TrackBank::None, TrackElemType::LeftQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_90, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_60, TrackBank::None, TrackElemType::Up90ToUp60 }, - { false, TRACK_SLOPE_UP_90, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_90, TrackBank::None, TrackElemType::Up90 }, - { false, TRACK_SLOPE_UP_90, TrackBank::None, TrackCurve::RightSmall, TRACK_SLOPE_UP_90, TrackBank::None, TrackElemType::RightQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 - { false, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::None, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { true, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Left, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { true, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::Right, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat - { true, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TrackBank::None, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat - { true, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_NONE, TrackBank::None, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat - { true, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked - { true, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked - { true, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked - { true, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::None, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked - { false, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 - { false, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 - { true, TRACK_SLOPE_UP_25, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { true, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::DiagDown60 }, + { true, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagDown60ToDown25 }, + { true, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagDown60ToFlat }, + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::DiagDown25ToDown60 }, + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagDown25 }, + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagDown25ToLeftBank }, + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagDown25ToFlat }, + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagDown25ToRightBank }, + { true, TrackPitch::None, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonal }, + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagLeftBankToDown25 }, + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagLeftBank }, + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagLeftBankToFlat }, + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagLeftBankToUp25 }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::None, TrackBank::None, TrackElemType::LeftEighthToOrthogonal }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::DiagFlatToDown60 }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagFlatToDown25 }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagFlatToLeftBank }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagFlat }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagFlatToRightBank }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagFlatToUp25 }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::DiagFlatToUp60 }, + { true, TrackPitch::None, TrackBank::None, TrackCurve::RightLarge, TrackPitch::None, TrackBank::None, TrackElemType::RightEighthToOrthogonal }, + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagRightBankToDown25 }, + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagRightBankToFlat }, + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagRightBank }, + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagRightBankToUp25 }, + { true, TrackPitch::None, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::None, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonal }, + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagUp25ToLeftBank }, + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagUp25ToFlat }, + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagUp25ToRightBank }, + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagUp25 }, + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::DiagUp25ToUp60 }, + { true, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagUp60ToFlat }, + { true, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagUp60ToUp25 }, + { true, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::DiagUp60 }, + { false, TrackPitch::Down90, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Down90, TrackBank::None, TrackElemType::LeftQuarterTurn1TileDown90 }, + { false, TrackPitch::Down90, TrackBank::None, TrackCurve::None, TrackPitch::Down90, TrackBank::None, TrackElemType::Down90 }, + { false, TrackPitch::Down90, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::Down90ToDown60 }, + { false, TrackPitch::Down90, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Down90, TrackBank::None, TrackElemType::RightQuarterTurn1TileDown90 }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Down60, TrackBank::None, TrackElemType::LeftQuarterTurn1TileDown60 }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::Down90, TrackBank::None, TrackElemType::Down60ToDown90 }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::Down60 }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::Down60ToDown25 }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::Down60ToFlat }, + { false, TrackPitch::Down60, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Down60, TrackBank::None, TrackElemType::RightQuarterTurn1TileDown60 }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::LeftSmall, TrackPitch::Down25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::Left, TrackPitch::Down25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::Down25LeftBanked }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftBankedDown25ToDown25 }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::LeftBankedDown25ToFlat }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftQuarterTurn3TilesDown25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::None, TrackBank::Left, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::Left, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftQuarterTurn5TilesDown25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::Down25ToDown60 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::Down25ToLeftBankedDown25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::Down25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::Down25ToRightBankedDown25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::Down25ToLeftBank }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::Down25ToFlat }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::Down25ToRightBank }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::Right, TrackPitch::Down25, TrackBank::None, TrackElemType::RightQuarterTurn5TilesDown25 }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::RightSmall, TrackPitch::None, TrackBank::Right, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Down25, TrackBank::None, TrackElemType::RightQuarterTurn3TilesDown25 }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::RightBankedDown25ToDown25 }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::Down25RightBanked }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::RightBankedDown25ToFlat }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::RightBankedDown25ToRightBankedFlat }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::Right, TrackPitch::Down25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn5TileDown25 }, + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::RightSmall, TrackPitch::Down25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3TileDown25 }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::LeftSmall, TrackPitch::None, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::Left, TrackPitch::None, TrackBank::Left, TrackElemType::BankedLeftQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackBank::Left, TrackElemType::LeftEighthBankToDiag }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftBankToDown25 }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::LeftBank }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::LeftBankToFlat }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, + { false, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftBankToUp25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::None, TrackBank::None, TrackElemType::LeftQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::Left, TrackPitch::None, TrackBank::None, TrackElemType::LeftQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::None, TrackBank::None, TrackElemType::LeftEighthToDiag }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down60, TrackBank::None, TrackElemType::FlatToDown60 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::FlatToLeftBankedDown25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::FlatToDown25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::FlatToRightBankedDown25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::FlatToLeftBank }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::Flat }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::LeftVerySmall, TrackPitch::None, TrackBank::None, TrackElemType::LeftQuarterTurn1Tile }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::RightVerySmall, TrackPitch::None, TrackBank::None, TrackElemType::RightQuarterTurn1Tile }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::FlatToRightBank }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::FlatToLeftBankedUp25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::FlatToUp25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::FlatToRightBankedUp25 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::FlatToUp60 }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::RightLarge, TrackPitch::None, TrackBank::None, TrackElemType::RightEighthToDiag }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::Right, TrackPitch::None, TrackBank::None, TrackElemType::RightQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackBank::None, TrackCurve::RightSmall, TrackPitch::None, TrackBank::None, TrackElemType::RightQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::RightBankToDown25 }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::RightBankedFlatToRightBankedDown25 }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::RightBankToFlat }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::RightBank }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::RightBankToUp25 }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::RightBankedFlatToRightBankedUp25 }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::None, TrackBank::Right, TrackElemType::RightEighthBankToDiag }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::Right, TrackPitch::None, TrackBank::Right, TrackElemType::BankedRightQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::RightSmall, TrackPitch::None, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackBank::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackBank::None, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::Left, TrackPitch::Up25, TrackBank::Left, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::LeftBankedUp25ToFlat }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::Up25LeftBanked }, + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftBankedUp25ToUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::Left, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftQuarterTurn5TilesUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::Up25ToLeftBank }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::Up25ToFlat }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::Up25ToRightBank }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::Up25ToLeftBankedUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::Up25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::Up25ToRightBankedUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::Up25ToUp60 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::Right, TrackPitch::Up25, TrackBank::None, TrackElemType::RightQuarterTurn5TilesUp25 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Up25, TrackBank::None, TrackElemType::RightQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::RightBankedUp25ToFlat }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::RightBankedUp25ToRightBankedFlat }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::RightBankedUp25ToUp25 }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::Up25RightBanked }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::Right, TrackPitch::Up25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn5TileUp25 }, + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackBank::Right, TrackElemType::RightBankedQuarterTurn3TileUp25 }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Up60, TrackBank::None, TrackElemType::LeftQuarterTurn1TileUp60 }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::Up60ToFlat }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::Up60ToUp25 }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::Up60 }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::None, TrackPitch::Up90, TrackBank::None, TrackElemType::Up60ToUp90 }, + { false, TrackPitch::Up60, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Up60, TrackBank::None, TrackElemType::RightQuarterTurn1TileUp60 }, + { false, TrackPitch::Up90, TrackBank::None, TrackCurve::LeftSmall, TrackPitch::Up90, TrackBank::None, TrackElemType::LeftQuarterTurn1TileUp90 }, + { false, TrackPitch::Up90, TrackBank::None, TrackCurve::None, TrackPitch::Up60, TrackBank::None, TrackElemType::Up90ToUp60 }, + { false, TrackPitch::Up90, TrackBank::None, TrackCurve::None, TrackPitch::Up90, TrackBank::None, TrackElemType::Up90 }, + { false, TrackPitch::Up90, TrackBank::None, TrackCurve::RightSmall, TrackPitch::Up90, TrackBank::None, TrackElemType::RightQuarterTurn1TileUp90 }, + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 + { false, TrackPitch::Up25, TrackBank::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackBank::None, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 + { false, TrackPitch::Down25, TrackBank::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackBank::None, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackBank::None, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackBank::None, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackBank::None, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackBank::None, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { true, TrackPitch::Up25, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { true, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { true, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::None, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { true, TrackPitch::Down25, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { true, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { true, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::None, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { true, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { true, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { true, TrackPitch::None, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { true, TrackPitch::None, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { true, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::Left, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { true, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::Right, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 + { true, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat + { true, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { true, TrackPitch::None, TrackBank::None, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 + { true, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat + { true, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::None, TrackBank::None, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat + { true, TrackPitch::Up25, TrackBank::Left, TrackCurve::None, TrackPitch::Up25, TrackBank::Left, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked + { true, TrackPitch::Up25, TrackBank::Right, TrackCurve::None, TrackPitch::Up25, TrackBank::Right, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked + { true, TrackPitch::Down25, TrackBank::Left, TrackCurve::None, TrackPitch::Down25, TrackBank::Left, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked + { true, TrackPitch::Down25, TrackBank::Right, TrackCurve::None, TrackPitch::Down25, TrackBank::Right, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked + { false, TrackPitch::Up25, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackBank::Left, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 + { false, TrackPitch::Up25, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackBank::Right, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 + { false, TrackPitch::Down25, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackBank::Left, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 + { false, TrackPitch::Down25, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackBank::Right, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 + { true, TrackPitch::Up25, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { true, TrackPitch::Up25, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { true, TrackPitch::Down25, TrackBank::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackBank::Left, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { true, TrackPitch::Down25, TrackBank::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackBank::Right, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; /** rct2: 0x00993D1C */ @@ -6305,345 +6305,345 @@ static_assert(std::size(TrackFlags) == TrackElemType::Count); static constexpr TrackDefinition TrackDefinitions[] = { // TYPE VANGLE END VANGLE START BANK END BANK START PREVIEW Z OFFSET - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT - { TRACK_STATION_END, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_END_STATION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_BEGIN_STATION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MIDDLE_STATION - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_S_BEND, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_LEFT - { TRACK_S_BEND, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_RIGHT - { TRACK_VERTICAL_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, -48 }, // ELEM_LEFT_VERTICAL_LOOP - { TRACK_VERTICAL_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, -48 }, // ELEM_RIGHT_VERTICAL_LOOP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN - { TRACK_HALF_LOOP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_HALF_LOOP_UP - { TRACK_HALF_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_HALF_LOOP_DOWN - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_CORKSCREW_UP - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_CORKSCREW_UP - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -32 }, // ELEM_LEFT_CORKSCREW_DOWN - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -32 }, // ELEM_RIGHT_CORKSCREW_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT - { TRACK_TOWER_BASE, TRACK_VANGLE_TOWER, TRACK_VANGLE_TOWER, TrackBank::None, TrackBank::None, 0 }, // ELEM_TOWER_BASE - { TRACK_TOWER_BASE, TRACK_VANGLE_TOWER, TRACK_VANGLE_TOWER, TrackBank::None, TrackBank::None, 0 }, // ELEM_TOWER_SECTION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_LEFT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_RIGHT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_BRAKES - { TRACK_BOOSTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_BOOSTER - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::Maze - { TRACK_HELIX_UP_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_UP_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_UP_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_UP_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED - { TRACK_WATERFALL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_WATERFALL - { TRACK_RAPIDS, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RAPIDS - { TRACK_ON_RIDE_PHOTO, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_ON_RIDE_PHOTO - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED - { TRACK_WATER_SPLASH, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_WATER_SPLASH - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE - { TRACK_WHIRLPOOL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_WHIRLPOOL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 - { TRACK_LIFT_HILL_CABLE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_CABLE_LIFT_HILL - { TRACK_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE - { TRACK_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TrackBank::None,TrackBank::None, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN - { TRACK_BRAKE_FOR_DROP, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_BRAKE_FOR_DROP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_EIGHTH_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK - { TRACK_LOG_FLUME_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LOG_FLUME_REVERSER - { TRACK_SPINNING_TUNNEL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_SPINNING_TUNNEL - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_POWERED_LIFT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 0 }, // ELEM_POWERED_LIFT - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN - {TRACK_INLINE_TWIST_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN - {TRACK_INLINE_TWIST_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN - {TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_FLYER_HALF_LOOP_UP - {TRACK_FLYING_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // ELEM_FLYER_HALF_LOOP_DOWN - {TRACK_CORKSCREW_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -32 }, // ELEM_LEFT_FLYER_CORKSCREW_DOWN - {TRACK_CORKSCREW_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -32 }, // ELEM_RIGHT_FLYER_CORKSCREW_DOWN - {TRACK_HEARTLINE_TRANSFER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_HEARTLINE_TRANSFER_UP - {TRACK_HEARTLINE_TRANSFER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN - {TRACK_HEARTLINE_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_HEARTLINE_ROLL - {TRACK_HEARTLINE_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_A - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_B - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_C - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_D - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_E - { TRACK_QUARTER_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_QUARTER_LOOP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP - { TRACK_QUARTER_LOOP, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_LIFT_HILL_CURVED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_CURVED_LIFT_HILL - { TRACK_LIFT_HILL_CURVED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_CURVED_LIFT_HILL - { TRACK_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_REVERSER - { TRACK_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_REVERSER - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_UP_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_TOP_CAP - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL - { TRACK_BLOCK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_BLOCK_BRAKES - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_QUARTER_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP - { TRACK_QUARTER_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP - { TRACK_QUARTER_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP - { TRACK_ROTATION_CONTROL_TOGGLE,TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x4A - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack2x2 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack4x4 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack2x4 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x5 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x1A - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x4B - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x1B - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, -40 }, // TrackElemType::FlatTrack1x4C - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack3x3 - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 32 }, // TrackElemType::LeftLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, 32 }, // TrackElemType::RightLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -32 }, // TrackElemType::LeftLargeCorkscrewDown - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -32 }, // TrackElemType::RightLargeCorkscrewDown - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::LeftMediumHalfLoopDown - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::RightMediumHalfLoopDown - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 0 }, // TrackElemType::LeftZeroGRollUp - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 0 }, // TrackElemType::RightZeroGRollUp - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // TrackElemType::LeftZeroGRollDown - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, 0 }, // TrackElemType::RightZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::LeftLargeZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::RightLargeZeroGRollDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::FlyerHalfLoopInvertedUp - { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::FlyerHalfLoopUninvertedDown - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::LeftEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::RightEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::LeftEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::RightEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::RightEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::RightEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::Up25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::Up25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::Down25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::Down25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 16 }, // TrackElemType::LeftEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 16 }, // TrackElemType::RightEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, -16 }, // TrackElemType::LeftEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, -16 }, // TrackElemType::RightEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Left, TrackBank::Left, 16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TrackBank::Right, TrackBank::Right, 16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Left, TrackBank::Left, -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TrackBank::Right, TrackBank::Right, -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25 - { TRACK_DIAG_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::DiagBrakes - { TRACK_DIAG_BLOCK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::DiagBlockBrakes + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT + { TRACK_STATION_END, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_END_STATION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_BEGIN_STATION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MIDDLE_STATION + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN + { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_LEFT + { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_RIGHT + { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackBank::None, TrackBank::None, -48 }, // ELEM_LEFT_VERTICAL_LOOP + { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackBank::None, TrackBank::None, -48 }, // ELEM_RIGHT_VERTICAL_LOOP + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN + { TRACK_HALF_LOOP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_HALF_LOOP_UP + { TRACK_HALF_LOOP, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_HALF_LOOP_DOWN + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_CORKSCREW_UP + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_CORKSCREW_UP + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -32 }, // ELEM_LEFT_CORKSCREW_DOWN + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -32 }, // ELEM_RIGHT_CORKSCREW_DOWN + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT + { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackBank::None, TrackBank::None, 0 }, // ELEM_TOWER_BASE + { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackBank::None, TrackBank::None, 0 }, // ELEM_TOWER_SECTION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_LEFT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_S_BEND_RIGHT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN + { TRACK_BRAKES, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_BRAKES + { TRACK_BOOSTER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_BOOSTER + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::Maze + { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP + { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP + { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN + { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN + { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP + { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP + { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN + { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED + { TRACK_WATERFALL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_WATERFALL + { TRACK_RAPIDS, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RAPIDS + { TRACK_ON_RIDE_PHOTO, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_ON_RIDE_PHOTO + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED + { TRACK_WATER_SPLASH, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_WATER_SPLASH + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE + { TRACK_WHIRLPOOL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_WHIRLPOOL + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 + { TRACK_LIFT_HILL_CABLE, TrackPitch::Down60, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_CABLE_LIFT_HILL + { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE + { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::ReverseFreefall, TrackBank::None,TrackBank::None, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up90, TrackBank::None, TrackBank::None, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN + { TRACK_BRAKE_FOR_DROP, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_BRAKE_FOR_DROP + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_EIGHTH_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackBank::None, TrackBank::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_DIAG_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_DIAG_RIGHT_BANK + { TRACK_LOG_FLUME_REVERSER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LOG_FLUME_REVERSER + { TRACK_SPINNING_TUNNEL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_SPINNING_TUNNEL + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_POWERED_LIFT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 0 }, // ELEM_POWERED_LIFT + {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP + {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP + {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN + {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN + {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_TWIST_UP + {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP + {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN + {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN + {TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // ELEM_FLYER_HALF_LOOP_UP + {TRACK_FLYING_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // ELEM_FLYER_HALF_LOOP_DOWN + {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_LEFT_FLYER_CORKSCREW_UP + {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_RIGHT_FLYER_CORKSCREW_UP + {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -32 }, // ELEM_LEFT_FLYER_CORKSCREW_DOWN + {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -32 }, // ELEM_RIGHT_FLYER_CORKSCREW_DOWN + {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_HEARTLINE_TRANSFER_UP + {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN + {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_HEARTLINE_ROLL + {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_A + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_B + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_C + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_D + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_MINI_GOLF_HOLE_E + { TRACK_QUARTER_LOOP_INVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN + { TRACK_QUARTER_LOOP, TrackPitch::None, TrackPitch::Up90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP + { TRACK_QUARTER_LOOP, TrackPitch::Down90, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN + { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_CURVED_LIFT_HILL + { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_CURVED_LIFT_HILL + { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_REVERSER + { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_REVERSER + { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Up90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_TOP_CAP + { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN + { TRACK_SLOPE_TO_FLAT, TrackPitch::None, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL + { TRACK_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_BLOCK_BRAKES + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackBank::None, TrackBank::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN + { TRACK_QUARTER_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP + { TRACK_QUARTER_LOOP_UNINVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP + { TRACK_QUARTER_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackBank::UpsideDown, TrackBank::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP + { TRACK_ROTATION_CONTROL_TOGGLE,TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x4A + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack2x2 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack4x4 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack2x4 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x5 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x1A + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x4B + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack1x1B + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, -40 }, // TrackElemType::FlatTrack1x4C + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::FlatTrack3x3 + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 32 }, // TrackElemType::LeftLargeCorkscrewUp + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, 32 }, // TrackElemType::RightLargeCorkscrewUp + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -32 }, // TrackElemType::LeftLargeCorkscrewDown + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -32 }, // TrackElemType::RightLargeCorkscrewDown + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftMediumHalfLoopUp + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightMediumHalfLoopUp + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::LeftMediumHalfLoopDown + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::RightMediumHalfLoopDown + { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 0 }, // TrackElemType::LeftZeroGRollUp + { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 0 }, // TrackElemType::RightZeroGRollUp + { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // TrackElemType::LeftZeroGRollDown + { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, 0 }, // TrackElemType::RightZeroGRollDown + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftLargeZeroGRollUp + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightLargeZeroGRollUp + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::LeftLargeZeroGRollDown + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackBank::None, TrackBank::UpsideDown, -64 }, // TrackElemType::RightLargeZeroGRollDown + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown + { TRACK_FLYING_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackBank::UpsideDown, TrackBank::None, 64 }, // TrackElemType::FlyerHalfLoopInvertedUp + { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackBank::UpsideDown, TrackBank::None, -64 }, // TrackElemType::FlyerHalfLoopUninvertedDown + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::LeftEighthToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::RightEighthToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::LeftEighthToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::RightEighthToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::None, 16 }, // TrackElemType::RightEighthToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::None, -16 }, // TrackElemType::RightEighthToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackBank::Left, TrackBank::None, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackBank::Right, TrackBank::None, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackBank::None, TrackBank::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::Up25LeftBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::Up25RightBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, 0 }, // TrackElemType::Down25LeftBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, 0 }, // TrackElemType::Down25RightBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 16 }, // TrackElemType::LeftEighthBankToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 16 }, // TrackElemType::RightEighthBankToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, -16 }, // TrackElemType::LeftEighthBankToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, -16 }, // TrackElemType::RightEighthBankToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Left, TrackBank::Left, 16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackBank::Right, TrackBank::Right, 16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Left, TrackBank::Left, -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackBank::Right, TrackBank::Right, -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { TRACK_DIAG_BRAKES, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::DiagBrakes + { TRACK_DIAG_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackBank::None, TrackBank::None, 0 }, // TrackElemType::DiagBlockBrakes }; static_assert(std::size(TrackDefinitions) == TrackElemType::Count); diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 9bc361d3d6..92d3afef7d 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -26,10 +26,10 @@ struct TrackCurveChain struct TrackDescriptor { bool starts_diagonal; - uint8_t slope_start; + TrackPitch slope_start; TrackBank bank_start; TrackCurve track_curve; - uint8_t slope_end; + TrackPitch slope_end; TrackBank bank_end; track_type_t track_element; }; diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index e35d9f8092..f3b2b7be26 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -518,13 +518,13 @@ void ScriptEngine::RegisterConstants() { ConstantBuilder builder(_context); builder.Namespace("TrackSlope") - .Constant("None", TRACK_SLOPE_NONE) - .Constant("Up25", TRACK_SLOPE_UP_25) - .Constant("Up60", TRACK_SLOPE_UP_60) - .Constant("Down25", TRACK_SLOPE_DOWN_25) - .Constant("Down60", TRACK_SLOPE_DOWN_60) - .Constant("Up90", TRACK_SLOPE_UP_90) - .Constant("Down90", TRACK_SLOPE_DOWN_90); + .Constant("None", EnumValue(TrackPitch::None)) + .Constant("Up25", EnumValue(TrackPitch::Up25)) + .Constant("Up60", EnumValue(TrackPitch::Up60)) + .Constant("Down25", EnumValue(TrackPitch::Down25)) + .Constant("Down60", EnumValue(TrackPitch::Down60)) + .Constant("Up90", EnumValue(TrackPitch::Up90)) + .Constant("Down90", EnumValue(TrackPitch::Down90)); builder.Namespace("TrackBanking") .Constant("None", EnumValue(TrackBank::None)) .Constant("BankLeft", EnumValue(TrackBank::Left)) diff --git a/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp b/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp index 87c020884c..7b842877be 100644 --- a/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp +++ b/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp @@ -96,7 +96,7 @@ int32_t ScTrackSegment::beginDirection_get() const int32_t ScTrackSegment::beginSlope_get() const { const auto& ted = GetTrackElementDescriptor(_type); - return ted.Definition.vangle_start; + return EnumValue(ted.Definition.vangle_start); } int32_t ScTrackSegment::beginBank_get() const @@ -132,7 +132,7 @@ int32_t ScTrackSegment::endDirection_get() const int32_t ScTrackSegment::endSlope_get() const { const auto& ted = GetTrackElementDescriptor(_type); - return ted.Definition.vangle_end; + return EnumValue(ted.Definition.vangle_end); } int32_t ScTrackSegment::endBank_get() const diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index bfeea22c2e..2861d5f712 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -61,7 +61,7 @@ money64 PlaceProvisionalTrackPiece( _unkF440C5 = { trackPos, static_cast(trackDirection) }; _currentTrackSelectionFlags |= TRACK_SELECTION_FLAG_TRACK; ViewportSetVisibility(ViewportVisibility::UndergroundViewOff); - if (_currentTrackSlopeEnd != 0) + if (_currentTrackSlopeEnd != TrackPitch::None) ViewportSetVisibility(ViewportVisibility::TrackHeights); // Invalidate previous track piece (we may not be changing height!) @@ -105,7 +105,7 @@ money64 PlaceProvisionalTrackPiece( const auto visiblity = (resultData.GroundFlags & ELEMENT_IS_UNDERGROUND) ? ViewportVisibility::UndergroundViewOn : ViewportVisibility::UndergroundViewOff; ViewportSetVisibility(visiblity); - if (_currentTrackSlopeEnd != 0) + if (_currentTrackSlopeEnd != TrackPitch::None) ViewportSetVisibility(ViewportVisibility::TrackHeights); // Invalidate previous track piece (we may not be changing height!) @@ -125,8 +125,8 @@ static std::tuple window_ride_construction_update_state_get_ auto intent = Intent(INTENT_ACTION_RIDE_CONSTRUCTION_UPDATE_PIECES); ContextBroadcastIntent(&intent); - uint8_t startSlope = _previousTrackSlopeEnd; - uint8_t endSlope = _currentTrackSlopeEnd; + auto startSlope = _previousTrackSlopeEnd; + auto endSlope = _currentTrackSlopeEnd; auto startBank = _previousTrackBankEnd; auto endBank = _currentTrackBankEnd; @@ -183,7 +183,7 @@ static std::tuple window_ride_construction_update_state_get_ case TrackElemType::EndStation: case TrackElemType::SBendLeft: case TrackElemType::SBendRight: - if (startSlope != TRACK_SLOPE_NONE || endSlope != TRACK_SLOPE_NONE) + if (startSlope != TrackPitch::None || endSlope != TrackPitch::None) { return std::make_tuple(false, 0); } @@ -204,14 +204,14 @@ static std::tuple window_ride_construction_update_state_get_ if (_rideConstructionState == RideConstructionState::Back) { - if (endSlope != TRACK_SLOPE_DOWN_25) + if (endSlope != TrackPitch::Down25) { return std::make_tuple(false, 0); } } else { - if (startSlope != TRACK_SLOPE_UP_25) + if (startSlope != TrackPitch::Up25) { return std::make_tuple(false, 0); }