diff --git a/src/openrct2-ui/ride/Construction.cpp b/src/openrct2-ui/ride/Construction.cpp index f9b843cd70..336b66d47a 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, uint8_t buildBank, RideConstructionState state) + const Ride& currentRide, uint8_t buildDirection, uint8_t 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 0fedb27159..34473e9e22 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, uint8_t buildBank, RideConstructionState state); + const Ride& currentRide, uint8_t buildDirection, uint8_t 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 4a8473e42b..9855139727 100644 --- a/src/openrct2-ui/windows/RideConstruction.cpp +++ b/src/openrct2-ui/windows/RideConstruction.cpp @@ -227,14 +227,14 @@ public: _currentTrackCurve = currentRide->GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; _currentTrackSlopeEnd = 0; - _currentTrackBankEnd = 0; + _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; if (currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; - _previousTrackBankEnd = 0; + _previousTrackBankEnd = TrackBank::None; _previousTrackSlopeEnd = 0; _currentTrackPieceDirection = 0; @@ -396,7 +396,7 @@ public: { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } - else if (_currentTrackBankEnd != TRACK_BANK_NONE) + else if (_currentTrackBankEnd != TrackBank::None) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP); } @@ -409,7 +409,7 @@ public: || _currentTrackSlopeEnd == TRACK_SLOPE_UP_25 || _currentTrackSlopeEnd == TRACK_SLOPE_UP_60) 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 != TRACK_BANK_NONE) + if ((_previousTrackSlopeEnd != TRACK_SLOPE_NONE || _previousTrackBankEnd != TrackBank::None) && !(_currentTrackLiftHill & CONSTRUCTION_LIFT_HILL_SELECTED)) disabledWidgets |= (1uLL << WIDX_SLOPE_UP); } @@ -425,7 +425,7 @@ public: case EnumValue(TrackCurve::Left): case EnumValue(TrackCurve::LeftLarge): disabledWidgets |= (1uLL << WIDX_BANK_RIGHT); - if (_previousTrackBankEnd == TRACK_BANK_NONE) + if (_previousTrackBankEnd == TrackBank::None) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT); } @@ -439,7 +439,7 @@ public: case EnumValue(TrackCurve::RightSmall): case EnumValue(TrackCurve::RightVerySmall): disabledWidgets |= (1uLL << WIDX_BANK_LEFT); - if (_previousTrackBankEnd == TRACK_BANK_NONE) + if (_previousTrackBankEnd == TrackBank::None) { disabledWidgets |= (1uLL << WIDX_BANK_RIGHT); } @@ -451,7 +451,7 @@ public: } if (!IsTrackEnabled(TRACK_SLOPE_ROLL_BANKING)) { - if (_currentTrackBankEnd != TRACK_BANK_NONE) + if (_currentTrackBankEnd != TrackBank::None) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN) | (1uLL << WIDX_SLOPE_UP); } @@ -546,12 +546,12 @@ public: disabledWidgets &= ~(1uLL << WIDX_SLOPE_UP_STEEP); } } - if (_previousTrackBankEnd == TRACK_BANK_LEFT) + if (_previousTrackBankEnd == TrackBank::Left) { disabledWidgets |= (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) | (1uLL << WIDX_RIGHT_CURVE_LARGE) | (1uLL << WIDX_BANK_RIGHT); } - if (_previousTrackBankEnd == TRACK_BANK_RIGHT) + if (_previousTrackBankEnd == TrackBank::Right) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE) | (1uLL << WIDX_BANK_LEFT); @@ -592,7 +592,7 @@ public: disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); } } - if (_currentTrackBankEnd != TRACK_BANK_NONE || _previousTrackBankEnd != TRACK_BANK_NONE) + if (_currentTrackBankEnd != TrackBank::None || _previousTrackBankEnd != TrackBank::None) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP) | (1uLL << WIDX_CHAIN_LIFT); } @@ -626,7 +626,7 @@ public: disabledWidgets |= (1uLL << WIDX_CHAIN_LIFT); } } - if (_previousTrackBankEnd == TRACK_BANK_UPSIDE_DOWN) + if (_previousTrackBankEnd == TrackBank::UpsideDown) { disabledWidgets |= (1uLL << WIDX_LEFT_CURVE_SMALL) | (1uLL << WIDX_LEFT_CURVE) | (1uLL << WIDX_LEFT_CURVE_LARGE) | (1uLL << WIDX_STRAIGHT) | (1uLL << WIDX_RIGHT_CURVE_SMALL) | (1uLL << WIDX_RIGHT_CURVE) @@ -662,17 +662,17 @@ public: else if (IsTrackEnabled(TRACK_SLOPE_CURVE_BANKED)) { disabledWidgets |= (1uLL << WIDX_SLOPE_DOWN_STEEP) | (1uLL << WIDX_SLOPE_UP_STEEP); - if (_currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackBankEnd == TrackBank::Left) { disabledWidgets |= (1uLL << WIDX_BANK_STRAIGHT) | (1uLL << WIDX_BANK_RIGHT); disabledWidgets &= ~(1uLL << WIDX_BANK_LEFT); } - if (_currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackBankEnd == TrackBank::Right) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_STRAIGHT); disabledWidgets &= ~(1uLL << WIDX_BANK_RIGHT); } - if (_currentTrackBankEnd == TRACK_BANK_NONE) + if (_currentTrackBankEnd == TrackBank::None) { disabledWidgets |= (1uLL << WIDX_BANK_LEFT) | (1uLL << WIDX_BANK_RIGHT); disabledWidgets &= ~(1uLL << WIDX_BANK_STRAIGHT); @@ -763,7 +763,7 @@ public: if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackSlopeEnd == _previousTrackSlopeEnd) { // If the bank is none, attempt to show unbanked quarter helixes - if (_currentTrackBankEnd == TRACK_BANK_NONE + if (_currentTrackBankEnd == TrackBank::None && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER)) @@ -774,7 +774,7 @@ public: // If the track is banked left or right and curvature is standard size (2.5 tile radius), attempt to show buttons // for half or quarter helixes else if ( - (_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT) + (_currentTrackBankEnd == TrackBank::Left || _currentTrackBankEnd == TrackBank::Right) && (_currentTrackCurve == EnumValue(TrackCurve::Left) || _currentTrackCurve == EnumValue(TrackCurve::Right))) { if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER)) @@ -785,7 +785,7 @@ public: // If the track is banked left or right and curvature is small size (1.5 tile radius), attempt to show buttons for // half helixes else if ( - (_currentTrackBankEnd == TRACK_BANK_LEFT || _currentTrackBankEnd == TRACK_BANK_RIGHT) + (_currentTrackBankEnd == TrackBank::Left || _currentTrackBankEnd == TrackBank::Right) && (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == EnumValue(TrackCurve::RightSmall))) { @@ -802,7 +802,7 @@ public: if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE + if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None && (!currentRide->GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_UP_INCLINE_REQUIRES_LIFT) || gCheatsEnableAllDrawableTrackPieces)) { @@ -815,7 +815,7 @@ public: if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TRACK_BANK_NONE) + if (_currentTrackSlopeEnd == TRACK_SLOPE_NONE && _previousTrackBankEnd != TrackBank::None) { disabledWidgets &= ~(1uLL << WIDX_SLOPE_DOWN); } @@ -1058,7 +1058,7 @@ public: case WIDX_STRAIGHT: RideConstructionInvalidateCurrentTrack(); if (_currentTrackCurve != EnumValue(TrackCurve::None)) - _currentTrackBankEnd = TRACK_BANK_NONE; + _currentTrackBankEnd = TrackBank::None; _currentTrackCurve = EnumValue(TrackCurve::None); _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); @@ -1067,14 +1067,14 @@ public: RideConstructionInvalidateCurrentTrack(); if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) { - if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixDownLarge | RideConstructionSpecialPieceSelected; @@ -1082,14 +1082,14 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixDownSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixDownSmall | RideConstructionSpecialPieceSelected; @@ -1100,7 +1100,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER)) { - if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1108,7 +1108,7 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeDown | RideConstructionSpecialPieceSelected; @@ -1119,7 +1119,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER)) { - if (_currentTrackBankEnd == TRACK_BANK_NONE) + if (_currentTrackBankEnd == TrackBank::None) { if (_currentTrackCurve == EnumValue(TrackCurve::Left)) { @@ -1150,9 +1150,9 @@ public: break; case WIDX_SLOPE_DOWN: RideConstructionInvalidateCurrentTrack(); - if (_rideConstructionState == RideConstructionState::Back && _currentTrackBankEnd != TRACK_BANK_NONE) + if (_rideConstructionState == RideConstructionState::Back && _currentTrackBankEnd != TrackBank::None) { - _currentTrackBankEnd = TRACK_BANK_NONE; + _currentTrackBankEnd = TrackBank::None; } UpdateLiftHillSelected(TRACK_SLOPE_DOWN_25); break; @@ -1162,31 +1162,31 @@ public: { if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { - _currentTrackBankEnd = TRACK_BANK_LEFT; + _currentTrackBankEnd = TrackBank::Left; } else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - _currentTrackBankEnd = TRACK_BANK_RIGHT; + _currentTrackBankEnd = TrackBank::Right; } } else if (_rideConstructionState == RideConstructionState::Back && _previousTrackSlopeEnd == 2) { if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall)) { - _currentTrackBankEnd = TRACK_BANK_LEFT; + _currentTrackBankEnd = TrackBank::Left; } else if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall)) { - _currentTrackBankEnd = TRACK_BANK_RIGHT; + _currentTrackBankEnd = TrackBank::Right; } } UpdateLiftHillSelected(TRACK_SLOPE_NONE); break; case WIDX_SLOPE_UP: RideConstructionInvalidateCurrentTrack(); - if (_rideConstructionState == RideConstructionState::Front && _currentTrackBankEnd != TRACK_BANK_NONE) + if (_rideConstructionState == RideConstructionState::Front && _currentTrackBankEnd != TrackBank::None) { - _currentTrackBankEnd = TRACK_BANK_NONE; + _currentTrackBankEnd = TrackBank::None; } if (currentRide->GetRideTypeDescriptor().SupportsTrackPiece(TRACK_REVERSE_FREEFALL)) { @@ -1206,28 +1206,28 @@ public: RideConstructionInvalidateCurrentTrack(); if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) { - if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixUpLarge | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::LeftSmall) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::RightSmall) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightHalfBankedHelixUpSmall | RideConstructionSpecialPieceSelected; _currentTrackPrice = MONEY64_UNDEFINED; @@ -1237,7 +1237,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_QUARTER)) { - if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TRACK_BANK_LEFT) + if (_currentTrackCurve == EnumValue(TrackCurve::Left) && _currentTrackBankEnd == TrackBank::Left) { _currentTrackCurve = TrackElemType::LeftQuarterBankedHelixLargeUp | RideConstructionSpecialPieceSelected; @@ -1245,7 +1245,7 @@ public: WindowRideConstructionUpdateActiveElements(); break; } - if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TRACK_BANK_RIGHT) + if (_currentTrackCurve == EnumValue(TrackCurve::Right) && _currentTrackBankEnd == TrackBank::Right) { _currentTrackCurve = TrackElemType::RightQuarterBankedHelixLargeUp | RideConstructionSpecialPieceSelected; @@ -1256,7 +1256,7 @@ public: } if (IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER)) { - if (_currentTrackBankEnd == TRACK_BANK_NONE) + if (_currentTrackBankEnd == TrackBank::None) { if (_currentTrackCurve == EnumValue(TrackCurve::Left)) { @@ -1295,7 +1295,7 @@ public: RideConstructionInvalidateCurrentTrack(); if (!_currentlyShowingBrakeOrBoosterSpeed) { - _currentTrackBankEnd = TRACK_BANK_LEFT; + _currentTrackBankEnd = TrackBank::Left; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); } @@ -1304,7 +1304,7 @@ public: RideConstructionInvalidateCurrentTrack(); if (!_currentlyShowingBrakeOrBoosterSpeed) { - _currentTrackBankEnd = TRACK_BANK_NONE; + _currentTrackBankEnd = TrackBank::None; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); } @@ -1331,7 +1331,7 @@ public: RideConstructionInvalidateCurrentTrack(); if (!_currentlyShowingBrakeOrBoosterSpeed) { - _currentTrackBankEnd = TRACK_BANK_RIGHT; + _currentTrackBankEnd = TrackBank::Right; _currentTrackPrice = MONEY64_UNDEFINED; WindowRideConstructionUpdateActiveElements(); } @@ -1420,7 +1420,7 @@ public: break; case TrackElemType::LeftVerticalLoop: case TrackElemType::RightVerticalLoop: - _currentTrackBankEnd = TRACK_BANK_NONE; + _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill &= ~CONSTRUCTION_LIFT_HILL_SELECTED; break; case TrackElemType::BlockBrakes: @@ -1660,7 +1660,7 @@ public: widgets[WIDX_SLOPE_UP].type = WindowWidgetType::FlatBtn; } if ((IsTrackEnabled(TRACK_HELIX_DOWN_BANKED_HALF) || IsTrackEnabled(TRACK_HELIX_UP_BANKED_HALF)) - && _currentTrackBankEnd != TRACK_BANK_NONE && _currentTrackSlopeEnd == TRACK_SLOPE_NONE) + && _currentTrackBankEnd != TrackBank::None && _currentTrackSlopeEnd == TRACK_SLOPE_NONE) { if (_currentTrackCurve >= EnumValue(TrackCurve::Left) && _currentTrackCurve <= EnumValue(TrackCurve::RightSmall)) { @@ -1742,7 +1742,7 @@ public: } if ((IsTrackEnabled(TRACK_HELIX_DOWN_UNBANKED_QUARTER) || IsTrackEnabled(TRACK_HELIX_UP_UNBANKED_QUARTER)) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE + && _currentTrackSlopeEnd == TRACK_SLOPE_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 +1770,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 != TRACK_BANK_NONE) + && _currentTrackSlopeEnd == TRACK_SLOPE_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 +1852,7 @@ public: if ((_currentTrackCurve < EnumValue(TrackCurve::LeftSmall) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendLeft) || _currentTrackCurve == (RideConstructionSpecialPieceSelected | TrackElemType::SBendRight)) - && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TRACK_BANK_NONE) + && _currentTrackSlopeEnd == TRACK_SLOPE_NONE && _currentTrackBankEnd == TrackBank::None) { widgets[WIDX_BANKING_GROUPBOX].text = STR_RIDE_CONSTRUCTION_TRACK_STYLE; widgets[WIDX_U_TRACK].type = WindowWidgetType::FlatBtn; @@ -2063,10 +2063,10 @@ public: } switch (_currentTrackBankEnd) { - case TRACK_BANK_LEFT: + case TrackBank::Left: widgetIndex = WIDX_BANK_LEFT; break; - case TRACK_BANK_NONE: + case TrackBank::None: widgetIndex = WIDX_BANK_STRAIGHT; break; default: @@ -3594,8 +3594,8 @@ void RideConstructionTooldownConstruct(const ScreenCoordsXY& screenCoords) auto saveCurrentTrackCurve = _currentTrackCurve; int32_t savePreviousTrackSlopeEnd = _previousTrackSlopeEnd; int32_t saveCurrentTrackSlopeEnd = _currentTrackSlopeEnd; - int32_t savePreviousTrackBankEnd = _previousTrackBankEnd; - int32_t saveCurrentTrackBankEnd = _currentTrackBankEnd; + auto savePreviousTrackBankEnd = _previousTrackBankEnd; + auto saveCurrentTrackBankEnd = _currentTrackBankEnd; int32_t saveCurrentTrackAlternative = _currentTrackAlternative; int32_t saveCurrentTrackLiftHill = _currentTrackLiftHill; @@ -4383,13 +4383,13 @@ void WindowRideConstructionKeyboardShortcutBankLeft() switch (_currentTrackBankEnd) { - case TRACK_BANK_NONE: + case TrackBank::None: if (!WidgetIsDisabled(*w, WIDX_BANK_LEFT) && w->widgets[WIDX_BANK_LEFT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_BANK_LEFT); } break; - case TRACK_BANK_RIGHT: + case TrackBank::Right: if (!WidgetIsDisabled(*w, WIDX_BANK_STRAIGHT) && w->widgets[WIDX_BANK_STRAIGHT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_BANK_STRAIGHT); @@ -4419,13 +4419,13 @@ void WindowRideConstructionKeyboardShortcutBankRight() switch (_currentTrackBankEnd) { - case TRACK_BANK_NONE: + case TrackBank::None: if (!WidgetIsDisabled(*w, WIDX_BANK_RIGHT) && w->widgets[WIDX_BANK_RIGHT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_BANK_RIGHT); } break; - case TRACK_BANK_LEFT: + case TrackBank::Left: if (!WidgetIsDisabled(*w, WIDX_BANK_STRAIGHT) && w->widgets[WIDX_BANK_STRAIGHT].type != WindowWidgetType::Empty) { WindowEventMouseDownCall(w, WIDX_BANK_STRAIGHT); @@ -4501,8 +4501,8 @@ static void WindowRideConstructionMouseUpDemolishNextPiece(const CoordsXYZD& pie auto savedCurrentTrackCurve = _currentTrackCurve; int32_t savedPreviousTrackSlopeEnd = _previousTrackSlopeEnd; int32_t savedCurrentTrackSlopeEnd = _currentTrackSlopeEnd; - int32_t savedPreviousTrackBankEnd = _previousTrackBankEnd; - int32_t savedCurrentTrackBankEnd = _currentTrackBankEnd; + auto savedPreviousTrackBankEnd = _previousTrackBankEnd; + auto savedCurrentTrackBankEnd = _currentTrackBankEnd; int32_t savedCurrentTrackAlternative = _currentTrackAlternative; int32_t savedCurrentTrackLiftHill = _currentTrackLiftHill; RideConstructionSetDefaultNextPiece(); diff --git a/src/openrct2/actions/WallPlaceAction.cpp b/src/openrct2/actions/WallPlaceAction.cpp index f9618976f6..e7e312ea85 100644 --- a/src/openrct2/actions/WallPlaceAction.cpp +++ b/src/openrct2/actions/WallPlaceAction.cpp @@ -442,7 +442,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack( return false; } - if (ted.Definition.bank_start == 0) + if (ted.Definition.bank_start == TrackBank::None) { if (!(ted.Coordinates.rotation_begin & 4)) { @@ -467,7 +467,7 @@ bool WallPlaceAction::WallCheckObstructionWithTrack( return false; } - if (ted.Definition.bank_end != 0) + if (ted.Definition.bank_end != TrackBank::None) { return false; } diff --git a/src/openrct2/ride/RideConstruction.cpp b/src/openrct2/ride/RideConstruction.cpp index 2c52a707b6..27433d6213 100644 --- a/src/openrct2/ride/RideConstruction.cpp +++ b/src/openrct2/ride/RideConstruction.cpp @@ -65,12 +65,12 @@ track_type_t _currentTrackPieceType; uint8_t _currentTrackSelectionFlags; uint32_t _rideConstructionNextArrowPulse = 0; uint8_t _currentTrackSlopeEnd; -uint8_t _currentTrackBankEnd; +TrackBank _currentTrackBankEnd; uint8_t _currentTrackLiftHill; uint8_t _currentTrackAlternative; track_type_t _selectedTrackType; -uint8_t _previousTrackBankEnd; +TrackBank _previousTrackBankEnd; uint8_t _previousTrackSlopeEnd; CoordsXYZ _previousTrackPiece; @@ -607,7 +607,7 @@ static void ride_construction_reset_current_piece() { _currentTrackCurve = rtd.StartTrackPiece | RideConstructionSpecialPieceSelected; _currentTrackSlopeEnd = 0; - _currentTrackBankEnd = 0; + _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; if (rtd.HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)) @@ -615,7 +615,7 @@ static void ride_construction_reset_current_piece() _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } _previousTrackSlopeEnd = 0; - _previousTrackBankEnd = 0; + _previousTrackBankEnd = TrackBank::None; } else { @@ -637,7 +637,7 @@ void RideConstructionSetDefaultNextPiece() const auto& rtd = ride->GetRideTypeDescriptor(); - int32_t z, direction, trackType, curve, bank, slope; + int32_t z, direction, trackType, curve, slope; TrackBeginEnd trackBeginEnd; CoordsXYE xyElement; TileElement* tileElement; @@ -647,6 +647,7 @@ void RideConstructionSetDefaultNextPiece() switch (_rideConstructionState) { case RideConstructionState::Front: + { direction = _currentTrackPieceDirection; if (!TrackBlockGetPreviousFromZero(_currentTrackBegin, *ride, direction, &trackBeginEnd)) { @@ -674,7 +675,7 @@ void RideConstructionSetDefaultNextPiece() ted = &GetTrackElementDescriptor(trackType); curve = ted->CurveChain.next; - bank = ted->Definition.bank_end; + auto bank = ted->Definition.bank_end; slope = ted->Definition.vangle_end; // Set track curve @@ -683,9 +684,9 @@ void RideConstructionSetDefaultNextPiece() // Set track banking if (rtd.HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { - if (bank == TRACK_BANK_UPSIDE_DOWN) + if (bank == TrackBank::UpsideDown) { - bank = TRACK_BANK_NONE; + bank = TrackBank::None; _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } } @@ -698,7 +699,9 @@ void RideConstructionSetDefaultNextPiece() _currentTrackLiftHill = tileElement->AsTrack()->HasChain() && ((slope != TRACK_SLOPE_DOWN_25 && slope != TRACK_SLOPE_DOWN_60) || gCheatsEnableChainLiftOnAllTrack); break; + } case RideConstructionState::Back: + { direction = DirectionReverse(_currentTrackPieceDirection); if (!TrackBlockGetNextFromZero(_currentTrackBegin, *ride, direction, &xyElement, &z, &direction, false)) { @@ -720,7 +723,7 @@ void RideConstructionSetDefaultNextPiece() ted = &GetTrackElementDescriptor(trackType); curve = ted->CurveChain.previous; - bank = ted->Definition.bank_start; + auto bank = ted->Definition.bank_start; slope = ted->Definition.vangle_start; // Set track curve @@ -729,9 +732,9 @@ void RideConstructionSetDefaultNextPiece() // Set track banking if (rtd.HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { - if (bank == TRACK_BANK_UPSIDE_DOWN) + if (bank == TrackBank::UpsideDown) { - bank = TRACK_BANK_NONE; + bank = TrackBank::None; _currentTrackAlternative ^= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; } } @@ -746,6 +749,7 @@ void RideConstructionSetDefaultNextPiece() _currentTrackLiftHill = tileElement->AsTrack()->HasChain(); } break; + } default: break; } @@ -1120,14 +1124,14 @@ int32_t RideInitialiseConstructionWindow(Ride& ride) _currentTrackCurve = ride.GetRideTypeDescriptor().StartTrackPiece | RideConstructionSpecialPieceSelected; _currentTrackSlopeEnd = 0; - _currentTrackBankEnd = 0; + _currentTrackBankEnd = TrackBank::None; _currentTrackLiftHill = 0; _currentTrackAlternative = RIDE_TYPE_NO_ALTERNATIVES; if (ride.GetRideTypeDescriptor().HasFlag(RIDE_TYPE_FLAG_START_CONSTRUCTION_INVERTED)) _currentTrackAlternative |= RIDE_TYPE_ALTERNATIVE_TRACK_TYPE; - _previousTrackBankEnd = 0; + _previousTrackBankEnd = TrackBank::None; _previousTrackSlopeEnd = 0; _currentTrackPieceDirection = 0; diff --git a/src/openrct2/ride/RideConstruction.h b/src/openrct2/ride/RideConstruction.h index 16c1823291..96e46205b4 100644 --- a/src/openrct2/ride/RideConstruction.h +++ b/src/openrct2/ride/RideConstruction.h @@ -13,6 +13,7 @@ #include "../common.h" #include "../world/Location.hpp" #include "Station.h" +#include "Track.h" #include #include @@ -48,12 +49,12 @@ extern track_type_t _currentTrackPieceType; extern uint8_t _currentTrackSelectionFlags; extern uint32_t _rideConstructionNextArrowPulse; extern uint8_t _currentTrackSlopeEnd; -extern uint8_t _currentTrackBankEnd; +extern TrackBank _currentTrackBankEnd; extern uint8_t _currentTrackLiftHill; extern uint8_t _currentTrackAlternative; extern track_type_t _selectedTrackType; -extern uint8_t _previousTrackBankEnd; +extern TrackBank _previousTrackBankEnd; extern uint8_t _previousTrackSlopeEnd; extern CoordsXYZ _previousTrackPiece; diff --git a/src/openrct2/ride/Track.cpp b/src/openrct2/ride/Track.cpp index 9158daab20..8472dd1e43 100644 --- a/src/openrct2/ride/Track.cpp +++ b/src/openrct2/ride/Track.cpp @@ -53,17 +53,17 @@ PitchAndRoll TrackPitchAndRollEnd(track_type_t trackType) */ int32_t TrackIsConnectedByShape(TileElement* a, TileElement* b) { - int32_t trackType, aBank, aAngle, bBank, bAngle; + int32_t trackType, aAngle, bAngle; trackType = a->AsTrack()->GetTrackType(); const auto* ted = &GetTrackElementDescriptor(trackType); - aBank = ted->Definition.bank_end; + auto aBank = ted->Definition.bank_end; aAngle = ted->Definition.vangle_end; aBank = TrackGetActualBank(a, aBank); trackType = b->AsTrack()->GetTrackType(); ted = &GetTrackElementDescriptor(trackType); - bBank = ted->Definition.bank_start; + auto bBank = ted->Definition.bank_start; bAngle = ted->Definition.vangle_start; bBank = TrackGetActualBank(b, bBank); @@ -564,7 +564,7 @@ bool TrackElement::IsBlockStart() const return false; } -roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank) +TrackBank TrackGetActualBank(TileElement* tileElement, TrackBank bank) { auto ride = GetRide(tileElement->AsTrack()->GetRideIndex()); if (ride != nullptr) @@ -575,26 +575,26 @@ roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank) return bank; } -roll_type_t TrackGetActualBank2(int32_t rideType, bool isInverted, roll_type_t bank) +TrackBank TrackGetActualBank2(int32_t rideType, bool isInverted, TrackBank bank) { if (GetRideTypeDescriptor(rideType).HasFlag(RIDE_TYPE_FLAG_HAS_ALTERNATIVE_TRACK_TYPE)) { if (isInverted) { - if (bank == TRACK_BANK_NONE) + if (bank == TrackBank::None) { - bank = TRACK_BANK_UPSIDE_DOWN; + bank = TrackBank::UpsideDown; } - else if (bank == TRACK_BANK_UPSIDE_DOWN) + else if (bank == TrackBank::UpsideDown) { - bank = TRACK_BANK_NONE; + bank = TrackBank::None; } } } return bank; } -roll_type_t TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement) +TrackBank TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement) { auto trackType = tileElement->AsTrack()->GetTrackType(); const auto& ted = GetTrackElementDescriptor(trackType); diff --git a/src/openrct2/ride/Track.h b/src/openrct2/ride/Track.h index 4a35716787..6199eee6f8 100644 --- a/src/openrct2/ride/Track.h +++ b/src/openrct2/ride/Track.h @@ -23,25 +23,32 @@ constexpr int32_t kBlockBrakeBaseSpeed = 0x20364; constexpr int32_t kBlockBrakeSpeedOffset = kBlockBrakeBaseSpeed - (kRCT2DefaultBlockBrakeSpeed << 16); using track_type_t = uint16_t; -using roll_type_t = uint8_t; using pitch_type_t = uint8_t; struct ResultWithMessage; +enum class TrackBank : uint8_t +{ + None = 0, + Left = 2, + Right = 4, + UpsideDown = 15, +}; + struct TrackDefinition { track_type_t type; pitch_type_t vangle_end; pitch_type_t vangle_start; - roll_type_t bank_end; - roll_type_t bank_start; + TrackBank bank_end; + TrackBank bank_start; int8_t preview_z_offset; }; struct PitchAndRoll { pitch_type_t Pitch; - roll_type_t Roll; + TrackBank Roll; }; constexpr bool operator==(const PitchAndRoll& vb1, const PitchAndRoll& vb2) { @@ -233,14 +240,6 @@ enum TRACK_VANGLE_REVERSE_FREEFALL = 10 }; -enum -{ - TRACK_BANK_NONE = 0, - TRACK_BANK_LEFT = 2, - TRACK_BANK_RIGHT = 4, - TRACK_BANK_UPSIDE_DOWN = 15, -}; - enum { TRACK_ELEM_FLAG_ONLY_UNDERWATER = (1 << 0), @@ -688,9 +687,9 @@ bool TrackTypeIsBooster(track_type_t trackType); std::optional GetTrackElementOriginAndApplyChanges( const CoordsXYZD& location, track_type_t type, uint16_t extra_params, TileElement** output_element, uint16_t flags); -roll_type_t TrackGetActualBank(TileElement* tileElement, roll_type_t bank); -roll_type_t TrackGetActualBank2(int32_t rideType, bool isInverted, roll_type_t bank); -roll_type_t TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement); +TrackBank TrackGetActualBank(TileElement* tileElement, TrackBank bank); +TrackBank TrackGetActualBank2(int32_t rideType, bool isInverted, TrackBank bank); +TrackBank TrackGetActualBank3(bool useInvertedSprites, TileElement* tileElement); ResultWithMessage TrackAddStationElement(CoordsXYZD loc, RideId rideIndex, int32_t flags, bool fromTrackDesign); ResultWithMessage TrackRemoveStationElement(const CoordsXYZD& loc, RideId rideIndex, int32_t flags); diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index 67e5214d30..630c780883 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, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown60 }, - { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown60ToDown25 }, - { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown60ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown25ToDown60 }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown25 }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBank }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown25ToFlat }, - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown60 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp60 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonal }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToDown25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankToFlat }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBank }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToUp25 }, - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonal }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBank }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp25ToFlat }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBank }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp25 }, - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp25ToUp60 }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp60ToFlat }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp60ToUp25 }, - { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp60 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down90 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down90ToDown60 }, - { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown90 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down60ToDown90 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down60 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down60ToDown25 }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down60ToFlat }, - { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown60 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25LeftBanked }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down25ToDown60 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBankedDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25RightBanked }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedDown25ToRightBankedFlat }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileDown25 }, - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::BankedLeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankToFlat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::FlatToDown60 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::FlatToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Flat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::LeftVerySmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightVerySmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1Tile }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::FlatToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::FlatToUp60 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankToDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedDown25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankToFlat }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBank }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedUp25 }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiag }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::BankedRightQuarterTurn5Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3Tiles }, - { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::Left, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25LeftBanked }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::Left, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBank }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBank }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBankedUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up25ToUp60 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::Right, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedUp25ToRightBankedFlat }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25RightBanked }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::Right, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileUp25 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightSmall, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileUp25 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up60ToFlat }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up60ToUp25 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up60 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up60ToUp90 }, - { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp60 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::LeftSmall, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up90ToUp60 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up90 }, - { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackCurve::RightSmall, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp90 }, - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 - { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::None, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked - { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 - { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 - { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackCurve::LeftLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackCurve::RightLarge, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { 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 }; /** 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, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT - { TRACK_STATION_END, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_END_STATION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_BEGIN_STATION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MIDDLE_STATION - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_S_BEND, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_S_BEND_LEFT - { TRACK_S_BEND, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_S_BEND_RIGHT - { TRACK_VERTICAL_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -48 }, // ELEM_LEFT_VERTICAL_LOOP - { TRACK_VERTICAL_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -48 }, // ELEM_RIGHT_VERTICAL_LOOP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN - { TRACK_TWIST, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN - { TRACK_HALF_LOOP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // ELEM_HALF_LOOP_UP - { TRACK_HALF_LOOP, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // ELEM_HALF_LOOP_DOWN - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_CORKSCREW_UP - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_CORKSCREW_UP - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -32 }, // ELEM_LEFT_CORKSCREW_DOWN - { TRACK_CORKSCREW, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -32 }, // ELEM_RIGHT_CORKSCREW_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT - { TRACK_TOWER_BASE, TRACK_VANGLE_TOWER, TRACK_VANGLE_TOWER, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_TOWER_BASE - { TRACK_TOWER_BASE, TRACK_VANGLE_TOWER, TRACK_VANGLE_TOWER, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_TOWER_SECTION - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_S_BEND_LEFT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_S_BEND_RIGHT_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_UP_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_BRAKES - { TRACK_BOOSTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_BOOSTER - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::Maze - { TRACK_HELIX_UP_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_UP_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_BANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_UP_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_UP_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED - { TRACK_WATERFALL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_WATERFALL - { TRACK_RAPIDS, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RAPIDS - { TRACK_ON_RIDE_PHOTO, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_ON_RIDE_PHOTO - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED - { TRACK_WATER_SPLASH, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_WATER_SPLASH - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE - { TRACK_WHIRLPOOL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_WHIRLPOOL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 - { TRACK_LIFT_HILL_CABLE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_CABLE_LIFT_HILL - { TRACK_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE - { TRACK_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TRACK_VANGLE_REVERSE_FREEFALL, TRACK_BANK_NONE,TRACK_BANK_NONE, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_90_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN - { TRACK_BRAKE_FOR_DROP, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_BRAKE_FOR_DROP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_EIGHTH_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_EIGHTH_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_DIAG_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_DIAG_RIGHT_BANK - { TRACK_LOG_FLUME_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LOG_FLUME_REVERSER - { TRACK_SPINNING_TUNNEL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_SPINNING_TUNNEL - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP - { TRACK_BARREL_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_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, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_POWERED_LIFT - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN - {TRACK_HALF_LOOP_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN - {TRACK_INLINE_TWIST_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN - {TRACK_INLINE_TWIST_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN - {TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // ELEM_FLYER_HALF_LOOP_UP - {TRACK_FLYING_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // ELEM_FLYER_HALF_LOOP_DOWN - {TRACK_CORKSCREW_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_UNINVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -32 }, // ELEM_LEFT_FLYER_CORKSCREW_DOWN - {TRACK_CORKSCREW_INVERTED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -32 }, // ELEM_RIGHT_FLYER_CORKSCREW_DOWN - {TRACK_HEARTLINE_TRANSFER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_HEARTLINE_TRANSFER_UP - {TRACK_HEARTLINE_TRANSFER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN - {TRACK_HEARTLINE_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_HEARTLINE_ROLL - {TRACK_HEARTLINE_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MINI_GOLF_HOLE_A - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MINI_GOLF_HOLE_B - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MINI_GOLF_HOLE_C - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MINI_GOLF_HOLE_D - {TRACK_MINI_GOLF_HOLE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_MINI_GOLF_HOLE_E - { TRACK_QUARTER_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_QUARTER_LOOP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP - { TRACK_QUARTER_LOOP, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_LIFT_HILL_CURVED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_CURVED_LIFT_HILL - { TRACK_LIFT_HILL_CURVED, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_CURVED_LIFT_HILL - { TRACK_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_REVERSER - { TRACK_REVERSER, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_REVERSER - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_AIR_THRUST_TOP_CAP - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN - { TRACK_SLOPE_TO_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL - { TRACK_BLOCK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_BLOCK_BRAKES - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_UP_90, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_FLAT, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_QUARTER_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP - { TRACK_QUARTER_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_90, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP - { TRACK_QUARTER_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP - { TRACK_ROTATION_CONTROL_TOGGLE,TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack1x4A - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack2x2 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack4x4 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack2x4 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack1x5 - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack1x1A - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack1x4B - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack1x1B - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, -40 }, // TrackElemType::FlatTrack1x4C - { TRACK_FLAT_RIDE_BASE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::FlatTrack3x3 - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 32 }, // TrackElemType::LeftLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 32 }, // TrackElemType::RightLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -32 }, // TrackElemType::LeftLargeCorkscrewDown - { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -32 }, // TrackElemType::RightLargeCorkscrewDown - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::LeftMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::RightMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // TrackElemType::LeftMediumHalfLoopDown - { TRACK_HALF_LOOP_MEDIUM, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // TrackElemType::RightMediumHalfLoopDown - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // TrackElemType::LeftZeroGRollUp - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // TrackElemType::RightZeroGRollUp - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // TrackElemType::LeftZeroGRollDown - { TRACK_ZERO_G_ROLL, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // TrackElemType::RightZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::LeftLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::RightLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // TrackElemType::LeftLargeZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, -64 }, // TrackElemType::RightLargeZeroGRollDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_HALF_LOOP_INVERTED_UP, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 64 }, // TrackElemType::FlyerHalfLoopInvertedUp - { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, -64 }, // TrackElemType::FlyerHalfLoopUninvertedDown - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 16 }, // TrackElemType::LeftEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 16 }, // TrackElemType::RightEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -16 }, // TrackElemType::LeftEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -16 }, // TrackElemType::RightEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 16 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 16 }, // TrackElemType::RightEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -16 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, -16 }, // TrackElemType::RightEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_LEFT, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_RIGHT, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::Up25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::Up25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::Down25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::Down25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 16 }, // TrackElemType::LeftEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 16 }, // TrackElemType::RightEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, -16 }, // TrackElemType::LeftEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, -16 }, // TrackElemType::RightEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25 - { TRACK_DIAG_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagBrakes - { TRACK_DIAG_BLOCK_BRAKES, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::DiagBlockBrakes + { 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 }; static_assert(std::size(TrackDefinitions) == TrackElemType::Count); diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index 79452901de..9bc361d3d6 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -27,10 +27,10 @@ struct TrackDescriptor { bool starts_diagonal; uint8_t slope_start; - uint8_t bank_start; + TrackBank bank_start; TrackCurve track_curve; uint8_t slope_end; - uint8_t bank_end; + TrackBank bank_end; track_type_t track_element; }; diff --git a/src/openrct2/scripting/ScriptEngine.cpp b/src/openrct2/scripting/ScriptEngine.cpp index 3d05f5f162..e35d9f8092 100644 --- a/src/openrct2/scripting/ScriptEngine.cpp +++ b/src/openrct2/scripting/ScriptEngine.cpp @@ -526,10 +526,10 @@ void ScriptEngine::RegisterConstants() .Constant("Up90", TRACK_SLOPE_UP_90) .Constant("Down90", TRACK_SLOPE_DOWN_90); builder.Namespace("TrackBanking") - .Constant("None", TRACK_BANK_NONE) - .Constant("BankLeft", TRACK_BANK_LEFT) - .Constant("BankRight", TRACK_BANK_RIGHT) - .Constant("UpsideDown", TRACK_BANK_UPSIDE_DOWN); + .Constant("None", EnumValue(TrackBank::None)) + .Constant("BankLeft", EnumValue(TrackBank::Left)) + .Constant("BankRight", EnumValue(TrackBank::Right)) + .Constant("UpsideDown", EnumValue(TrackBank::UpsideDown)); } void ScriptEngine::RefreshPlugins() diff --git a/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp b/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp index 916e2c87b4..87c020884c 100644 --- a/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp +++ b/src/openrct2/scripting/bindings/ride/ScTrackSegment.cpp @@ -102,7 +102,7 @@ int32_t ScTrackSegment::beginSlope_get() const int32_t ScTrackSegment::beginBank_get() const { const auto& ted = GetTrackElementDescriptor(_type); - return ted.Definition.bank_start; + return EnumValue(ted.Definition.bank_start); } int32_t ScTrackSegment::endX_get() const @@ -138,7 +138,7 @@ int32_t ScTrackSegment::endSlope_get() const int32_t ScTrackSegment::endBank_get() const { const auto& ted = GetTrackElementDescriptor(_type); - return ted.Definition.bank_end; + return EnumValue(ted.Definition.bank_end); } int32_t ScTrackSegment::length_get() const diff --git a/src/openrct2/windows/_legacy.cpp b/src/openrct2/windows/_legacy.cpp index 8f59ecc99f..bfeea22c2e 100644 --- a/src/openrct2/windows/_legacy.cpp +++ b/src/openrct2/windows/_legacy.cpp @@ -127,8 +127,8 @@ static std::tuple window_ride_construction_update_state_get_ uint8_t startSlope = _previousTrackSlopeEnd; uint8_t endSlope = _currentTrackSlopeEnd; - uint8_t startBank = _previousTrackBankEnd; - uint8_t endBank = _currentTrackBankEnd; + auto startBank = _previousTrackBankEnd; + auto endBank = _currentTrackBankEnd; if (_rideConstructionState == RideConstructionState::Back) { @@ -188,7 +188,7 @@ static std::tuple window_ride_construction_update_state_get_ return std::make_tuple(false, 0); } - if (startBank != TRACK_BANK_NONE || endBank != TRACK_BANK_NONE) + if (startBank != TrackBank::None || endBank != TrackBank::None) { return std::make_tuple(false, 0); } @@ -197,7 +197,7 @@ static std::tuple window_ride_construction_update_state_get_ case TrackElemType::LeftVerticalLoop: case TrackElemType::RightVerticalLoop: - if (startBank != TRACK_BANK_NONE || endBank != TRACK_BANK_NONE) + if (startBank != TrackBank::None || endBank != TrackBank::None) { return std::make_tuple(false, 0); }