/***************************************************************************** * Copyright (c) 2014-2023 OpenRCT2 developers * * For a complete list of all authors, please refer to contributors.md * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 * * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ #include "TrackData.h" #include "../localisation/StringIds.h" #include "Track.h" #include "TrackPaint.h" #include #include // clang-format off static constexpr TrackCoordinates _trackCoordinates[] = { { 0, 0, 0, 0, 0, 0 }, // ELEM_FLAT { 0, 0, 0, 0, 0, 0 }, // ELEM_END_STATION { 0, 0, 0, 0, 0, 0 }, // ELEM_BEGIN_STATION { 0, 0, 0, 0, 0, 0 }, // ELEM_MIDDLE_STATION { 0, 0, 0, 16, 0, 0 }, // ELEM_25_DEG_UP { 0, 0, 0, 64, 0, 0 }, // ELEM_60_DEG_UP { 0, 0, 0, 8, 0, 0 }, // ELEM_FLAT_TO_25_DEG_UP { 0, 0, 0, 32, 0, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP { 0, 0, 0, 32, 0, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP { 0, 0, 0, 8, 0, 0 }, // ELEM_25_DEG_UP_TO_FLAT { 0, 0, 16, 0, 0, 0 }, // ELEM_25_DEG_DOWN { 0, 0, 64, 0, 0, 0 }, // ELEM_60_DEG_DOWN { 0, 0, 8, 0, 0, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN { 0, 0, 32, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN { 0, 0, 32, 0, 0, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN { 0, 0, 8, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT { 0, 3, 0, 0, -64, -64 }, // ELEM_LEFT_QUARTER_TURN_5_TILES { 0, 1, 0, 0, -64, 64 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES { 0, 0, 0, 0, 0, 0 }, // ELEM_FLAT_TO_LEFT_BANK { 0, 0, 0, 0, 0, 0 }, // ELEM_FLAT_TO_RIGHT_BANK { 0, 0, 0, 0, 0, 0 }, // ELEM_LEFT_BANK_TO_FLAT { 0, 0, 0, 0, 0, 0 }, // ELEM_RIGHT_BANK_TO_FLAT { 0, 3, 0, 0, -64, -64 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES { 0, 1, 0, 0, -64, 64 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES { 0, 0, 0, 8, 0, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP { 0, 0, 0, 8, 0, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP { 0, 0, 0, 8, 0, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK { 0, 0, 0, 8, 0, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK { 0, 0, 8, 0, 0, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN { 0, 0, 8, 0, 0, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN { 0, 0, 8, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK { 0, 0, 8, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK { 0, 0, 0, 0, 0, 0 }, // ELEM_LEFT_BANK { 0, 0, 0, 0, 0, 0 }, // ELEM_RIGHT_BANK { 0, 3, 0, 64, -64, -64 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP { 0, 1, 0, 64, -64, 64 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP { 0, 3, 64, 0, -64, -64 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN { 0, 1, 64, 0, -64, 64 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN { 0, 0, 0, 0, -64, -32 }, // ELEM_S_BEND_LEFT { 0, 0, 0, 0, -64, 32 }, // ELEM_S_BEND_RIGHT { 0, 0, 0, 0, -32, -32 }, // ELEM_LEFT_VERTICAL_LOOP { 0, 0, 0, 0, -32, 32 }, // ELEM_RIGHT_VERTICAL_LOOP { 0, 3, 0, 0, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES { 0, 1, 0, 0, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES { 0, 3, 0, 0, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK { 0, 1, 0, 0, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK { 0, 3, 0, 32, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 1, 0, 32, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 3, 32, 0, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN { 0, 1, 32, 0, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN { 0, 3, 0, 0, 0, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE { 0, 1, 0, 0, 0, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE { 0, 0, 0, 16, -64, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP { 0, 0, 0, 16, -64, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP { 0, 0, 0, -16, -64, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN { 0, 0, 0, -16, -64, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN { 0, 2, 0, 152, -32, 0 }, // ELEM_HALF_LOOP_UP { 0, 2, 0, -152, 32, 0 }, // ELEM_HALF_LOOP_DOWN { 0, 3, 0, 80, -32, -32 }, // ELEM_LEFT_CORKSCREW_UP { 0, 1, 0, 80, -32, 32 }, // ELEM_RIGHT_CORKSCREW_UP { 0, 3, 0, -80, -32, -32 }, // ELEM_LEFT_CORKSCREW_DOWN { 0, 1, 0, -80, -32, 32 }, // ELEM_RIGHT_CORKSCREW_DOWN { 0, 0, 0, 24, 0, 0 }, // ELEM_FLAT_TO_60_DEG_UP { 0, 0, 0, 24, 0, 0 }, // ELEM_60_DEG_UP_TO_FLAT { 0, 0, 24, 0, 0, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN { 0, 0, 24, 0, 0, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT { 0, 0, 0, 96, 32, 0 }, // ELEM_TOWER_BASE { 0, 0, 0, 32, 32, 0 }, // ELEM_TOWER_SECTION { 0, 0, 0, 0, 0, 0 }, // ELEM_FLAT_COVERED { 0, 0, 0, 16, 0, 0 }, // ELEM_25_DEG_UP_COVERED { 0, 0, 0, 64, 0, 0 }, // ELEM_60_DEG_UP_COVERED { 0, 0, 0, 8, 0, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED { 0, 0, 0, 32, 0, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED { 0, 0, 0, 32, 0, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED { 0, 0, 0, 8, 0, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED { 0, 0, 16, 0, 0, 0 }, // ELEM_25_DEG_DOWN_COVERED { 0, 0, 64, 0, 0, 0 }, // ELEM_60_DEG_DOWN_COVERED { 0, 0, 8, 0, 0, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED { 0, 0, 32, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED { 0, 0, 32, 0, 0, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED { 0, 0, 8, 0, 0, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED { 0, 3, 0, 0, -64, -64 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED { 0, 1, 0, 0, -64, 64 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED { 0, 0, 0, 0, -64, -32 }, // ELEM_S_BEND_LEFT_COVERED { 0, 0, 0, 0, -64, 32 }, // ELEM_S_BEND_RIGHT_COVERED { 0, 3, 0, 0, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED { 0, 1, 0, 0, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED { 0, 2, 0, 16, 0, -96 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL { 0, 2, 0, 16, 0, 96 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL { 0, 2, 16, 0, 0, -96 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL { 0, 2, 16, 0, 0, 96 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL { 0, 2, 0, 16, 0, -160 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE { 0, 2, 0, 16, 0, 160 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE { 0, 2, 16, 0, 0, -160 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE { 0, 2, 16, 0, 0, 160 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE { 0, 3, 0, 64, 0, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP { 0, 1, 0, 64, 0, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP { 0, 3, 64, 0, 0, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN { 0, 1, 64, 0, 0, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN { 0, 0, 0, 0, 0, 0 }, // ELEM_BRAKES { 0, 0, 0, 0, 0, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE { 0, 0, 0, 0, 0, 0 }, // ELEM_INVERTED_90_DEG_UP_TO_FLAT_QUARTER_LOOP { 0, 3, 0, 16, -64, -64 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP { 0, 1, 0, 16, -64, 64 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP { 0, 3, 16, 0, -64, -64 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN { 0, 1, 16, 0, -64, 64 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN { 0, 3, 0, 16, -64, -64 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP { 0, 1, 0, 16, -64, 64 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP { 0, 3, 16, 0, -64, -64 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN { 0, 1, 16, 0, -64, 64 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN { 0, 0, 0, 16, 0, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED { 0, 0, 0, 16, 0, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED { 0, 0, 0, 0, 0, 0 }, // ELEM_WATERFALL { 0, 0, 0, 0, 0, 0 }, // ELEM_RAPIDS { 0, 0, 0, 0, 0, 0 }, // ELEM_ON_RIDE_PHOTO { 0, 0, 16, 0, 0, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED { 0, 0, 16, 0, 0, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED { 0, 0, 16, 16, -128, 0 }, // ELEM_WATER_SPLASH { 0, 0, 0, 88, -96, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE { 0, 0, 0, 88, -96, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE { 0, 0, 0, 0, 0, 0 }, // ELEM_WHIRLPOOL { 0, 0, 88, 0, -96, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT_LONG_BASE { 0, 0, 88, 0, -96, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE { 0, 0, 0, -96, -96, 0 }, // ELEM_CABLE_LIFT_HILL { 0, 0, 0, 240, -160, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE { 0, 0, 0, 80, 32, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL { 0, 0, 0, 32, 32, 0 }, // ELEM_90_DEG_UP { 0, 0, 32, 0, 32, 0 }, // ELEM_90_DEG_DOWN { 0, 0, 0, 56, 32, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP { 0, 0, 56, 0, 0, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN { 0, 0, 0, 56, 0, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP { 0, 0, 56, 0, 32, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN { 0, 0, 24, 0, 0, 0 }, // ELEM_BRAKE_FOR_DROP { 0, 7, 0, 0, -64, -32 }, // ELEM_LEFT_EIGHTH_TO_DIAG { 0, 4, 0, 0, -64, 32 }, // ELEM_RIGHT_EIGHTH_TO_DIAG { 4, 0, 0, 0, -64, 32 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL { 4, 1, 0, 0, -32, 64 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL { 0, 7, 0, 0, -64, -32 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG { 0, 4, 0, 0, -64, 32 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG { 4, 0, 0, 0, -64, 32 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL { 4, 1, 0, 0, -32, 64 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_FLAT { 4, 4, 0, 16, -32, 32 }, // ELEM_DIAG_25_DEG_UP { 4, 4, 0, 64, -32, 32 }, // ELEM_DIAG_60_DEG_UP { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP { 4, 4, 0, 32, -32, 32 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP { 4, 4, 0, 32, -32, 32 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT { 4, 4, 16, 0, -32, 32 }, // ELEM_DIAG_25_DEG_DOWN { 4, 4, 64, 0, -32, 32 }, // ELEM_DIAG_60_DEG_DOWN { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN { 4, 4, 32, 0, -32, 32 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN { 4, 4, 32, 0, -32, 32 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT { 4, 4, 0, 24, -32, 32 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP { 4, 4, 0, 24, -32, 32 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT { 4, 4, 24, 0, -32, 32 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN { 4, 4, 24, 0, -32, 32 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK { 4, 4, 0, 8, -32, 32 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK { 4, 4, 8, 0, -32, 32 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_LEFT_BANK { 4, 4, 0, 0, -32, 32 }, // ELEM_DIAG_RIGHT_BANK { 0, 0, 0, 0, 0, 0 }, // ELEM_LOG_FLUME_REVERSER { 0, 0, 0, 0, 0, 0 }, // ELEM_SPINNING_TUNNEL { 0, 0, 0, 32, -64, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN { 0, 0, 0, 32, -64, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN { 0, 0, 0, -32, -64, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP { 0, 0, 0, -32, -64, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP { 0, 3, 0, 24, -32, -32 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 1, 0, 24, -32, 32 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 3, 24, 0, -32, -32 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK { 0, 1, 24, 0, -32, 32 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK { 0, 0, 0, 16, 0, 0 }, // ELEM_POWERED_LIFT { 0, 2, 0, 280, -64, -32 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP { 0, 2, 0, 280, -64, 32 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP { 0, 2, 0, -280, 64, -32 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN { 0, 2, 0, -280, 64, 32 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN { 0, 0, 0, -16, -64, 0 }, // ELEM_LEFT_FLYER_TWIST_UP_TO_DOWN { 0, 0, 0, -16, -64, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP_TO_DOWN { 0, 0, 0, 16, -64, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN_TO_UP { 0, 0, 0, 16, -64, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN_TO_UP { 0, 2, 0, 120, -32, 0 }, // ELEM_FLYER_HALF_LOOP_UP { 0, 2, 0, -120, 32, 0 }, // ELEM_FLYER_HALF_LOOP_DOWN { 0, 3, 0, 48, -32, -32 }, // ELEM_LEFT_FLY_CORKSCREW_UP_TO_DOWN { 0, 1, 0, 48, -32, 32 }, // ELEM_RIGHT_FLY_CORKSCREW_UP_TO_DOWN { 0, 3, 0, -48, -32, -32 }, // ELEM_LEFT_FLY_CORKSCREW_DOWN_TO_UP { 0, 1, 0, -48, -32, 32 }, // ELEM_RIGHT_FLY_CORKSCREW_DOWN_TO_UP { 0, 2, 0, 32, 0, 0 }, // ELEM_HEARTLINE_TRANSFER_UP { 0, 2, 0, -32, 0, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN { 0, 0, 0, 0, -160, 0 }, // ELEM_LEFT_HEARTLINE_ROLL { 0, 0, 0, 0, -160, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL { 0, 0, 0, 0, -32, 0 }, // ELEM_MINI_GOLF_HOLE_A { 0, 0, 0, 0, -32, 0 }, // ELEM_MINI_GOLF_HOLE_B { 0, 0, 0, 0, -32, 0 }, // ELEM_MINI_GOLF_HOLE_C { 0, 1, 0, 0, -32, 32 }, // ELEM_MINI_GOLF_HOLE_D { 0, 3, 0, 0, -32, -32 }, // ELEM_MINI_GOLF_HOLE_E { 0, 2, 0, -96, -96, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP { 0, 2, 0, 128, 64, 0 }, // ELEM_90_DEG_UP_QUARTER_LOOP_TO_INVERTED { 0, 2, 0, -128, -96, 0 }, // ELEM_QUARTER_LOOP_INVERT_TO_90_DEG_DOWN { 0, 3, 0, 16, -32, -32 }, // ELEM_LEFT_CURVED_LIFT_HILL { 0, 1, 0, 16, -32, 32 }, // ELEM_RIGHT_CURVED_LIFT_HILL { 0, 0, 0, 0, -64, 0 }, // ELEM_LEFT_REVERSER { 0, 0, 0, 0, -64, 0 }, // ELEM_RIGHT_REVERSER { 0, 0, 0, 0, -32, 0 }, // ELEM_AIR_THRUST_TOP_CAP { 0, 0, 80, 0, 32, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN { 0, 0, 240, 0, -160, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL { 0, 0, 0, 0, 0, 0 }, // ELEM_BLOCK_BRAKES { 0, 3, 0, 32, -32, -32 }, // ELEM_BANKED_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 1, 0, 32, -32, 32 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP { 0, 3, 32, 0, -32, -32 }, { 0, 1, 32, 0, -32, 32 }, { 0, 3, 0, 64, -64, -64 }, { 0, 1, 0, 64, -64, 64 }, { 0, 3, 64, 0, -64, -64 }, { 0, 1, 64, 0, -64, 64 }, { 0, 0, 0, 16, 0, 0 }, { 0, 0, 0, 16, 0, 0 }, { 0, 0, 0, 16, 0, 0 }, { 0, 0, 0, 16, 0, 0 }, { 0, 0, 16, 0, 0, 0 }, { 0, 0, 16, 0, 0, 0 }, { 0, 0, 16, 0, 0, 0 }, { 0, 0, 16, 0, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 0, 8, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 0, 8, 0, 0, 0 }, { 0, 3, 0, 96, 0, 32 }, { 0, 1, 0, 96, 0, -32 }, { 0, 3, 96, 0, 0, 32 }, { 0, 1, 96, 0, 0, -32 }, { 0, 2, 0, 96, 64, 0 }, { 0, 2, 0, -128, -96, 0 }, { 0, 2, 0, 128, 64, 0 }, { 0, 0, 0, 0, 0, 0 }, { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x4A { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack2x2 { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack4x4 { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack2x4 { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x5 { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x1A { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x4B { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x1B { 0, 2, 0, 0, 0, 32 }, // TrackElemType::FlatTrack1x4C { 0, 0, 0, 96, 32, 0 }, // TrackElemType::FlatTrack3x3 { 0, 3, 0, 112, -64, -64 }, // TrackElemType::LeftCorkscrewUp { 0, 1, 0, 112, -64, 64 }, // TrackElemType::RightCorkscrewUp { 0, 3, 0, -112, -64, -64 }, // TrackElemType::LeftCorkscrewDown { 0, 1, 0, -112, -64, 64 }, // TrackElemType::RightCorkscrewDown { 0, 2, 0, 216, -32, -32 }, // TrackElemType::LeftMediumHalfLoopUp { 0, 2, 0, 216, -32, 32 }, // TrackElemType::RightMediumHalfLoopUp { 0, 2, 0, -216, 32, -32 }, // TrackElemType::LeftMediumHalfLoopDown { 0, 2, 0, -216, 32, 32 }, // TrackElemType::RightMediumHalfLoopDown { 0, 0, 0, 56, -64, 0 }, // TrackElemType::LeftZeroGRollUp { 0, 0, 0, 56, -64, 0 }, // TrackElemType::RightZeroGRollUp { 0, 0, 0, -56,-64, 0 }, // TrackElemType::LeftZeroGRollDown { 0, 0, 0, -56,-64, 0 }, // TrackElemType::RightZeroGRollDown { 0, 0, 0, 152, -96, 0 }, // TrackElemType::LeftLargeZeroGRollUp { 0, 0, 0, 152, -96, 0 }, // TrackElemType::RightLargeZeroGRollUp { 0, 0, 0, -152,-96, 0 }, // TrackElemType::LeftLargeZeroGRollDown { 0, 0, 0, -152,-96, 0 }, // TrackElemType::RightLargeZeroGRollDown { 0, 2, 0, 248, -64, -32 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp { 0, 2, 0, 248, -64, 32 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp { 0, 2, 0, -248, 64, -32 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown { 0, 2, 0, -248, 64, 32 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown { 0, 2, 0, 280, -64, -32 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp { 0, 2, 0, 280, -64, 32 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp { 0, 2, 0, -280, 64, -32 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown { 0, 2, 0, -280, 64, 32 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown { 0, 2, 0, 152, -32, 0 }, // TrackElemType::FlyerHalfLoopInvertedUp { 0, 2, 0, -152, 32, 0 }, // TrackElemType::FlyerHalfLoopUninvertedDown { 0, 7, 0, 48, -64, -32 }, // TrackElemType::LeftEighthToDiagUp25 { 0, 4, 0, 48, -64, 32 }, // TrackElemType::RightEighthToDiagUp25 { 0, 7, 0,-48, -64, -32 }, // TrackElemType::LeftEighthToDiagDown25 { 0, 4, 0,-48, -64, 32 }, // TrackElemType::RightEighthToDiagDown25 { 4, 0, 0, 48, -64, 32 }, // TrackElemType::LeftEighthToOrthogonalUp25 { 4, 1, 0, 48, -32, 64 }, // TrackElemType::RightEighthToOrthogonalUp25 { 4, 0, 0,-48, -64, 32 }, // TrackElemType::LeftEighthToOrthogonalDown25 { 4, 1, 0,-48, -32, 64 }, // TrackElemType::RightEighthToOrthogonalDown25 { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagUp25ToLeftBankedUp25 { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagUp25ToRightBankedUp25 { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagLeftBankedUp25ToUp25 { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagRightBankedUp25ToUp25 { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagDown25ToLeftBankedDown25 { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagDown25ToRightBankedDown25 { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagLeftBankedDown25ToDown25 { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagRightBankedDown25ToDown25 { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagFlatToLeftBankedUp25 { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagFlatToRightBankedUp25 { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagLeftBankedUp25ToFlat { 4, 4, 0, 8, -32, 32 }, // TrackElemType::DiagRightBankedUp25ToFlat { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagFlatToLeftBankedDown25 { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagFlatToRightBankedDown25 { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagLeftBankedDown25ToFlat { 4, 4, 8, 0, -32, 32 }, // TrackElemType::DiagRightBankedDown25ToFlat { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagUp25LeftBanked { 4, 4, 0, 16, -32, 32 }, // TrackElemType::DiagUp25RightBanked { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagDown25LeftBanked { 4, 4, 16, 0, -32, 32 }, // TrackElemType::DiagDown25RightBanked { 0, 7, 0, 48, -64, -32 }, // TrackElemType::LeftEighthBankToDiagUp25 { 0, 4, 0, 48, -64, 32 }, // TrackElemType::RightEighthBankToDiagUp25 { 0, 7, 0,-48, -64, -32 }, // TrackElemType::LeftEighthBankToDiagDown25 { 0, 4, 0,-48, -64, 32 }, // TrackElemType::RightEighthBankToDiagDown25 { 4, 0, 0, 48, -64, 32 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { 4, 1, 0, 48, -32, 64 }, // TrackElemType::RightEighthBankToOrthogonalUp25 { 4, 0, 0,-48, -64, 32 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { 4, 1, 0,-48, -32, 64 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(_trackCoordinates) == TrackElemType::Count); /** rct2: 0x0099BA64 */ static constexpr uint8_t TrackSequenceProperties[][MaxSequencesPerPiece] = { { 0 }, /* TrackElemType::EndStation */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::BeginStation */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::MiddleStation */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, /* TrackElemType::TowerBase */ { TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, /* TrackElemType::Maze */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, /* TrackElemType::SpinningTunnel */ { TRACK_SEQUENCE_FLAG_DISALLOW_DOORS, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, { 0 }, /* TrackElemType::FlatTrack1x4A */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack2x2 */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack4x4 */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 }, /* TrackElemType::FlatTrack2x4 */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack1x5 */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack1x1A */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack1x4B */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_ORIGIN, 0, TRACK_SEQUENCE_FLAG_DIRECTION_1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack1x1B */ { TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN | TRACK_SEQUENCE_FLAG_CONNECTS_TO_PATH, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack1x4C */ { TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3 | TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, /* TrackElemType::FlatTrack3x3 */ { TRACK_SEQUENCE_FLAG_ORIGIN, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_0, TRACK_SEQUENCE_FLAG_DIRECTION_0 | TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1, TRACK_SEQUENCE_FLAG_DIRECTION_2 | TRACK_SEQUENCE_FLAG_DIRECTION_3, TRACK_SEQUENCE_FLAG_DIRECTION_1 | TRACK_SEQUENCE_FLAG_DIRECTION_2, TRACK_SEQUENCE_FLAG_DIRECTION_2, 0, 0, 0, 0, 0, 0, 0 }, { 0 }, // TrackElemType::LeftCorkscrewUp { 0 }, // TrackElemType::RightCorkscrewUp { 0 }, // TrackElemType::LeftCorkscrewDown { 0 }, // TrackElemType::RightCorkscrewDown { 0 }, // TrackElemType::LeftMediumHalfLoopUp { 0 }, // TrackElemType::RightMediumHalfLoopUp { 0 }, // TrackElemType::LeftMediumHalfLoopDown { 0 }, // TrackElemType::RightMediumHalfLoopDown { 0 }, // TrackElemType::LeftZeroGRollUp { 0 }, // TrackElemType::RightZeroGRollUp { 0 }, // TrackElemType::LeftZeroGRollDown { 0 }, // TrackElemType::RightZeroGRollDown { 0 }, // TrackElemType::LeftLargeZeroGRollUp { 0 }, // TrackElemType::RightLargeZeroGRollUp { 0 }, // TrackElemType::LeftLargeZeroGRollDown { 0 }, // TrackElemType::RightLargeZeroGRollDown /* LeftFlyerLargeHalfLoopUninvertedUp */ { 0 }, /* RightFlyerLargeHalfLoopUninvertedUp */ { 0 }, /* LeftFlyerLargeHalfLoopInvertedDown */ { 0 }, /* RightFlyerLargeHalfLoopInvertedDown */ { 0 }, /* LeftFlyerLargeHalfLoopInvertedUp */ { 0 }, /* RightFlyerLargeHalfLoopInvertedUp */ { 0 }, /* LeftFlyerLargeHalfLoopUninvertedDown */ { 0 }, /* RightFlyerLargeHalfLoopUninvertedDown */ { 0 }, /* FlyerHalfLoopInvertedUp */ { 0 }, /* FlyerHalfLoopUninvertedUp */ { 0 }, { 0 }, // TrackElemType::LeftEighthToDiagUp25 { 0 }, // TrackElemType::RightEighthToDiagUp25 { 0 }, // TrackElemType::LeftEighthToDiagDown25 { 0 }, // TrackElemType::RightEighthToDiagDown25 { 0 }, // TrackElemType::LeftEighthToOrthogonalUp25 { 0 }, // TrackElemType::RightEighthToOrthogonalUp25 { 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 { 0 }, // TrackElemType::RightEighthToOrthogonalDown25 { 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 { 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 { 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 { 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 { 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 { 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 { 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 { 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 { 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 { 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 { 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat { 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat { 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 { 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 { 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat { 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat { 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 { 0 }, // TrackElemType::DiagFlatToRightBankedUp25 { 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat { 0 }, // TrackElemType::DiagRightBankedUp25ToFlat { 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 { 0 }, // TrackElemType::DiagFlatToRightBankedDown25 { 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat { 0 }, // TrackElemType::DiagRightBankedDown25ToFlat { 0 }, // TrackElemType::DiagUp25LeftBanked { 0 }, // TrackElemType::DiagUp25RightBanked { 0 }, // TrackElemType::DiagDown25LeftBanked { 0 }, // TrackElemType::DiagDown25RightBanked { 0 }, // TrackElemType::LeftEighthBankToDiagUp25 { 0 }, // TrackElemType::RightEighthBankToDiagUp25 { 0 }, // TrackElemType::LeftEighthBankToDiagDown25 { 0 }, // TrackElemType::RightEighthBankToDiagDown25 { 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 { 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackSequenceProperties) == TrackElemType::Count); #define TRACK_BLOCK_END { 255, 255, 255, 255, 255, {255, 255}, 255 } static constexpr PreviewTrack TrackBlocks000[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks001[] = { { 0, 0, 0, 0, 0,{ 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks002[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks003[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks004[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks005[] = { { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks006[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks007[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks008[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks009[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks010[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks011[] = { { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks012[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks013[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks014[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks015[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks016[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks017[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks018[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks019[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks020[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks021[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks022[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks023[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks024[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks025[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks026[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks027[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks028[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks029[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks030[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks031[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks032[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks033[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks034[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 16, { 0b0111, 0b0100 }, 0 }, { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 }, { 4, -32, -64, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 32, 16, { 0b0111, 0b0100 }, 0 }, { 6, -64, -64, 48, 16, { 0b1111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks035[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 16, { 0b1011, 0b1000 }, 0 }, { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 }, { 4, -32, 64, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 32, 16, { 0b1011, 0b1000 }, 0 }, { 6, -64, 64, 48, 16, { 0b1111, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks036[] = { { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 }, { 1, 0, -32, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 32, 16, { 0b0111, 0b0001 }, 0 }, { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 }, { 4, -32, -64, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 16, 16, { 0b0111, 0b0001 }, 0 }, { 6, -64, -64, 0, 16, { 0b1111, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks037[] = { { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 }, { 1, 0, 32, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 32, 16, { 0b1011, 0b0010 }, 0 }, { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 }, { 4, -32, 64, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 16, 16, { 0b1011, 0b0010 }, 0 }, { 6, -64, 64, 0, 16, { 0b1111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks038[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks039[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks040[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 96, { 0b0010, 0 }, 0 }, { 3, -32, 0, 120, 16, { 0b0110, 0 }, 0 }, { 4, -32, -32, 120, 0, { 0b0000, 0 }, 0 }, { 5, 0, 0, 120, 0, { 0b0000, 0 }, 0 }, { 6, 0, -32, 120, 16, { 0b1001, 0 }, 0 }, { 7, 32, -32, 32, 96, { 0b1000, 0 }, 0 }, { 8, 0, -32, 16, 16, { 0b1111, 0b0011 }, 0 }, { 9, -32, -32, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks041[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 96, { 0b0001, 0 }, 0 }, { 3, -32, 0, 120, 16, { 0b1001, 0 }, 0 }, { 4, -32, 32, 120, 0, { 0b0000, 0 }, 0 }, { 5, 0, 0, 120, 0, { 0b0000, 0 }, 0 }, { 6, 0, 32, 120, 16, { 0b0110, 0 }, 0 }, { 7, 32, 32, 32, 96, { 0b0100, 0 }, 0 }, { 8, 0, 32, 16, 16, { 0b1111, 0b0011 }, 0 }, { 9, -32, 32, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks042[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks043[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks044[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks045[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks046[] = { { 0, 0, 0, 0, 16, { 0b0111, 0b0100 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks047[] = { { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks048[] = { { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 16, { 0b0111, 0b0001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks049[] = { { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 16, { 0b1011, 0b0010 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks050[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks051[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks052[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks053[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks054[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks055[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks056[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 }, { 3, -32, 0, 120, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks057[] = { { 0, 0, 0, -32, 32, { 0b1111, 0 }, 0 }, { 1, -32, 0, -120, 96,{ 0b0011, 0 }, 0 }, { 2, 0, 0, -136, 16, { 0b1111, 0b1100 }, 0 }, { 3, 32, 0, -152, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks058[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 24, 32, { 0b0111, 0 }, 0 }, { 2, -32, -32, 48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks059[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 24, 32, { 0b1011, 0 }, 0 }, { 2, -32, 32, 48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks060[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -56, 32, { 0b0111, 0 }, 0 }, { 2, -32, -32, -80, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks061[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -56, 32, { 0b1011, 0 }, 0 }, { 2, -32, 32, -80, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks062[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks063[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks064[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks065[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks066[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, { 1, -32, -32, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, 0, -32, 0, 0, { 0b1111, 0 }, 0 }, { 5, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 6, 32, -32, 0, 0, { 0b1111, 0 }, 0 }, { 7, 32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 8, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks067[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks068[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks069[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks070[] = { { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks071[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks072[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks073[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks074[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks075[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks076[] = { { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks077[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks078[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks079[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks080[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks081[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks082[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks083[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks084[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks085[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks086[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks087[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 4, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 4, { 0b0111, 0 }, 0 }, { 4, -32, -64, 8, 0, { 0b1011, 0 }, 0 }, { 5, 0, -64, 8, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 6, -32, -96, 8, 4, { 0b0001, 0 }, 0 }, { 7, 0, -96, 8, 4, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks088[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 4, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 4, { 0b1011, 0 }, 0 }, { 4, -32, 64, 8, 0, { 0b0111, 0 }, 0 }, { 5, 0, 64, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 6, -32, 96, 8, 4, { 0b0010, 0 }, 0 }, { 7, 0, 96, 8, 4, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks089[] = { { 0, 0, 0, 8, 4, { 0b0111, 0 }, 0 }, { 1, 0, -32, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 8, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 8, 0, { 0b0111, 0 }, 0 }, { 4, -32, -64, 0, 4, { 0b1011, 0 }, 0 }, { 5, 0, -64, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 6, -32, -96, 0, 0, { 0b0001, 0 }, 0 }, { 7, 0, -96, 0, 0, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks090[] = { { 0, 0, 0, 8, 4, { 0b1011, 0 }, 0 }, { 1, 0, 32, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 8, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 8, 0, { 0b1011, 0 }, 0 }, { 4, -32, 64, 0, 4, { 0b0111, 0 }, 0 }, { 5, 0, 64, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 6, -32, 96, 0, 0, { 0b0010, 0 }, 0 }, { 7, 0, 96, 0, 0, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks091[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 4, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 4, { 0b1111, 0 }, 0 }, { 7, -64, -96, 8, 0, { 0b1111, 0 }, 0 }, { 8, -32, -96, 8, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 9, -64, -128, 8, 0, { 0b1011, 0 }, 0 }, { 10, -32, -128, 8, 0, { 0b1110, 0 }, 0 }, { 11, 0, -128, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 12, -32, -160, 8, 4, { 0b1011, 0 }, 0 }, { 13, 0, -160, 8, 4, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks092[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 4, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 4, { 0b1111, 0 }, 0 }, { 7, -64, 96, 8, 0, { 0b1111, 0 }, 0 }, { 8, -32, 96, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 9, -64, 128, 8, 0, { 0b0111, 0 }, 0 }, { 10, -32, 128, 8, 0, { 0b1101, 0 }, 0 }, { 11, 0, 128, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 12, -32, 160, 8, 4, { 0b0111, 0 }, 0 }, { 13, 0, 160, 8, 4, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks093[] = { { 0, 0, 0, 8, 4, { 0b1111, 0 }, 0 }, { 1, 0, -32, 8, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 8, 4, { 0b0111, 0 }, 0 }, { 3, -32, -32, 8, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 8, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 8, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 8, 0, { 0b1111, 0 }, 0 }, { 7, -64, -96, 0, 4, { 0b1111, 0 }, 0 }, { 8, -32, -96, 0, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 9, -64, -128, 0, 4, { 0b1011, 0 }, 0 }, { 10, -32, -128, 0, 0, { 0b1110, 0 }, 0 }, { 11, 0, -128, 0, 0, { 0b0100, 0b0000 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 12, -32, -160, 0, 0, { 0b1011, 0 }, 0 }, { 13, 0, -160, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks094[] = { { 0, 0, 0, 8, 4, { 0b1111, 0 }, 0 }, { 1, 0, 32, 8, 4, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 8, 4, { 0b1011, 0 }, 0 }, { 3, -32, 32, 8, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 8, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 8, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 8, 0, { 0b1111, 0 }, 0 }, { 7, -64, 96, 0, 4, { 0b1111, 0 }, 0 }, { 8, -32, 96, 0, 4, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 9, -64, 128, 0, 4, { 0b0111, 0 }, 0 }, { 10, -32, 128, 0, 0, { 0b1101, 0 }, 0 }, { 11, 0, 128, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 12, -32, 160, 0, 0, { 0b0111, 0 }, 0 }, { 13, 0, 160, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks095[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks096[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks097[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks098[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks099[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks100[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks101[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks102[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 12, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 12, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks103[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 12, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 12, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks104[] = { { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 12, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks105[] = { { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 12, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks106[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 12, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 12, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks107[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 12, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 12, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks108[] = { { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 12, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 12, { 0b0111, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b1101, 0 }, 0 }, { 4, -32, -64, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 0, 0, { 0b0111, 0 }, 0 }, { 6, -64, -64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks109[] = { { 0, 0, 0, 0, 12, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 12, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 12, { 0b1011, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1110, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 0, 0, { 0b1011, 0 }, 0 }, { 6, -64, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks110[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks111[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks112[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks113[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks114[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks115[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks116[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks117[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 16, { 0b1111, 0 }, 0 }, { 4, -128, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks118[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 24, { 0b1111, 0 }, 0 }, { 3, -96, 0, 40, 48, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks119[] = { { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, { 1, -32, 0, 40, 48, { 0b1111, 0 }, 0 }, { 2, -64, 0, 64, 24, { 0b1111, 0 }, 0 }, { 3, -96, 0, 80, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks120[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks121[] = { { 0, 0, 0, 40, 48, { 0b1111, 0 }, 0 }, { 1, -32, 0, 16, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks122[] = { { 0, 0, 0, 80, 8, { 0b1111, 0 }, 0 }, { 1, -32, 0, 64, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, 40, 48, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 48, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks123[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, { 2, -64, 0, -32, 32, { 0b1111, 0b0011 }, 0 }, { 3, -96, 0, -96, 64, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks124[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 48, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 80, { 0b1111, 0 }, 0 }, { 4, -128, 0, 0, 160, { 0b1111, 0 }, 0 }, { 5, -192, 0, 0, 208, { 0b1111, 0 }, 0 }, { 6, -160, 0, 0, 208, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks125[] = { { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks126[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks127[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks128[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks129[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks130[] = { { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks131[] = { { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks132[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks133[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1000, 0 }, 0 }, { 3, -64, 0, 0, 0, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, -32, 0, 0, { 0b0001, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks134[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b0100, 0 }, 0 }, { 3, -64, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks135[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b0001, 0 }, 0 }, { 2, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -64, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks136[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks137[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1000, 0 }, 0 }, { 3, -64, 0, 0, 0, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, -32, 0, 0, { 0b0001, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks138[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b0100, 0 }, 0 }, { 3, -64, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks139[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b0001, 0 }, 0 }, { 2, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -64, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks140[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -32, 64, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks141[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks142[] = { { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 16, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks143[] = { { 0, 0, 0, 0, 64, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 64, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 64, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 64, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks144[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks145[] = { { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks146[] = { { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks147[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks148[] = { { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 16, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks149[] = { { 0, 0, 0, 0, 64, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 64, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 64, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 64, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks150[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks151[] = { { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks152[] = { { 0, 0, 0, 0, 32, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 32, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 32, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 32, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks153[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks154[] = { { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks155[] = { { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks156[] = { { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks157[] = { { 0, 0, 0, 0, 24, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 24, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 24, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 24, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks158[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks159[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks160[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks161[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks162[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks163[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks164[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks165[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks166[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks167[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks168[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks169[] = { { 0, 0, 0, 0, 8, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 8, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 8, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks170[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks171[] = { { 0, 0, 0, 0, 0, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 0, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 0, 0, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks172[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks173[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks174[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks175[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks176[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -32, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks177[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -32, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks178[] = { { 0, 0, 0, 0, 0, { 0b0111, 0b0100 }, 0 }, { 1, 0, -32, 0, 16, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0010, 0 }, 0 }, { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks179[] = { { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 }, { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0001, 0 }, 0 }, { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks180[] = { { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 }, { 1, 0, -32, 0, 16, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 0, { 0b0111, 0b0001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks181[] = { { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 }, { 1, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 16, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1011, 0b0010 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks182[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks183[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, -32, 248, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks184[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, 32, 248, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks185[] = { { 0, 0, 0, -32, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 }, { 3, -32, -32, -216, 192, { 0b1111, 0 }, 0 }, { 4, 0, -32, -248, 56, { 0b1111, 0 }, 0 }, { 5, 32, -32, -264, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, -32, -280, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks186[] = { { 0, 0, 0, -32, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 }, { 3, -32, 32, -216, 192, { 0b1111, 0 }, 0 }, { 4, 0, 32, -248, 56, { 0b1111, 0 }, 0 }, { 5, 32, 32, -264, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, 32, -280, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks187[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -16, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks188[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, -16, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, -16, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks189[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks190[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks191[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 }, { 3, -32, 0, 120, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks192[] = { { 0, 0, 0, 0, 32, { 0b1111, 0 }, 0 }, { 1, -32, 0, -88, 96,{ 0b0011, 0 }, 0 }, { 2, 0, 0, -104, 16, { 0b1111, 0b1100 }, 0 }, { 3, 32, 0, -120, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks193[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 24, 32, { 0b0111, 0 }, 0 }, { 2, -32, -32, 48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks194[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 24, 32, { 0b1011, 0 }, 0 }, { 2, -32, 32, 48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks195[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -24, 32, { 0b0111, 0 }, 0 }, { 2, -32, -32, -48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks196[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -24, 32, { 0b1011, 0 }, 0 }, { 2, -32, 32, -48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks197[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, 16, 0, { 0b1111, 0 }, 0 }, { 3, 0, 0, 32, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks198[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, -32, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, -16, 0, { 0b1111, 0 }, 0 }, { 3, 0, 0, -32, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks199[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 0, { 0b1111, 0 }, 0 }, { 4, -128, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, -160, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks200[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, -96, 0, 0, 0, { 0b1111, 0 }, 0 }, { 4, -128, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, -160, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks201[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks202[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks203[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks204[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks205[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks206[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, -32, 0, -40, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, -64, 0, -96, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 3, -96, 0, -96, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks207[] = { { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 56, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, 64, 0, 96, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks208[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, -32, 0, -72, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, -64, 0, -128, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 3, -96, 0, -128, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks209[] = { { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 8, { 0b0111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks210[] = { { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 0, 8, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 8, { 0b1011, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks211[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, -32, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, -32, 0, 0, { 0b1111, 0 }, 0 }, { 3, -64, -32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks212[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 3, -64, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks213[] = { { 0, 0, 0, 0, 32, { 0b1111, 0 }, 0 }, { 1, 32, 0, 0, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, 0, 32, { 0b1111, 0 }, 0 }, { 3, -32, 0, 0, 32, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks214[] = { { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks215[] = { { 0, 0, 0, 0, 208, { 0b1111, 0 }, 0 }, { 1, 32, 0, 0, 208, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 160, { 0b1111, 0 }, 0 }, { 3, -64, 0, 0, 80, { 0b1111, 0 }, 0 }, { 4, -96, 0, 0, 48, { 0b1111, 0 }, 0 }, { 5, -128, 0, 0, 32, { 0b1111, 0 }, 0 }, { 6, -160, 0, 0, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks216[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks217[] = { { 0, 0, 0, 0, 16, { 0b0111, 0b0100 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 16, 16,{ 0b0111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks218[] = { { 0, 0, 0, 0, 16, { 0b1011, 0b1000 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 16, 16,{ 0b1011, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks219[] = { { 0, 0, 0, 16, 16,{ 0b0111, 0b0011 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0010, 0 }, 0 }, { 3, -32, -32, 0, 16, { 0b0111, 0b0001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks220[] = { { 0, 0, 0, 16, 16, { 0b1011, 0b0011 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 0, { 0b0001, 0 }, 0 }, { 3, -32, 32, 0, 16, { 0b1011, 0b0010 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks221[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, 0, -32, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 16, { 0b0111, 0b0100 }, 0 }, { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 }, { 4, -32, -64, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 32, 16, { 0b0111, 0b0100 }, 0 }, { 6, -64, -64, 48, 16, { 0b1111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks222[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, { 1, 0, 32, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 16, 16, { 0b1011, 0b1000 }, 0 }, { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 }, { 4, -32, 64, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 32, 16, { 0b1011, 0b1000 }, 0 }, { 6, -64, 64, 48, 16, { 0b1111, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks223[] = { { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 }, { 1, 0, -32, 48, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 32, 16, { 0b0111, 0b0001 }, 0 }, { 3, -32, -32, 24, 16, { 0b1101, 0 }, 0 }, { 4, -32, -64, 16, 0, { 0b1000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, -32, 16, 16, { 0b0111, 0b0001 }, 0 }, { 6, -64, -64, 0, 16, { 0b1111, 0b1001 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks224[] = { { 0, 0, 0, 48, 16, { 0b1111, 0b0011 }, 0 }, { 1, 0, 32, 48, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 2, -32, 0, 32, 16, { 0b1011, 0b0010 }, 0 }, { 3, -32, 32, 24, 16, { 0b1110, 0 }, 0 }, { 4, -32, 64, 16, 0, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 5, -64, 32, 16, 16, { 0b1011, 0b0010 }, 0 }, { 6, -64, 64, 0, 16, { 0b1111, 0b0110 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks225[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks226[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks227[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks228[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks229[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks230[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks231[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks232[] = { { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks233[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks234[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks235[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks236[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks237[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks238[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks239[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks240[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks241[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks242[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks243[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks244[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks245[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks246[] = { { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks247[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks248[] = { { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks249[] = { { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 0, 32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks250[] = { { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 0, -32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks251[] = { { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 0, 32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks252[] = { { 0, 0, 0, 0, 72, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 0, -32, 0, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks253[] = { { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 56, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, 64, 0, 96, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks254[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, -32, 0, -72, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, -64, 0, -128, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 3, -96, 0, -128, 0, { 0b0000, 0 }, RCT_PREVIEW_TRACK_FLAG_0 | RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocks255[] = { { 0, 0, 0, 32, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 1, 32, 0, 88, 32, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, { 2, 64, 0, 128, 16, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRotationControlToggle[] = { { 0, 0, 0, 0, 0, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x4A[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack2x2[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 2, 32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, 32, 32, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack4x4[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 2, 0, 64, 0, 0, { 0b1111, 0 }, 0 }, { 3, 0, 96, 0, 0, { 0b1111, 0 }, 0 }, { 4, 32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, 32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 6, 32, 64, 0, 0, { 0b1111, 0 }, 0 }, { 7, 32, 96, 0, 0, { 0b1111, 0 }, 0 }, { 8, 64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 9, 64, 32, 0, 0, { 0b1111, 0 }, 0 }, { 10, 64, 64, 0, 0, { 0b1111, 0 }, 0 }, { 11, 64, 96, 0, 0, { 0b1111, 0 }, 0 }, { 12, 96, 0, 0, 0, { 0b1111, 0 }, 0 }, { 13, 96, 32, 0, 0, { 0b1111, 0 }, 0 }, { 14, 96, 64, 0, 0, { 0b1111, 0 }, 0 }, { 15, 96, 96, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack2x4[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 2, 0, 64, 0, 0, { 0b1111, 0 }, 0 }, { 3, 0, 96, 0, 0, { 0b1111, 0 }, 0 }, { 4, 32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 5, 32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 6, 32, 64, 0, 0, { 0b1111, 0 }, 0 }, { 7, 32, 96, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x5[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, 32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 4, 64, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x1A[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x4B[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x1B[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack1x4C[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -64, 0, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlatTrack3x3[] = { { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, { 1, -32, -32, 0, 0, { 0b1111, 0 }, 0 }, { 2, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, { 3, -32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 4, 0, -32, 0, 0, { 0b1111, 0 }, 0 }, { 5, 0, 32, 0, 0, { 0b1111, 0 }, 0 }, { 6, 32, -32, 0, 0, { 0b1111, 0 }, 0 }, { 7, 32, 32, 0, 0, { 0b1111, 0 }, 0 }, { 8, 32, 0, 0, 0, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_1 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftLargeCorkscrewUp[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 8, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, 32, 24, { 0b0111, 0 }, 0 }, { 3, -32, -32, 32, 24, { 0b1000, 0 }, 0 }, { 4, -64, -32, 48, 40, { 0b1111, 0 }, 0 }, { 5, -64, -64, 72, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightLargeCorkscrewUp[] = { { 0, 0, 0 , 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 8, 32, { 0b1111, 0 }, 0 }, { 2, -64, 0, 32, 24, { 0b1011, 0 }, 0 }, { 3, -32, 32, 32, 24, { 0b0100, 0 }, 0 }, { 4, -64, 32, 48, 40, { 0b1111, 0 }, 0 }, { 5, -64, 64, 72, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftLargeCorkscrewDown[] = { { 0, 0, 0 , -40, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -64, 40, { 0b1111, 0 }, 0 }, { 2, -32, -32, -80, 24, { 0b1000, 0 }, 0 }, { 3, -64, 0, -80, 24, { 0b0111, 0 }, 0 }, { 4, -64, -32, -104, 32, { 0b1111, 0 }, 0 }, { 5, -64, -64, -112, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightLargeCorkscrewDown[] = { { 0, 0, 0 , -40, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -64, 40, { 0b1111, 0 }, 0 }, { 2, -32, 32, -80, 24, { 0b0100, 0 }, 0 }, { 3, -64, 0, -80, 24, { 0b1011, 0 }, 0 }, { 4, -64, 32, -104, 32, { 0b1111, 0 }, 0 }, { 5, -64, 64, -112, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftMediumHalfLoopUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, 16, 48, { 0b1111, 0 }, 0 }, { 2, -64, 0, 56,120, { 0b1111, 0 }, 0 }, { 3, -64, -32, 56,120, { 0b1111, 0 }, 0 }, { 4, -32, -32,168, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightMediumHalfLoopUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, 16, 48, { 0b1111, 0 }, 0 }, { 2, -64, 0, 56,120, { 0b1111, 0 }, 0 }, { 3, -64, 32, 56,120, { 0b1111, 0 }, 0 }, { 4, -32, 32,168, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftMediumHalfLoopDown[] = { { 0, 0, 0, -48, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -160,120, { 0b1111, 0 }, 0 }, { 2, -32, -32, -160,120, { 0b1111, 0 }, 0 }, { 3, 0, -32, -200, 48, { 0b1111, 0 }, 0 }, { 4, 32, -32, -216, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightMediumHalfLoopDown[] = { { 0, 0, 0 , -48, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -160, 120, { 0b1111, 0 }, 0 }, { 2, -32, 32, -160, 120, { 0b1111, 0 }, 0 }, { 3, 0, 32, -200, 48, { 0b1111, 0 }, 0 }, { 4, 32, 32, -216, 24, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftZeroGRollUp[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 8, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, 24, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightZeroGRollUp[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 8, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, 24, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftZeroGRollDown[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -48, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, -56, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightZeroGRollDown[] = { { 0, 0, 0 ,-32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -48, 24, { 0b1111, 0 }, 0 }, { 2, -64, 0, -56, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftLargeZeroGRollUp[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, { 1, -32, 0, 56, 48, { 0b1111, 0 }, 0 }, { 2, -64, 0, 96, 40, { 0b1111, 0 }, 0 }, { 3, -96, 0,120, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightLargeZeroGRollUp[] = { { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, { 1, -32, 0, 56, 48, { 0b1111, 0 }, 0 }, { 2, -64, 0, 96, 40, { 0b1111, 0 }, 0 }, { 3, -96, 0, 120, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftLargeZeroGRollDown[] = { { 0, 0, 0, -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -56, 40, { 0b1111, 0 }, 0 }, { 2, -64, 0, -96, 48, { 0b1111, 0 }, 0 }, { 3, -96, 0, -152, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightLargeZeroGRollDown[] = { { 0, 0, 0 , -32, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -56, 40, { 0b1111, 0 }, 0 }, { 2, -64, 0, -96, 48, { 0b1111, 0 }, 0 }, { 3, -96, 0, -152, 64, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, -32, 248, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, 32, 248, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedDown[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -184, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -128, 96, { 0b1111, 0 }, 0 }, { 3, -32, -32, -184, 192, { 0b1111, 0 }, 0 }, { 4, 0, -32, -216, 56, { 0b1111, 0 }, 0 }, { 5, 32, -32, -232, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, -32, -248, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedDown[] = { { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, { 1, -32, 0, -184, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -128, 96, { 0b1111, 0 }, 0 }, { 3, -32, 32, -184, 192, { 0b1111, 0 }, 0 }, { 4, 0, 32, -216, 56, { 0b1111, 0 }, 0 }, { 5, 32, 32, -232, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, 32, -248, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, -32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, -32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, -32, 248, 32, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedUp[] = { { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 40, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 56, { 0b1111, 0 }, 0 }, { 3, -96, 0, 64, 192, { 0b1111, 0 }, 0 }, { 4, -128, 32, 120, 96, { 0b1111, 0 }, 0 }, { 5, -96, 32, 64, 192, { 0b1111, 0 }, 0 }, { 6, -64, 32, 248, 32, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown[] = { { 0, 0, 0, -32, 40, { 0b1111, 0 }, 0 }, { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 }, { 3, -32, -32, -216, 192, { 0b1111, 0 }, 0 }, { 4, 0, -32, -248, 56, { 0b1111, 0 }, 0 }, { 5, 32, -32, -264, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, -32, -280, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedDown[] = { { 0, 0, 0, -32, 40, { 0b1111, 0 }, 0 }, { 1, -32, 0, -216, 192, { 0b1111, 0 }, 0 }, { 2, -64, 0, -160, 96, { 0b1111, 0 }, 0 }, { 3, -32, 32, -216, 192, { 0b1111, 0 }, 0 }, { 4, 0, 32, -248, 56, { 0b1111, 0 }, 0 }, { 5, 32, 32, -264, 40, { 0b1111, 0b1100 }, 0 }, { 6, 64, 32, -280, 24, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlyerHalfLoopUpInverted[] = { { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, { 1, -32, 0, 16, 16, { 0b1111, 0b1100 }, 0 }, { 2, -64, 0, 32, 96,{ 0b0011, 0 }, 0 }, { 3, -32, 0, 120, 32, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksFlyerHalfLoopDownUpright[] = { { 0, 0, 0, -32, 32, { 0b1111, 0 }, 0 }, { 1, -32, 0, -120, 96,{ 0b0011, 0 }, 0 }, { 2, 0, 0, -136, 16, { 0b1111, 0b1100 }, 0 }, { 3, 32, 0, -152, 16, { 0b1111, 0b1100 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftEighthToDiagUp25[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 16, 32, { 0b1111, 0 }, 0 }, { 2, -32, -32, 32, 16, { 0b1000, 0 }, 0 }, { 3, -64, 0, 32, 16, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, -32, 32, 24, { 0b0001, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightEighthToDiagUp25[] = { { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, 16, 32, { 0b1111, 0 }, 0 }, { 2, -32, 32, 32, 16, { 0b0100, 0 }, 0 }, { 3, -64, 0, 32, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, 32, 32, 24, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftEighthToDiagDown25[] = { { 0, 0, 0, -16, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 }, { 2, -32, -32, -48, 16, { 0b1000, 0 }, 0 }, { 3, -64, 0, -48, 16, { 0b0010, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, -32, -48, 16, { 0b0001, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightEighthToDiagDown25[] = { { 0, 0, 0, -16, 16, { 0b1111, 0 }, 0 }, { 1, -32, 0, -32, 16, { 0b1111, 0 }, 0 }, { 2, -32, 32, -48, 16, { 0b0100, 0 }, 0 }, { 3, -64, 0, -48, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 4, -64, 32, -48, 16, { 0b0010, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftEighthToOrthogonalUp25[] = { { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 }, { 1, -32, 0, 0, 16, { 0b0001, 0 }, 0 }, { 2, 0, 32, 0, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 16, 16, { 0b1111, 0 }, 0 }, { 4, -64, 32, 32, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightEighthToOrthogonalUp25[] = { { 0, 0, 0, 0, 16, { 0b1101, 0 }, 0 }, { 1, 0, 32, 0, 16, { 0b0100, 0 }, 0 }, { 2, -32, 0, 0, 16, { 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, 16, 16, { 0b1111, 0 }, 0 }, { 4, -32, 64, 32, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksLeftEighthToOrthogonalDown25[] = { { 0, 0, 0, -16, 24, { 0b1101, 0 }, 0 }, { 1, -32, 0, -16, 16, { 0b0001, 0 }, 0 }, { 2, 0, 32, -16, 16, { 0b0100, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, -32, 32, { 0b1111, 0 }, 0 }, { 4, -64, 32, -48, 16, { 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; static constexpr PreviewTrack TrackBlocksRightEighthToOrthogonalDown25[] = { { 0, 0, 0, -16, 24, { 0b1101, 0 }, 0 }, { 1, 0, 32, -16, 16,{ 0b0100, 0 }, 0 }, { 2, -32, 0, -16, 16,{ 0b0001, 0 }, RCT_PREVIEW_TRACK_FLAG_0 }, { 3, -32, 32, -32, 32,{ 0b1111, 0 }, 0 }, { 4, -32, 64, -48, 16,{ 0b1111, 0 }, 0 }, TRACK_BLOCK_END }; // rct2: 0x00994638 static constexpr std::array TrackBlocks = { TrackBlocks000, TrackBlocks001, TrackBlocks002, TrackBlocks003, TrackBlocks004, TrackBlocks005, TrackBlocks006, TrackBlocks007, TrackBlocks008, TrackBlocks009, TrackBlocks010, TrackBlocks011, TrackBlocks012, TrackBlocks013, TrackBlocks014, TrackBlocks015, TrackBlocks016, TrackBlocks017, TrackBlocks018, TrackBlocks019, TrackBlocks020, TrackBlocks021, TrackBlocks022, TrackBlocks023, TrackBlocks024, TrackBlocks025, TrackBlocks026, TrackBlocks027, TrackBlocks028, TrackBlocks029, TrackBlocks030, TrackBlocks031, TrackBlocks032, TrackBlocks033, TrackBlocks034, TrackBlocks035, TrackBlocks036, TrackBlocks037, TrackBlocks038, TrackBlocks039, TrackBlocks040, TrackBlocks041, TrackBlocks042, TrackBlocks043, TrackBlocks044, TrackBlocks045, TrackBlocks046, TrackBlocks047, TrackBlocks048, TrackBlocks049, TrackBlocks050, TrackBlocks051, TrackBlocks052, TrackBlocks053, TrackBlocks054, TrackBlocks055, TrackBlocks056, TrackBlocks057, TrackBlocks058, TrackBlocks059, TrackBlocks060, TrackBlocks061, TrackBlocks062, TrackBlocks063, TrackBlocks064, TrackBlocks065, TrackBlocks066, TrackBlocks067, TrackBlocks068, TrackBlocks069, TrackBlocks070, TrackBlocks071, TrackBlocks072, TrackBlocks073, TrackBlocks074, TrackBlocks075, TrackBlocks076, TrackBlocks077, TrackBlocks078, TrackBlocks079, TrackBlocks080, TrackBlocks081, TrackBlocks082, TrackBlocks083, TrackBlocks084, TrackBlocks085, TrackBlocks086, TrackBlocks087, TrackBlocks088, TrackBlocks089, TrackBlocks090, TrackBlocks091, TrackBlocks092, TrackBlocks093, TrackBlocks094, TrackBlocks095, TrackBlocks096, TrackBlocks097, TrackBlocks098, TrackBlocks099, TrackBlocks100, TrackBlocks101, TrackBlocks102, TrackBlocks103, TrackBlocks104, TrackBlocks105, TrackBlocks106, TrackBlocks107, TrackBlocks108, TrackBlocks109, TrackBlocks110, TrackBlocks111, TrackBlocks112, TrackBlocks113, TrackBlocks114, TrackBlocks115, TrackBlocks116, TrackBlocks117, TrackBlocks118, TrackBlocks119, TrackBlocks120, TrackBlocks121, TrackBlocks122, TrackBlocks123, TrackBlocks124, TrackBlocks125, TrackBlocks126, TrackBlocks127, TrackBlocks128, TrackBlocks129, TrackBlocks130, TrackBlocks131, TrackBlocks132, TrackBlocks133, TrackBlocks134, TrackBlocks135, TrackBlocks136, TrackBlocks137, TrackBlocks138, TrackBlocks139, TrackBlocks140, TrackBlocks141, TrackBlocks142, TrackBlocks143, TrackBlocks144, TrackBlocks145, TrackBlocks146, TrackBlocks147, TrackBlocks148, TrackBlocks149, TrackBlocks150, TrackBlocks151, TrackBlocks152, TrackBlocks153, TrackBlocks154, TrackBlocks155, TrackBlocks156, TrackBlocks157, TrackBlocks158, TrackBlocks159, TrackBlocks160, TrackBlocks161, TrackBlocks162, TrackBlocks163, TrackBlocks164, TrackBlocks165, TrackBlocks166, TrackBlocks167, TrackBlocks168, TrackBlocks169, TrackBlocks170, TrackBlocks171, TrackBlocks172, TrackBlocks173, TrackBlocks174, TrackBlocks175, TrackBlocks176, TrackBlocks177, TrackBlocks178, TrackBlocks179, TrackBlocks180, TrackBlocks181, TrackBlocks182, TrackBlocks183, TrackBlocks184, TrackBlocks185, TrackBlocks186, TrackBlocks187, TrackBlocks188, TrackBlocks189, TrackBlocks190, TrackBlocks191, TrackBlocks192, TrackBlocks193, TrackBlocks194, TrackBlocks195, TrackBlocks196, TrackBlocks197, TrackBlocks198, TrackBlocks199, TrackBlocks200, TrackBlocks201, TrackBlocks202, TrackBlocks203, TrackBlocks204, TrackBlocks205, TrackBlocks206, TrackBlocks207, TrackBlocks208, TrackBlocks209, TrackBlocks210, TrackBlocks211, TrackBlocks212, TrackBlocks213, TrackBlocks214, TrackBlocks215, TrackBlocks216, TrackBlocks217, TrackBlocks218, TrackBlocks219, TrackBlocks220, TrackBlocks221, TrackBlocks222, TrackBlocks223, TrackBlocks224, TrackBlocks225, TrackBlocks226, TrackBlocks227, TrackBlocks228, TrackBlocks229, TrackBlocks230, TrackBlocks231, TrackBlocks232, TrackBlocks233, TrackBlocks234, TrackBlocks235, TrackBlocks236, TrackBlocks237, TrackBlocks238, TrackBlocks239, TrackBlocks240, TrackBlocks241, TrackBlocks242, TrackBlocks243, TrackBlocks244, TrackBlocks245, TrackBlocks246, TrackBlocks247, TrackBlocks248, TrackBlocks249, TrackBlocks250, TrackBlocks251, TrackBlocks252, TrackBlocks253, TrackBlocks254, TrackBlocks255, TrackBlocksRotationControlToggle, TrackBlocksFlatTrack1x4A, TrackBlocksFlatTrack2x2, TrackBlocksFlatTrack4x4, TrackBlocksFlatTrack2x4, TrackBlocksFlatTrack1x5, TrackBlocksFlatTrack1x1A, TrackBlocksFlatTrack1x4B, TrackBlocksFlatTrack1x1B, TrackBlocksFlatTrack1x4C, TrackBlocksFlatTrack3x3, TrackBlocksLeftLargeCorkscrewUp, TrackBlocksRightLargeCorkscrewUp, TrackBlocksLeftLargeCorkscrewDown, TrackBlocksRightLargeCorkscrewDown, TrackBlocksLeftMediumHalfLoopUp, TrackBlocksRightMediumHalfLoopUp, TrackBlocksLeftMediumHalfLoopDown, TrackBlocksRightMediumHalfLoopDown, TrackBlocksLeftZeroGRollUp, TrackBlocksRightZeroGRollUp, TrackBlocksLeftZeroGRollDown, TrackBlocksRightZeroGRollDown, TrackBlocksLeftLargeZeroGRollUp, TrackBlocksRightLargeZeroGRollUp, TrackBlocksLeftLargeZeroGRollDown, TrackBlocksRightLargeZeroGRollDown, TrackBlocksLeftFlyerLargeHalfLoopUninvertedUp, // LeftFlyerLargeHalfLoopUninvertedUp TrackBlocksRightFlyerLargeHalfLoopUninvertedUp, // RightFlyerLargeHalfLoopUninvertedUp TrackBlocksLeftFlyerLargeHalfLoopInvertedDown, // LeftFlyerLargeHalfLoopInvertedDown TrackBlocksRightFlyerLargeHalfLoopInvertedDown, // RightFlyerLargeHalfLoopInvertedDown TrackBlocksLeftFlyerLargeHalfLoopInvertedUp, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp TrackBlocksRightFlyerLargeHalfLoopInvertedUp, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown TrackBlocksRightFlyerLargeHalfLoopUninvertedDown, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown TrackBlocksFlyerHalfLoopUpInverted, // TrackElemType::FlyerHalfLoopInvertedUp TrackBlocksFlyerHalfLoopDownUpright, // TrackElemType::FlyerHalfLoopUninvertedDown TrackBlocksLeftEighthToDiagUp25, // TrackElemType::LeftEighthToDiagUp25 TrackBlocksRightEighthToDiagUp25, // TrackElemType::RightEighthToDiagUp25 TrackBlocksLeftEighthToDiagDown25, // TrackElemType::LeftEighthToDiagDown25 TrackBlocksRightEighthToDiagDown25, // TrackElemType::RightEighthToDiagDown25 TrackBlocksLeftEighthToOrthogonalUp25, // TrackElemType::LeftEighthToOrthogonalUp25 TrackBlocksRightEighthToOrthogonalUp25, // TrackElemType::RightEighthToOrthogonalUp25 TrackBlocksLeftEighthToOrthogonalDown25, // TrackElemType::LeftEighthToOrthogonalDown25 TrackBlocksRightEighthToOrthogonalDown25, // TrackElemType::RightEighthToOrthogonalDown25 TrackBlocks142, // TrackElemType::DiagUp25ToLeftBankedUp25 TrackBlocks142, // TrackElemType::DiagUp25ToRightBankedUp25 TrackBlocks142, // TrackElemType::DiagLeftBankedUp25ToUp25 TrackBlocks142, // TrackElemType::DiagRightBankedUp25ToUp25 TrackBlocks148, // TrackElemType::DiagDown25ToLeftBankedDown25 TrackBlocks148, // TrackElemType::DiagDown25ToRightBankedDown25 TrackBlocks148, // TrackElemType::DiagLeftBankedDown25ToDown25 TrackBlocks148, // TrackElemType::DiagRightBankedDown25ToDown25 TrackBlocks144, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 TrackBlocks144, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 TrackBlocks147, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat TrackBlocks147, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat TrackBlocks150, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 TrackBlocks150, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 TrackBlocks153, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat TrackBlocks153, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat TrackBlocks144, // TrackElemType::DiagFlatToLeftBankedUp25 TrackBlocks144, // TrackElemType::DiagFlatToRightBankedUp25 TrackBlocks147, // TrackElemType::DiagLeftBankedUp25ToFlat TrackBlocks147, // TrackElemType::DiagRightBankedUp25ToFlat TrackBlocks150, // TrackElemType::DiagFlatToLeftBankedDown25 TrackBlocks150, // TrackElemType::DiagFlatToRightBankedDown25 TrackBlocks153, // TrackElemType::DiagLeftBankedDown25ToFlat TrackBlocks153, // TrackElemType::DiagRightBankedDown25ToFlat TrackBlocks142, // TrackElemType::DiagUp25LeftBanked TrackBlocks142, // TrackElemType::DiagUp25RightBanked TrackBlocks148, // TrackElemType::DiagDown25LeftBanked TrackBlocks148, // TrackElemType::DiagDown25RightBanked TrackBlocksLeftEighthToDiagUp25, // TrackElemType::LeftEighthBankToDiagUp25 TrackBlocksRightEighthToDiagUp25, // TrackElemType::RightEighthBankToDiagUp25 TrackBlocksLeftEighthToDiagDown25, // TrackElemType::LeftEighthBankToDiagDown25 TrackBlocksRightEighthToDiagDown25, // TrackElemType::RightEighthBankToDiagDown25 TrackBlocksLeftEighthToOrthogonalUp25, // TrackElemType::LeftEighthBankToOrthogonalUp25 TrackBlocksRightEighthToOrthogonalUp25, // TrackElemType::RightEighthBankToOrthogonalUp25 TrackBlocksLeftEighthToOrthogonalDown25, // TrackElemType::LeftEighthBankToOrthogonalDown25 TrackBlocksRightEighthToOrthogonalDown25, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static constexpr uint8_t TrackPieceLengths[] = { 32, // TrackElemType::Flat 32, // TrackElemType::EndStation 32, // TrackElemType::BeginStation 32, // TrackElemType::MiddleStation 33, // TrackElemType::Up25 40, // TrackElemType::Up60 32, // TrackElemType::FlatToUp25 34, // TrackElemType::Up25ToUp60 34, // TrackElemType::Up60ToUp25 32, // TrackElemType::Up25ToFlat 33, // TrackElemType::Down25 40, // TrackElemType::Down60 32, // TrackElemType::FlatToDown25 34, // TrackElemType::Down25ToDown60 34, // TrackElemType::Down60ToDown25 32, // TrackElemType::Down25ToFlat 124, // TrackElemType::LeftQuarterTurn5Tiles 124, // TrackElemType::RightQuarterTurn5Tiles 32, // TrackElemType::FlatToLeftBank 32, // TrackElemType::FlatToRightBank 32, // TrackElemType::LeftBankToFlat 32, // TrackElemType::RightBankToFlat 124, // TrackElemType::BankedLeftQuarterTurn5Tiles 124, // TrackElemType::BankedRightQuarterTurn5Tiles 32, // TrackElemType::LeftBankToUp25 32, // TrackElemType::RightBankToUp25 32, // TrackElemType::Up25ToLeftBank 32, // TrackElemType::Up25ToRightBank 32, // TrackElemType::LeftBankToDown25 32, // TrackElemType::RightBankToDown25 32, // TrackElemType::Down25ToLeftBank 32, // TrackElemType::Down25ToRightBank 32, // TrackElemType::LeftBank 32, // TrackElemType::RightBank 130, // TrackElemType::LeftQuarterTurn5TilesUp25 130, // TrackElemType::RightQuarterTurn5TilesUp25 130, // TrackElemType::LeftQuarterTurn5TilesDown25 130, // TrackElemType::RightQuarterTurn5TilesDown25 96, // TrackElemType::SBendLeft 96, // TrackElemType::SBendRight 120, // TrackElemType::LeftVerticalLoop 120, // TrackElemType::RightVerticalLoop 75, // TrackElemType::LeftQuarterTurn3Tiles 75, // TrackElemType::RightQuarterTurn3Tiles 75, // TrackElemType::LeftBankedQuarterTurn3Tiles 75, // TrackElemType::RightBankedQuarterTurn3Tiles 77, // TrackElemType::LeftQuarterTurn3TilesUp25 77, // TrackElemType::RightQuarterTurn3TilesUp25 77, // TrackElemType::LeftQuarterTurn3TilesDown25 77, // TrackElemType::RightQuarterTurn3TilesDown25 24, // TrackElemType::LeftQuarterTurn1Tile 24, // TrackElemType::RightQuarterTurn1Tile 96, // TrackElemType::LeftTwistDownToUp 96, // TrackElemType::RightTwistDownToUp 96, // TrackElemType::LeftTwistUpToDown 96, // TrackElemType::RightTwistUpToDown 60, // TrackElemType::HalfLoopUp 60, // TrackElemType::HalfLoopDown 55, // TrackElemType::LeftCorkscrewUp 55, // TrackElemType::RightCorkscrewUp 55, // TrackElemType::LeftCorkscrewDown 55, // TrackElemType::RightCorkscrewDown 36, // TrackElemType::FlatToUp60 36, // TrackElemType::Up60ToFlat 36, // TrackElemType::FlatToDown60 36, // TrackElemType::Down60ToFlat 32, // TrackElemType::TowerBase 32, // TrackElemType::TowerSection 32, // TrackElemType::FlatCovered 33, // TrackElemType::Up25Covered 40, // TrackElemType::Up60Covered 32, // TrackElemType::FlatToUp25Covered 34, // TrackElemType::Up25ToUp60Covered 34, // TrackElemType::Up60ToUp25Covered 32, // TrackElemType::Up25ToFlatCovered 33, // TrackElemType::Down25Covered 40, // TrackElemType::Down60Covered 32, // TrackElemType::FlatToDown25Covered 34, // TrackElemType::Down25ToDown60Covered 34, // TrackElemType::Down60ToDown25Covered 32, // TrackElemType::Down25ToFlatCovered 124, // TrackElemType::LeftQuarterTurn5TilesCovered 124, // TrackElemType::RightQuarterTurn5TilesCovered 96, // TrackElemType::SBendLeftCovered 96, // TrackElemType::SBendRightCovered 75, // TrackElemType::LeftQuarterTurn3TilesCovered 75, // TrackElemType::RightQuarterTurn3TilesCovered 150, // TrackElemType::LeftHalfBankedHelixUpSmall 150, // TrackElemType::RightHalfBankedHelixUpSmall 150, // TrackElemType::LeftHalfBankedHelixDownSmall 150, // TrackElemType::RightHalfBankedHelixDownSmall 248, // TrackElemType::LeftHalfBankedHelixUpLarge 248, // TrackElemType::RightHalfBankedHelixUpLarge 248, // TrackElemType::LeftHalfBankedHelixDownLarge 248, // TrackElemType::RightHalfBankedHelixDownLarge 64, // TrackElemType::LeftQuarterTurn1TileUp60 64, // TrackElemType::RightQuarterTurn1TileUp60 64, // TrackElemType::LeftQuarterTurn1TileDown60 64, // TrackElemType::RightQuarterTurn1TileDown60 32, // TrackElemType::Brakes 32, // TrackElemType::Booster 32, // TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze 124, // TrackElemType::LeftQuarterBankedHelixLargeUp 124, // TrackElemType::RightQuarterBankedHelixLargeUp 124, // TrackElemType::LeftQuarterBankedHelixLargeDown 124, // TrackElemType::RightQuarterBankedHelixLargeDown 124, // TrackElemType::LeftQuarterHelixLargeUp 124, // TrackElemType::RightQuarterHelixLargeUp 124, // TrackElemType::LeftQuarterHelixLargeDown 124, // TrackElemType::RightQuarterHelixLargeDown 33, // TrackElemType::Up25LeftBanked 33, // TrackElemType::Up25RightBanked 32, // TrackElemType::Waterfall 32, // TrackElemType::Rapids 32, // TrackElemType::OnRidePhoto 33, // TrackElemType::Down25LeftBanked 33, // TrackElemType::Down25RightBanked 128, // TrackElemType::Watersplash 165, // TrackElemType::FlatToUp60LongBase 165, // TrackElemType::Up60ToFlatLongBase 32, // TrackElemType::Whirlpool 165, // TrackElemType::Down60ToFlatLongBase 165, // TrackElemType::FlatToDown60LongBase 138, // TrackElemType::CableLiftHill 32, // TrackElemType::ReverseFreefallSlope 32, // TrackElemType::ReverseFreefallVertical 32, // TrackElemType::Up90 32, // TrackElemType::Down90 32, // TrackElemType::Up60ToUp90 32, // TrackElemType::Down90ToDown60 32, // TrackElemType::Up90ToUp60 32, // TrackElemType::Down60ToDown90 32, // TrackElemType::BrakeForDrop 87, // TrackElemType::LeftEighthToDiag 87, // TrackElemType::RightEighthToDiag 87, // TrackElemType::LeftEighthToOrthogonal 87, // TrackElemType::RightEighthToOrthogonal 87, // TrackElemType::LeftEighthBankToDiag 87, // TrackElemType::RightEighthBankToDiag 87, // TrackElemType::LeftEighthBankToOrthogonal 87, // TrackElemType::RightEighthBankToOrthogonal 45, // TrackElemType::DiagFlat 45, // TrackElemType::DiagUp25 45, // TrackElemType::DiagUp60 45, // TrackElemType::DiagFlatToUp25 45, // TrackElemType::DiagUp25ToUp60 45, // TrackElemType::DiagUp60ToUp25 45, // TrackElemType::DiagUp25ToFlat 45, // TrackElemType::DiagDown25 45, // TrackElemType::DiagDown60 45, // TrackElemType::DiagFlatToDown25 45, // TrackElemType::DiagDown25ToDown60 45, // TrackElemType::DiagDown60ToDown25 45, // TrackElemType::DiagDown25ToFlat 45, // TrackElemType::DiagFlatToUp60 45, // TrackElemType::DiagUp60ToFlat 45, // TrackElemType::DiagFlatToDown60 45, // TrackElemType::DiagDown60ToFlat 45, // TrackElemType::DiagFlatToLeftBank 45, // TrackElemType::DiagFlatToRightBank 45, // TrackElemType::DiagLeftBankToFlat 45, // TrackElemType::DiagRightBankToFlat 45, // TrackElemType::DiagLeftBankToUp25 45, // TrackElemType::DiagRightBankToUp25 45, // TrackElemType::DiagUp25ToLeftBank 45, // TrackElemType::DiagUp25ToRightBank 45, // TrackElemType::DiagLeftBankToDown25 45, // TrackElemType::DiagRightBankToDown25 45, // TrackElemType::DiagDown25ToLeftBank 45, // TrackElemType::DiagDown25ToRightBank 45, // TrackElemType::DiagLeftBank 45, // TrackElemType::DiagRightBank 16, // TrackElemType::LogFlumeReverser 32, // TrackElemType::SpinningTunnel 96, // TrackElemType::LeftBarrelRollUpToDown 96, // TrackElemType::RightBarrelRollUpToDown 96, // TrackElemType::LeftBarrelRollDownToUp 96, // TrackElemType::RightBarrelRollDownToUp 64, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 64, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25 64, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank 64, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank 32, // TrackElemType::PoweredLift 100, // TrackElemType::LeftLargeHalfLoopUp 100, // TrackElemType::RightLargeHalfLoopUp 100, // TrackElemType::LeftLargeHalfLoopDown 100, // TrackElemType::RightLargeHalfLoopDown 96, // TrackElemType::LeftFlyerTwistUp 96, // TrackElemType::RightFlyerTwistUp 96, // TrackElemType::LeftFlyerTwistDown 96, // TrackElemType::RightFlyerTwistDown 64, // TrackElemType::FlyerHalfLoopUninvertedUp 64, // TrackElemType::FlyerHalfLoopInvertedDown 64, // TrackElemType::LeftFlyerCorkscrewUp 64, // TrackElemType::RightFlyerCorkscrewUp 64, // TrackElemType::LeftFlyerCorkscrewDown 64, // TrackElemType::RightFlyerCorkscrewDown 16, // TrackElemType::HeartLineTransferUp 16, // TrackElemType::HeartLineTransferDown 64, // TrackElemType::LeftHeartLineRoll 64, // TrackElemType::RightHeartLineRoll 32, // TrackElemType::MinigolfHoleA 32, // TrackElemType::MinigolfHoleB 32, // TrackElemType::MinigolfHoleC 32, // TrackElemType::MinigolfHoleD 32, // TrackElemType::MinigolfHoleE 80, // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop 80, // TrackElemType::Up90ToInvertedFlatQuarterLoop 80, // TrackElemType::InvertedFlatToDown90QuarterLoop 64, // TrackElemType::LeftCurvedLiftHill 64, // TrackElemType::RightCurvedLiftHill 32, // TrackElemType::LeftReverser 32, // TrackElemType::RightReverser 32, // TrackElemType::AirThrustTopCap 32, // TrackElemType::AirThrustVerticalDown 32, // TrackElemType::AirThrustVerticalDownToLevel 32, // TrackElemType::BlockBrakes 32, // TrackElemType::LeftBankedQuarterTurn3TileUp25 32, // TrackElemType::RightBankedQuarterTurn3TileUp25 32, // TrackElemType::LeftBankedQuarterTurn3TileDown25 32, // TrackElemType::RightBankedQuarterTurn3TileDown25 32, // TrackElemType::LeftBankedQuarterTurn5TileUp25 32, // TrackElemType::RightBankedQuarterTurn5TileUp25 32, // TrackElemType::LeftBankedQuarterTurn5TileDown25 32, // TrackElemType::RightBankedQuarterTurn5TileDown25 32, // TrackElemType::Up25ToLeftBankedUp25 32, // TrackElemType::Up25ToRightBankedUp25 32, // TrackElemType::LeftBankedUp25ToUp25 32, // TrackElemType::RightBankedUp25ToUp25 32, // TrackElemType::Down25ToLeftBankedDown25 32, // TrackElemType::Down25ToRightBankedDown25 32, // TrackElemType::LeftBankedDown25ToDown25 32, // TrackElemType::RightBankedDown25ToDown25 32, // TrackElemType::LeftBankedFlatToLeftBankedUp25 32, // TrackElemType::RightBankedFlatToRightBankedUp25 32, // TrackElemType::LeftBankedUp25ToLeftBankedFlat 32, // TrackElemType::RightBankedUp25ToRightBankedFlat 32, // TrackElemType::LeftBankedFlatToLeftBankedDown25 32, // TrackElemType::RightBankedFlatToRightBankedDown25 32, // TrackElemType::LeftBankedDown25ToLeftBankedFlat 32, // TrackElemType::RightBankedDown25ToRightBankedFlat 32, // TrackElemType::FlatToLeftBankedUp25 32, // TrackElemType::FlatToRightBankedUp25 32, // TrackElemType::LeftBankedUp25ToFlat 32, // TrackElemType::RightBankedUp25ToFlat 32, // TrackElemType::FlatToLeftBankedDown25 32, // TrackElemType::FlatToRightBankedDown25 32, // TrackElemType::LeftBankedDown25ToFlat 32, // TrackElemType::RightBankedDown25ToFlat 32, // TrackElemType::LeftQuarterTurn1TileUp90 32, // TrackElemType::RightQuarterTurn1TileUp90 32, // TrackElemType::LeftQuarterTurn1TileDown90 32, // TrackElemType::RightQuarterTurn1TileDown90 80, // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop 80, // TrackElemType::MultiDimFlatToDown90QuarterLoop 80, // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop 32, // TrackElemType::RotationControlToggle 0, // TrackElemType::FlatTrack1x4A 0, // TrackElemType::FlatTrack2x2 0, // TrackElemType::FlatTrack4x4 0, // TrackElemType::FlatTrack2x4 0, // TrackElemType::FlatTrack1x5 0, // TrackElemType::FlatTrack1x1A 0, // TrackElemType::FlatTrack1x4B 0, // TrackElemType::FlatTrack1x1B 0, // TrackElemType::FlatTrack1x4C 0, // TrackElemType::FlatTrack3x3 96, // TrackElemType::LeftCorkscrewUp 96, // TrackElemType::RightCorkscrewUp 96, // TrackElemType::LeftCorkscrewDown 96, // TrackElemType::RightCorkscrewDown 80, // TrackElemType::LeftMediumHalfLoopUp 80, // TrackElemType::RightMediumHalfLoopUp 80, // TrackElemType::LeftMediumHalfLoopDown 80, // TrackElemType::RightMediumHalfLoopDown 96, // TrackElemType::LeftZeroGRollUp 96, // TrackElemType::RightZeroGRollUp 96, // TrackElemType::LeftZeroGRollDown 96, // TrackElemType::RightZeroGRollDown 165, // TrackElemType::LeftLargeZeroGRollUp 165, // TrackElemType::RightLargeZeroGRollUp 165, // TrackElemType::LeftLargeZeroGRollDown 165, // TrackElemType::RightLargeZeroGRollDown 100, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp 100, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp 100, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown 100, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown 100, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp 100, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp 100, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown 100, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown 64, // TrackElemType::FlyerHalfLoopInvertedUp 64, // TrackElemType::FlyerHalfLoopUninvertedDown 64, // TrackElemType::LeftEighthToDiagUp25 64, // TrackElemType::RightEighthToDiagUp25 64, // TrackElemType::LeftEighthToDiagDown25 64, // TrackElemType::RightEighthToDiagDown25 64, // TrackElemType::LeftEighthToOrthogonalUp25 64, // TrackElemType::RightEighthToOrthogonalUp25 64, // TrackElemType::LeftEighthToOrthogonalDown25 64, // TrackElemType::RightEighthToOrthogonalDown25 64, // TrackElemType::DiagUp25ToLeftBankedUp25 64, // TrackElemType::DiagUp25ToRightBankedUp25 64, // TrackElemType::DiagLeftBankedUp25ToUp25 64, // TrackElemType::DiagRightBankedUp25ToUp25 64, // TrackElemType::DiagDown25ToLeftBankedDown25 64, // TrackElemType::DiagDown25ToRightBankedDown25 64, // TrackElemType::DiagLeftBankedDown25ToDown25 64, // TrackElemType::DiagRightBankedDown25ToDown25 64, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 64, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 64, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat 64, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat 64, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 64, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 64, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat 64, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat 64, // TrackElemType::DiagFlatToLeftBankedUp25 64, // TrackElemType::DiagFlatToRightBankedUp25 64, // TrackElemType::DiagLeftBankedUp25ToFlat 64, // TrackElemType::DiagRightBankedUp25ToFlat 64, // TrackElemType::DiagFlatToLeftBankedDown25 64, // TrackElemType::DiagFlatToRightBankedDown25 64, // TrackElemType::DiagLeftBankedDown25ToFlat 64, // TrackElemType::DiagRightBankedDown25ToFlat 64, // TrackElemType::DiagUp25LeftBanked 64, // TrackElemType::DiagUp25RightBanked 64, // TrackElemType::DiagDown25LeftBanked 64, // TrackElemType::DiagDown25RightBanked 64, // TrackElemType::LeftEighthBankToDiagUp25 64, // TrackElemType::RightEighthBankToDiagUp25 64, // TrackElemType::LeftEighthBankToDiagDown25 64, // TrackElemType::RightEighthBankToDiagDown25 64, // TrackElemType::LeftEighthBankToOrthogonalUp25 64, // TrackElemType::RightEighthBankToOrthogonalUp25 64, // TrackElemType::LeftEighthBankToOrthogonalDown25 64, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackPieceLengths) == TrackElemType::Count); // rct2: 0x00998C95 static constexpr TrackCurveChain gTrackCurveChain[] = { { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_VERY_SMALL, TRACK_CURVE_LEFT_VERY_SMALL }, { TRACK_CURVE_RIGHT_VERY_SMALL, TRACK_CURVE_RIGHT_VERY_SMALL }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistUpToDown, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::RightTwistUpToDown, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistDownToUp }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightTwistDownToUp }, { RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopDown, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopUp }, { RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewDown, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewDown, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewUp }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewUp }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownSmall, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownSmall }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpLarge, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpLarge }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpLarge, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpLarge }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownLarge, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownLarge }, { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownLarge, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixDownLarge }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { RideConstructionSpecialPieceSelected | TrackElemType::Brakes, RideConstructionSpecialPieceSelected | TrackElemType::Brakes }, { RideConstructionSpecialPieceSelected | TrackElemType::Booster, RideConstructionSpecialPieceSelected | TrackElemType::Booster }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterBankedHelixLargeDown }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterBankedHelixLargeDown }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeUp, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeUp }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::LeftQuarterHelixLargeDown }, { RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeDown, RideConstructionSpecialPieceSelected | TrackElemType::RightQuarterHelixLargeDown }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { RideConstructionSpecialPieceSelected | TrackElemType::Waterfall, RideConstructionSpecialPieceSelected | TrackElemType::Waterfall }, { RideConstructionSpecialPieceSelected | TrackElemType::Rapids, RideConstructionSpecialPieceSelected | TrackElemType::Rapids }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollDownToUp, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollDownToUp, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollUpToDown }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollUpToDown }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift, RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift }, { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopDown, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopDown, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopUp }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopUp }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::InvertedFlatToDown90QuarterLoop, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::Up90ToInvertedFlatQuarterLoop }, { RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill }, { RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_LEFT }, { TRACK_CURVE_RIGHT, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT, TRACK_CURVE_NONE }, { TRACK_CURVE_RIGHT, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_LEFT }, { TRACK_CURVE_NONE, TRACK_CURVE_RIGHT }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_LEFT_SMALL, TRACK_CURVE_LEFT_SMALL }, { TRACK_CURVE_RIGHT_SMALL, TRACK_CURVE_RIGHT_SMALL }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, { 65535, 65535 }, // TrackElemType::FlatTrack1x4A { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::FlatTrack2x2 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::FlatTrack4x4 { 65535, 65535 }, // TrackElemType::FlatTrack2x4 { 65535, 65535 }, // TrackElemType::FlatTrack1x5 { 65535, 65535 }, // TrackElemType::FlatTrack1x1A { 65535, 65535 }, // TrackElemType::FlatTrack1x4B { 65535, 65535 }, // TrackElemType::FlatTrack1x1B { 65535, 65535 }, // TrackElemType::FlatTrack1x4C { 65535, 65535 }, // TrackElemType::FlatTrack3x3 { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewDown, TRACK_CURVE_NONE }, // TrackElemType::LeftLargeCorkscrewUp { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewDown, TRACK_CURVE_NONE }, // TrackElemType::RightLargeCorkscrewUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewUp }, // TrackElemType::LeftLargeCorkscrewDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewUp }, // TrackElemType::RightCorkscrewDown { RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopDown, TRACK_CURVE_NONE }, // TrackElemType::LeftMediumHalfLoopUp { RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopDown, TRACK_CURVE_NONE }, // TrackElemType::RightMediumHalfLoopUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopUp }, // TrackElemType::LeftMediumHalfLoopDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopUp }, // TrackElemType::RightMediumHalfLoopDown { RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::LeftZeroGRollUp { RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::RightZeroGRollUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollUp }, // TrackElemType::LeftZeroGRollDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollUp }, // TrackElemType::RightZeroGRollDown { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::LeftLargeZeroGRollUp { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollDown, TRACK_CURVE_NONE }, // TrackElemType::RightLargeZeroGRollUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollUp }, // TrackElemType::LeftLargeZeroGRollDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollUp }, // TrackElemType::RightLargeZeroGRollDown { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedDown, TRACK_CURVE_NONE }, // LeftFlyerLargeHalfLoopUninvertedUp { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, TRACK_CURVE_NONE }, // RightFlyerLargeHalfLoopUninvertedUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedUp }, // LeftFlyerLargeHalfLoopInvertedDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp }, // RightFlyerLargeHalfLoopInvertedDown { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, TRACK_CURVE_NONE}, // LeftFlyerLargeHalfLoopInvertedUp { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, TRACK_CURVE_NONE }, // RightFlyerLargeHalfLoopInvertedUp { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedUp }, // LeftFlyerLargeHalfLoopUninvertedDown { TRACK_CURVE_NONE, RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedUp }, // RightFlyerLargeHalfLoopUninvertedDown { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // FlyerHalfLoopInvertedUp { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // FlyerHalfLoopUninvertedUp { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToDiagUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToDiagUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToDiagDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToDiagDown25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToOrthogonalUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToOrthogonalUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthToOrthogonalDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthToOrthogonalDown25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagUp25ToLeftBankedUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagUp25ToRightBankedUp25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedUp25ToUp25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedUp25ToUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagDown25ToLeftBankedDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagDown25ToRightBankedDown25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedDown25ToDown25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedDown25ToDown25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagFlatToLeftBankedUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagFlatToRightBankedUp25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedUp25ToFlat { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedUp25ToFlat { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagFlatToLeftBankedDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagFlatToRightBankedDown25 { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagLeftBankedDown25ToFlat { TRACK_CURVE_NONE, TRACK_CURVE_NONE }, // TrackElemType::DiagRightBankedDown25ToFlat { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagUp25LeftBanked { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagUp25RightBanked { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::DiagDown25LeftBanked { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::DiagDown25RightBanked { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToDiagUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToDiagUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToDiagDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToDiagDown25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToOrthogonalUp25 { TRACK_CURVE_LEFT_LARGE, TRACK_CURVE_LEFT_LARGE }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { TRACK_CURVE_RIGHT_LARGE, TRACK_CURVE_RIGHT_LARGE }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(gTrackCurveChain) == TrackElemType::Count); const TrackDescriptor gTrackDescriptors[186] = { { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown60 }, { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown60ToDown25 }, { true, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown60ToFlat }, { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagDown25ToDown60 }, { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagDown25 }, { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBank }, { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagDown25ToFlat }, { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBank }, { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonal }, { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToDown25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBank }, { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToFlat }, { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankToUp25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonal }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown60 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToDown25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBank }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagFlat }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBank }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagFlatToUp60 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonal }, { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToDown25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankToFlat }, { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBank }, { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankToUp25 }, { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonal }, { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBank }, { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp25ToFlat }, { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBank }, { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp25 }, { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp25ToUp60 }, { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagUp60ToFlat }, { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagUp60ToUp25 }, { true, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::DiagUp60 }, { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown90 }, { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down90 }, { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down90ToDown60 }, { false, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown90 }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileDown60 }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_90, TRACK_BANK_NONE, TrackElemType::Down60ToDown90 }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down60 }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down60ToDown25 }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down60ToFlat }, { false, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileDown60 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25LeftBanked }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedDown25ToFlat }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::Down25ToDown60 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBankedDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::Down25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBankedDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Down25ToLeftBank }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Down25ToFlat }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Down25ToRightBank }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::Down25RightBanked }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedDown25ToFlat }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedDown25ToRightBankedFlat }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileDown25 }, { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::BankedLeftQuarterTurn5Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiag }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftBankToDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBank }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankToFlat }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankToUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiag }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_60, TRACK_BANK_NONE, TrackElemType::FlatToDown60 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::FlatToDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBank }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Flat }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_LEFT_VERY_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1Tile }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_VERY_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1Tile }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBank }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::FlatToLeftBankedUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::FlatToUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::FlatToRightBankedUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::FlatToUp60 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightEighthToDiag }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightBankToDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedDown25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankToFlat }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBank }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedFlatToRightBankedUp25 }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiag }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::BankedRightQuarterTurn5Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3Tiles }, { false, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToFlat }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25LeftBanked }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftBankedUp25ToUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn3TilesUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn5TilesUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBank }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up25ToFlat }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBank }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::Up25ToLeftBankedUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25ToRightBankedUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up25ToUp60 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn5TilesUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn3TilesUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToFlat }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::RightBankedUp25ToRightBankedFlat }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightBankedUp25ToUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::Up25RightBanked }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn5TileUp25 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightBankedQuarterTurn3TileUp25 }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp60 }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::Up60ToFlat }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::Up60ToUp25 }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up60 }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up60ToUp90 }, { false, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp60 }, { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_LEFT_SMALL, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::LeftQuarterTurn1TileUp90 }, { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_NONE, TrackElemType::Up90ToUp60 }, { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::Up90 }, { false, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_SMALL, TRACK_SLOPE_UP_90, TRACK_BANK_NONE, TrackElemType::RightQuarterTurn1TileUp90 }, { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 { false, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat { true, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 { true, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_LEFT, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_RIGHT, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 { true, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_NONE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked { false, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 { false, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 { false, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { true, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_CURVE_LEFT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { true, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_CURVE_RIGHT_LARGE, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TrackElemType::RightEighthBankToOrthogonalDown25 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; /** rct2: 0x00993D1C */ static constexpr track_type_t AlternativeTrackTypes[] = { TrackElemType::FlatCovered, // TrackElemType::Flat TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::Up25Covered, // TrackElemType::Up25 TrackElemType::Up60Covered, // TrackElemType::Up60 TrackElemType::FlatToUp25Covered, // TrackElemType::FlatToUp25 TrackElemType::Up25ToUp60Covered, // TrackElemType::Up25ToUp60 TrackElemType::Up60ToUp25Covered, // TrackElemType::Up60ToUp25 TrackElemType::Up25ToFlatCovered, // TrackElemType::Up25ToFlat TrackElemType::Down25Covered, // TrackElemType::Down25 TrackElemType::Down60Covered, // TrackElemType::Down60 TrackElemType::FlatToDown25Covered, // TrackElemType::FlatToDown25 TrackElemType::Down25ToDown60Covered, // TrackElemType::Down25ToDown60 TrackElemType::Down60ToDown25Covered, // TrackElemType::Down60ToDown25 TrackElemType::Down25ToFlatCovered, // TrackElemType::Down25ToFlat TrackElemType::LeftQuarterTurn5TilesCovered, // TrackElemType::LeftQuarterTurn5Tiles TrackElemType::RightQuarterTurn5TilesCovered, // TrackElemType::RightQuarterTurn5Tiles TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::SBendLeftCovered, // TrackElemType::SBendLeft TrackElemType::SBendRightCovered, // TrackElemType::SBendRight TrackElemType::None, TrackElemType::None, TrackElemType::LeftQuarterTurn3TilesCovered, // TrackElemType::LeftQuarterTurn3Tiles TrackElemType::RightQuarterTurn3TilesCovered, // TrackElemType::RightQuarterTurn3Tiles TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, TrackElemType::None, // TrackElemType::FlatTrack1x4A TrackElemType::None, // TrackElemType::FlatTrack2x2 TrackElemType::None, // TrackElemType::FlatTrack4x4 TrackElemType::None, // TrackElemType::FlatTrack2x4 TrackElemType::None, // TrackElemType::FlatTrack1x5 TrackElemType::None, // TrackElemType::FlatTrack1x1A TrackElemType::None, // TrackElemType::FlatTrack1x4B TrackElemType::None, // TrackElemType::FlatTrack1x1B TrackElemType::None, // TrackElemType::FlatTrack1x4C TrackElemType::None, // TrackElemType::FlatTrack3x3 TrackElemType::None, // TrackElemType::LeftLargeCorkscrewUp TrackElemType::None, // TrackElemType::RightLargeCorkscrewUp TrackElemType::None, // TrackElemType::LeftLargeCorkscrewDown TrackElemType::None, // TrackElemType::RightCorkscrewDown TrackElemType::None, // TrackElemType::LeftMediumHalfLoopUp TrackElemType::None, // TrackElemType::RightMediumHalfLoopUp TrackElemType::None, // TrackElemType::LeftMediumHalfLoopDown TrackElemType::None, // TrackElemType::RightMediumHalfLoopDown TrackElemType::None, // TrackElemType::LeftZeroGRollUp TrackElemType::None, // TrackElemType::RightZeroGRollUp TrackElemType::None, // TrackElemType::LeftZeroGRollDown TrackElemType::None, // TrackElemType::RightZeroGRollDown TrackElemType::None, // TrackElemType::LeftLargeZeroGRollUp TrackElemType::None, // TrackElemType::RightLargeZeroGRollUp TrackElemType::None, // TrackElemType::LeftLargeZeroGRollDown TrackElemType::None, // TrackElemType::RightLargeZeroGRollDown TrackElemType::None, // LeftFlyerLargeHalfLoopUninvertedUp TrackElemType::None, // RightFlyerLargeHalfLoopUninvertedUp TrackElemType::None, // LeftFlyerLargeHalfLoopInvertedDown TrackElemType::None, // RightFlyerLargeHalfLoopInvertedDown TrackElemType::None, // FlyerHalfLoopInvertedUp TrackElemType::None, // FlyerHalfLoopUninvertedDown TrackElemType::None, // TrackElemType::LeftEighthToDiagUp25 TrackElemType::None, // TrackElemType::RightEighthToDiagUp25 TrackElemType::None, // TrackElemType::LeftEighthToDiagDown25 TrackElemType::None, // TrackElemType::RightEighthToDiagDown25 TrackElemType::None, // TrackElemType::LeftEighthToOrthogonalUp25 TrackElemType::None, // TrackElemType::RightEighthToOrthogonalUp25 TrackElemType::None, // TrackElemType::LeftEighthToOrthogonalDown25 TrackElemType::None, // TrackElemType::RightEighthToOrthogonalDown25 TrackElemType::None, // TrackElemType::DiagUp25ToLeftBankedUp25 TrackElemType::None, // TrackElemType::DiagUp25ToRightBankedUp25 TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToUp25 TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToUp25 TrackElemType::None, // TrackElemType::DiagDown25ToLeftBankedDown25 TrackElemType::None, // TrackElemType::DiagDown25ToRightBankedDown25 TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToDown25 TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToDown25 TrackElemType::None, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 TrackElemType::None, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat TrackElemType::None, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 TrackElemType::None, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat TrackElemType::None, // TrackElemType::DiagFlatToLeftBankedUp25 TrackElemType::None, // TrackElemType::DiagFlatToRightBankedUp25 TrackElemType::None, // TrackElemType::DiagLeftBankedUp25ToFlat TrackElemType::None, // TrackElemType::DiagRightBankedUp25ToFlat TrackElemType::None, // TrackElemType::DiagFlatToLeftBankedDown25 TrackElemType::None, // TrackElemType::DiagFlatToRightBankedDown25 TrackElemType::None, // TrackElemType::DiagLeftBankedDown25ToFlat TrackElemType::None, // TrackElemType::DiagRightBankedDown25ToFlat TrackElemType::None, // TrackElemType::DiagUp25LeftBanked TrackElemType::None, // TrackElemType::DiagUp25RightBanked TrackElemType::None, // TrackElemType::DiagDown25LeftBanked TrackElemType::None, // TrackElemType::DiagDown25RightBanked TrackElemType::None, // TrackElemType::LeftEighthBankToDiagUp25 TrackElemType::None, // TrackElemType::RightEighthBankToDiagUp25 TrackElemType::None, // TrackElemType::LeftEighthBankToDiagDown25 TrackElemType::None, // TrackElemType::RightEighthBankToDiagDown25 TrackElemType::None, // TrackElemType::LeftEighthBankToOrthogonalUp25 TrackElemType::None, // TrackElemType::RightEighthBankToOrthogonalUp25 TrackElemType::None, // TrackElemType::LeftEighthBankToOrthogonalDown25 TrackElemType::None, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(AlternativeTrackTypes) == TrackElemType::Count); /** rct2: 0x0099DA34 */ static constexpr money64 TrackPricing[] = { 65536, // TrackElemType::Flat 98304, // TrackElemType::EndStation 98304, // TrackElemType::BeginStation 98304, // TrackElemType::MiddleStation 79872, // TrackElemType::Up25 114688, // TrackElemType::Up60 73728, // TrackElemType::FlatToUp25 96256, // TrackElemType::Up25ToUp60 96256, // TrackElemType::Up60ToUp25 73728, // TrackElemType::Up25ToFlat 79872, // TrackElemType::Down25 114688, // TrackElemType::Down60 73728, // TrackElemType::FlatToDown25 96256, // TrackElemType::Down25ToDown60 96256, // TrackElemType::Down60ToDown25 73728, // TrackElemType::Down25ToFlat 257359, // TrackElemType::LeftQuarterTurn5Tiles 257359, // TrackElemType::RightQuarterTurn5Tiles 69632, // TrackElemType::FlatToLeftBank 69632, // TrackElemType::FlatToRightBank 69632, // TrackElemType::LeftBankToFlat 69632, // TrackElemType::RightBankToFlat 273443, // TrackElemType::BankedLeftQuarterTurn5Tiles 273443, // TrackElemType::BankedRightQuarterTurn5Tiles 78336, // TrackElemType::LeftBankToUp25 78336, // TrackElemType::RightBankToUp25 78336, // TrackElemType::Up25ToLeftBank 78336, // TrackElemType::Up25ToRightBank 78336, // TrackElemType::LeftBankToDown25 78336, // TrackElemType::RightBankToDown25 78336, // TrackElemType::Down25ToLeftBank 78336, // TrackElemType::Down25ToRightBank 69632, // TrackElemType::LeftBank 69632, // TrackElemType::RightBank 313656, // TrackElemType::LeftQuarterTurn5TilesUp25 313656, // TrackElemType::RightQuarterTurn5TilesUp25 313656, // TrackElemType::LeftQuarterTurn5TilesDown25 313656, // TrackElemType::RightQuarterTurn5TilesDown25 229376, // TrackElemType::SBendLeft 229376, // TrackElemType::SBendRight 491520, // TrackElemType::LeftVerticalLoop 491520, // TrackElemType::RightVerticalLoop 154415, // TrackElemType::LeftQuarterTurn3Tiles 154415, // TrackElemType::RightQuarterTurn3Tiles 164065, // TrackElemType::LeftBankedQuarterTurn3Tiles 164065, // TrackElemType::RightBankedQuarterTurn3Tiles 270226, // TrackElemType::LeftQuarterTurn3TilesUp25 270226, // TrackElemType::RightQuarterTurn3TilesUp25 270226, // TrackElemType::LeftQuarterTurn3TilesDown25 270226, // TrackElemType::RightQuarterTurn3TilesDown25 51471, // TrackElemType::LeftQuarterTurn1Tile 51471, // TrackElemType::RightQuarterTurn1Tile 212992, // TrackElemType::LeftTwistDownToUp 212992, // TrackElemType::RightTwistDownToUp 212992, // TrackElemType::LeftTwistUpToDown 212992, // TrackElemType::RightTwistUpToDown 294912, // TrackElemType::HalfLoopUp 294912, // TrackElemType::HalfLoopDown 229376, // TrackElemType::LeftCorkscrewUp 229376, // TrackElemType::RightCorkscrewUp 229376, // TrackElemType::LeftCorkscrewDown 229376, // TrackElemType::RightCorkscrewDown 98304, // TrackElemType::FlatToUp60 98304, // TrackElemType::Up60ToFlat 98304, // TrackElemType::FlatToDown60 98304, // TrackElemType::Down60ToFlat 524288, // TrackElemType::TowerBase 65536, // TrackElemType::TowerSection 69632, // TrackElemType::FlatCovered 83968, // TrackElemType::Up25Covered 118784, // TrackElemType::Up60Covered 77824, // TrackElemType::FlatToUp25Covered 100352, // TrackElemType::Up25ToUp60Covered 100352, // TrackElemType::Up60ToUp25Covered 77824, // TrackElemType::Up25ToFlatCovered 83968, // TrackElemType::Down25Covered 118784, // TrackElemType::Down60Covered 77824, // TrackElemType::FlatToDown25Covered 100352, // TrackElemType::Down25ToDown60Covered 100352, // TrackElemType::Down60ToDown25Covered 77824, // TrackElemType::Down25ToFlatCovered 261455, // TrackElemType::LeftQuarterTurn5TilesCovered 261455, // TrackElemType::RightQuarterTurn5TilesCovered 233472, // TrackElemType::SBendLeftCovered 233472, // TrackElemType::SBendRightCovered 158511, // TrackElemType::LeftQuarterTurn3TilesCovered 158511, // TrackElemType::RightQuarterTurn3TilesCovered 328192, // TrackElemType::LeftHalfBankedHelixUpSmall 328192, // TrackElemType::RightHalfBankedHelixUpSmall 328192, // TrackElemType::LeftHalfBankedHelixDownSmall 328192, // TrackElemType::RightHalfBankedHelixDownSmall 547072, // TrackElemType::LeftHalfBankedHelixUpLarge 547072, // TrackElemType::RightHalfBankedHelixUpLarge 547072, // TrackElemType::LeftHalfBankedHelixDownLarge 547072, // TrackElemType::RightHalfBankedHelixDownLarge 126976, // TrackElemType::LeftQuarterTurn1TileUp60 126976, // TrackElemType::RightQuarterTurn1TileUp60 126976, // TrackElemType::LeftQuarterTurn1TileDown60 126976, // TrackElemType::RightQuarterTurn1TileDown60 90112, // TrackElemType::Brakes 77824, // TrackElemType::Booster 65536, // TrackElemType::Maze 273539, // TrackElemType::LeftQuarterBankedHelixLargeUp 273539, // TrackElemType::RightQuarterBankedHelixLargeUp 273539, // TrackElemType::LeftQuarterBankedHelixLargeDown 273539, // TrackElemType::RightQuarterBankedHelixLargeDown 273539, // TrackElemType::LeftQuarterHelixLargeUp 273539, // TrackElemType::RightQuarterHelixLargeUp 273539, // TrackElemType::LeftQuarterHelixLargeDown 273539, // TrackElemType::RightQuarterHelixLargeDown 83968, // TrackElemType::Up25LeftBanked 83968, // TrackElemType::Up25RightBanked 143360, // TrackElemType::Waterfall 118784, // TrackElemType::Rapids 196608, // TrackElemType::OnRidePhoto 83968, // TrackElemType::Down25LeftBanked 83968, // TrackElemType::Down25RightBanked 393216, // TrackElemType::Watersplash 376832, // TrackElemType::FlatToUp60LongBase 376832, // TrackElemType::Up60ToFlatLongBase 126976, // TrackElemType::Whirlpool 376832, // TrackElemType::Down60ToFlatLongBase 376832, // TrackElemType::FlatToDown60LongBase 643072, // TrackElemType::CableLiftHill 491520, // TrackElemType::ReverseFreefallSlope 65536, // TrackElemType::ReverseFreefallVertical 69632, // TrackElemType::Up90 69632, // TrackElemType::Down90 114688, // TrackElemType::Up60ToUp90 114688, // TrackElemType::Down90ToDown60 114688, // TrackElemType::Up90ToUp60 114688, // TrackElemType::Down60ToDown90 147456, // TrackElemType::BrakeForDrop 180151, // TrackElemType::LeftEighthToDiag 180151, // TrackElemType::RightEighthToDiag 180151, // TrackElemType::LeftEighthToOrthogonal 180151, // TrackElemType::RightEighthToOrthogonal 190960, // TrackElemType::LeftEighthBankToDiag 190960, // TrackElemType::RightEighthBankToDiag 190960, // TrackElemType::LeftEighthBankToOrthogonal 190960, // TrackElemType::RightEighthBankToOrthogonal 92681, // TrackElemType::DiagFlat 111820, // TrackElemType::DiagUp25 147456, // TrackElemType::DiagUp60 102400, // TrackElemType::DiagFlatToUp25 129024, // TrackElemType::DiagUp25ToUp60 129024, // TrackElemType::DiagUp60ToUp25 102400, // TrackElemType::DiagUp25ToFlat 111820, // TrackElemType::DiagDown25 147456, // TrackElemType::DiagDown60 102400, // TrackElemType::DiagFlatToDown25 129024, // TrackElemType::DiagDown25ToDown60 129024, // TrackElemType::DiagDown60ToDown25 102400, // TrackElemType::DiagDown25ToFlat 107008, // TrackElemType::DiagFlatToUp60 107008, // TrackElemType::DiagUp60ToFlat 107008, // TrackElemType::DiagFlatToDown60 107008, // TrackElemType::DiagDown60ToFlat 96777, // TrackElemType::DiagFlatToLeftBank 96777, // TrackElemType::DiagFlatToRightBank 96777, // TrackElemType::DiagLeftBankToFlat 96777, // TrackElemType::DiagRightBankToFlat 106496, // TrackElemType::DiagLeftBankToUp25 106496, // TrackElemType::DiagRightBankToUp25 106496, // TrackElemType::DiagUp25ToLeftBank 106496, // TrackElemType::DiagUp25ToRightBank 106496, // TrackElemType::DiagLeftBankToDown25 106496, // TrackElemType::DiagRightBankToDown25 106496, // TrackElemType::DiagDown25ToLeftBank 106496, // TrackElemType::DiagDown25ToRightBank 96777, // TrackElemType::DiagLeftBank 96777, // TrackElemType::DiagRightBank 282624, // TrackElemType::LogFlumeReverser 217088, // TrackElemType::SpinningTunnel 221184, // TrackElemType::LeftBarrelRollUpToDown 221184, // TrackElemType::RightBarrelRollUpToDown 221184, // TrackElemType::LeftBarrelRollDownToUp 221184, // TrackElemType::RightBarrelRollDownToUp 270226, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 270226, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25 270226, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank 270226, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank 96384, // TrackElemType::PoweredLift 884736, // TrackElemType::LeftLargeHalfLoopUp 884736, // TrackElemType::RightLargeHalfLoopUp 884736, // TrackElemType::LeftLargeHalfLoopDown 884736, // TrackElemType::RightLargeHalfLoopDown 221184, // TrackElemType::LeftFlyerTwistUp 221184, // TrackElemType::RightFlyerTwistUp 221184, // TrackElemType::LeftFlyerTwistDown 221184, // TrackElemType::RightFlyerTwistDown 294912, // TrackElemType::FlyerHalfLoopUninvertedUp 294912, // TrackElemType::FlyerHalfLoopInvertedDown 229376, // TrackElemType::LeftFlyerCorkscrewUp 229376, // TrackElemType::RightFlyerCorkscrewUp 229376, // TrackElemType::LeftFlyerCorkscrewDown 229376, // TrackElemType::RightFlyerCorkscrewDown 294912, // TrackElemType::HeartLineTransferUp 294912, // TrackElemType::HeartLineTransferDown 417792, // TrackElemType::LeftHeartLineRoll 417792, // TrackElemType::RightHeartLineRoll 159744, // TrackElemType::MinigolfHoleA 167936, // TrackElemType::MinigolfHoleB 172032, // TrackElemType::MinigolfHoleC 184320, // TrackElemType::MinigolfHoleD 184320, // TrackElemType::MinigolfHoleE 360448, // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop 360448, // TrackElemType::Up90ToInvertedFlatQuarterLoop 360448, // TrackElemType::InvertedFlatToDown90QuarterLoop 270226, // TrackElemType::LeftCurvedLiftHill 270226, // TrackElemType::RightCurvedLiftHill 393216, // TrackElemType::LeftReverser 393216, // TrackElemType::RightReverser 65536, // TrackElemType::AirThrustTopCap 65536, // TrackElemType::AirThrustVerticalDown 491520, // TrackElemType::AirThrustVerticalDownToLevel 94208, // TrackElemType::BlockBrakes 287115, // TrackElemType::LeftBankedQuarterTurn3TileUp25 287115, // TrackElemType::RightBankedQuarterTurn3TileUp25 287115, // TrackElemType::LeftBankedQuarterTurn3TileDown25 287115, // TrackElemType::RightBankedQuarterTurn3TileDown25 333259, // TrackElemType::LeftBankedQuarterTurn5TileUp25 333259, // TrackElemType::RightBankedQuarterTurn5TileUp25 333259, // TrackElemType::LeftBankedQuarterTurn5TileDown25 333259, // TrackElemType::RightBankedQuarterTurn5TileDown25 83968, // TrackElemType::Up25ToLeftBankedUp25 83968, // TrackElemType::Up25ToRightBankedUp25 83968, // TrackElemType::LeftBankedUp25ToUp25 83968, // TrackElemType::RightBankedUp25ToUp25 83968, // TrackElemType::Down25ToLeftBankedDown25 83968, // TrackElemType::Down25ToRightBankedDown25 83968, // TrackElemType::LeftBankedDown25ToDown25 83968, // TrackElemType::RightBankedDown25ToDown25 77824, // TrackElemType::LeftBankedFlatToLeftBankedUp25 77824, // TrackElemType::RightBankedFlatToRightBankedUp25 77824, // TrackElemType::LeftBankedUp25ToLeftBankedFlat 77824, // TrackElemType::RightBankedUp25ToRightBankedFlat 77824, // TrackElemType::LeftBankedFlatToLeftBankedDown25 77824, // TrackElemType::RightBankedFlatToRightBankedDown25 77824, // TrackElemType::LeftBankedDown25ToLeftBankedFlat 77824, // TrackElemType::RightBankedDown25ToRightBankedFlat 77824, // TrackElemType::FlatToLeftBankedUp25 77824, // TrackElemType::FlatToRightBankedUp25 77824, // TrackElemType::LeftBankedUp25ToFlat 77824, // TrackElemType::RightBankedUp25ToFlat 77824, // TrackElemType::FlatToLeftBankedDown25 77824, // TrackElemType::FlatToRightBankedDown25 77824, // TrackElemType::LeftBankedDown25ToFlat 77824, // TrackElemType::RightBankedDown25ToFlat 151552, // TrackElemType::LeftQuarterTurn1TileUp90 151552, // TrackElemType::RightQuarterTurn1TileUp90 151552, // TrackElemType::LeftQuarterTurn1TileDown90 151552, // TrackElemType::RightQuarterTurn1TileDown90 360448, // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop 360448, // TrackElemType::MultiDimFlatToDown90QuarterLoop 360448, // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop 77824, // TrackElemType::RotationControlToggle 262144, // TrackElemType::FlatTrack1x4A 262144, // TrackElemType::FlatTrack2x2 1048576,// TrackElemType::FlatTrack4x4 524288, // TrackElemType::FlatTrack2x4 327680, // TrackElemType::FlatTrack1x5 65536, // TrackElemType::FlatTrack1x1A 262144, // TrackElemType::FlatTrack1x4B 65536, // TrackElemType::FlatTrack1x1B 262144, // TrackElemType::FlatTrack1x4C 524288, // TrackElemType::FlatTrack3x3 360448, // TrackElemType::LeftLargeCorkscrewUp 360448, // TrackElemType::RightLargeCorkscrewUp 360448, // TrackElemType::LeftLargeCorkscrewDown 360448, // TrackElemType::RightCorkscrewDown 589824, // TrackElemType::LeftMediumHalfLoopUp 589824, // TrackElemType::RightMediumHalfLoopUp 589824, // TrackElemType::LeftMediumHalfLoopDown 589824, // TrackElemType::RightMediumHalfLoopDown 229376, // TrackElemType::LeftZeroGRollUp 229376, // TrackElemType::RightZeroGRollUp 229376, // TrackElemType::LeftZeroGRollDown 229376, // TrackElemType::RightZeroGRollDown 425984, // TrackElemType::LeftLargeZeroGRollUp 425984, // TrackElemType::RightLargeZeroGRollUp 425984, // TrackElemType::LeftLargeZeroGRollDown 425984, // TrackElemType::RightLargeZeroGRollDown 884736, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp 884736, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp 884736, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown 884736, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown 884736, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp 884736, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp 884736, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown 884736, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown 294912, // TrackElemType::FlyerHalfLoopInvertedUp 294912, // TrackElemType::FlyerHalfLoopUninvertedDown 294912, // TrackElemType::LeftEighthToDiagUp25 294912, // TrackElemType::RightEighthToDiagUp25 294912, // TrackElemType::LeftEighthToDiagDown25 294912, // TrackElemType::RightEighthToDiagDown25 294912, // TrackElemType::LeftEighthToOrthogonalUp25 294912, // TrackElemType::RightEighthToOrthogonalUp25 294912, // TrackElemType::LeftEighthToOrthogonalDown25 294912, // TrackElemType::RightEighthToOrthogonalDown25 294912, // TrackElemType::DiagUp25ToLeftBankedUp25 294912, // TrackElemType::DiagUp25ToRightBankedUp25 294912, // TrackElemType::DiagLeftBankedUp25ToUp25 294912, // TrackElemType::DiagRightBankedUp25ToUp25 294912, // TrackElemType::DiagDown25ToLeftBankedDown25 294912, // TrackElemType::DiagDown25ToRightBankedDown25 294912, // TrackElemType::DiagLeftBankedDown25ToDown25 294912, // TrackElemType::DiagRightBankedDown25ToDown25 294912, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 294912, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 294912, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat 294912, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat 294912, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 294912, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 294912, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat 294912, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat 294912, // TrackElemType::DiagFlatToLeftBankedUp25 294912, // TrackElemType::DiagFlatToRightBankedUp25 294912, // TrackElemType::DiagLeftBankedUp25ToFlat 294912, // TrackElemType::DiagRightBankedUp25ToFlat 294912, // TrackElemType::DiagFlatToLeftBankedDown25 294912, // TrackElemType::DiagFlatToRightBankedDown25 294912, // TrackElemType::DiagLeftBankedDown25ToFlat 294912, // TrackElemType::DiagRightBankedDown25ToFlat 294912, // TrackElemType::DiagUp25LeftBanked 294912, // TrackElemType::DiagUp25RightBanked 294912, // TrackElemType::DiagDown25LeftBanked 294912, // TrackElemType::DiagDown25RightBanked 294912, // TrackElemType::LeftEighthBankToDiagUp25 294912, // TrackElemType::RightEighthBankToDiagUp25 294912, // TrackElemType::LeftEighthBankToDiagDown25 294912, // TrackElemType::RightEighthBankToDiagDown25 294912, // TrackElemType::LeftEighthBankToOrthogonalUp25 294912, // TrackElemType::RightEighthBankToOrthogonalUp25 294912, // TrackElemType::LeftEighthBankToOrthogonalDown25 294912, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackPricing) == TrackElemType::Count); /** rct2: 0x0099EA1C */ static constexpr track_type_t TrackElementMirrorMap[] = { TrackElemType::Flat, TrackElemType::EndStation, TrackElemType::BeginStation, TrackElemType::MiddleStation, TrackElemType::Up25, TrackElemType::Up60, TrackElemType::FlatToUp25, TrackElemType::Up25ToUp60, TrackElemType::Up60ToUp25, TrackElemType::Up25ToFlat, TrackElemType::Down25, TrackElemType::Down60, TrackElemType::FlatToDown25, TrackElemType::Down25ToDown60, TrackElemType::Down60ToDown25, TrackElemType::Down25ToFlat, TrackElemType::RightQuarterTurn5Tiles, // TrackElemType::LeftQuarterTurn5Tiles TrackElemType::LeftQuarterTurn5Tiles, // TrackElemType::RightQuarterTurn5Tiles TrackElemType::FlatToRightBank, // TrackElemType::FlatToLeftBank TrackElemType::FlatToLeftBank, // TrackElemType::FlatToRightBank TrackElemType::RightBankToFlat, // TrackElemType::LeftBankToFlat TrackElemType::LeftBankToFlat, // TrackElemType::RightBankToFlat TrackElemType::BankedRightQuarterTurn5Tiles, // TrackElemType::BankedLeftQuarterTurn5Tiles TrackElemType::BankedLeftQuarterTurn5Tiles, // TrackElemType::BankedRightQuarterTurn5Tiles TrackElemType::RightBankToUp25, // TrackElemType::LeftBankToUp25 TrackElemType::LeftBankToUp25, // TrackElemType::RightBankToUp25 TrackElemType::Up25ToRightBank, // TrackElemType::Up25ToLeftBank TrackElemType::Up25ToLeftBank, // TrackElemType::Up25ToRightBank TrackElemType::RightBankToDown25, // TrackElemType::LeftBankToDown25 TrackElemType::LeftBankToDown25, // TrackElemType::RightBankToDown25 TrackElemType::Down25ToRightBank, // TrackElemType::Down25ToLeftBank TrackElemType::Down25ToLeftBank, // TrackElemType::Down25ToRightBank TrackElemType::RightBank, // TrackElemType::LeftBank TrackElemType::LeftBank, // TrackElemType::RightBank TrackElemType::RightQuarterTurn5TilesUp25, // TrackElemType::LeftQuarterTurn5TilesUp25 TrackElemType::LeftQuarterTurn5TilesUp25, // TrackElemType::RightQuarterTurn5TilesUp25 TrackElemType::RightQuarterTurn5TilesDown25, // TrackElemType::LeftQuarterTurn5TilesDown25 TrackElemType::LeftQuarterTurn5TilesDown25, // TrackElemType::RightQuarterTurn5TilesDown25 TrackElemType::SBendRight, // TrackElemType::SBendLeft TrackElemType::SBendLeft, // TrackElemType::SBendRight TrackElemType::RightVerticalLoop, // TrackElemType::LeftVerticalLoop TrackElemType::LeftVerticalLoop, // TrackElemType::RightVerticalLoop TrackElemType::RightQuarterTurn3Tiles, // TrackElemType::LeftQuarterTurn3Tiles TrackElemType::LeftQuarterTurn3Tiles, // TrackElemType::RightQuarterTurn3Tiles TrackElemType::RightBankedQuarterTurn3Tiles, // TrackElemType::LeftBankedQuarterTurn3Tiles TrackElemType::LeftBankedQuarterTurn3Tiles, // TrackElemType::RightBankedQuarterTurn3Tiles TrackElemType::RightQuarterTurn3TilesUp25, // TrackElemType::LeftQuarterTurn3TilesUp25 TrackElemType::LeftQuarterTurn3TilesUp25, // TrackElemType::RightQuarterTurn3TilesUp25 TrackElemType::RightQuarterTurn3TilesDown25, // TrackElemType::LeftQuarterTurn3TilesDown25 TrackElemType::LeftQuarterTurn3TilesDown25, // TrackElemType::RightQuarterTurn3TilesDown25 TrackElemType::RightQuarterTurn1Tile, // TrackElemType::LeftQuarterTurn1Tile TrackElemType::LeftQuarterTurn1Tile, // TrackElemType::RightQuarterTurn1Tile TrackElemType::RightTwistDownToUp, // TrackElemType::LeftTwistDownToUp TrackElemType::LeftTwistDownToUp, // TrackElemType::RightTwistDownToUp TrackElemType::RightTwistUpToDown, // TrackElemType::LeftTwistUpToDown TrackElemType::LeftTwistUpToDown, // TrackElemType::RightTwistUpToDown TrackElemType::HalfLoopUp, TrackElemType::HalfLoopDown, TrackElemType::RightCorkscrewUp, // TrackElemType::LeftCorkscrewUp TrackElemType::LeftCorkscrewUp, // TrackElemType::RightCorkscrewUp TrackElemType::RightCorkscrewDown, // TrackElemType::LeftCorkscrewDown TrackElemType::LeftCorkscrewDown, // TrackElemType::RightCorkscrewDown TrackElemType::FlatToUp60, TrackElemType::Up60ToFlat, TrackElemType::FlatToDown60, TrackElemType::Down60ToFlat, TrackElemType::TowerBase, TrackElemType::TowerSection, TrackElemType::FlatCovered, TrackElemType::Up25Covered, TrackElemType::Up60Covered, TrackElemType::FlatToUp25Covered, TrackElemType::Up25ToUp60Covered, TrackElemType::Up60ToUp25Covered, TrackElemType::Up25ToFlatCovered, TrackElemType::Down25Covered, TrackElemType::Down60Covered, TrackElemType::FlatToDown25Covered, TrackElemType::Down25ToDown60Covered, TrackElemType::Down60ToDown25Covered, TrackElemType::Down25ToFlatCovered, TrackElemType::RightQuarterTurn5TilesCovered, // TrackElemType::LeftQuarterTurn5TilesCovered TrackElemType::LeftQuarterTurn5TilesCovered, // TrackElemType::RightQuarterTurn5TilesCovered TrackElemType::SBendRightCovered, // TrackElemType::SBendLeftCovered TrackElemType::SBendLeftCovered, // TrackElemType::SBendRightCovered TrackElemType::RightQuarterTurn3TilesCovered, // TrackElemType::LeftQuarterTurn3TilesCovered TrackElemType::LeftQuarterTurn3TilesCovered, // TrackElemType::RightQuarterTurn3TilesCovered TrackElemType::RightHalfBankedHelixUpSmall, // TrackElemType::LeftHalfBankedHelixUpSmall TrackElemType::LeftHalfBankedHelixUpSmall, // TrackElemType::RightHalfBankedHelixUpSmall TrackElemType::RightHalfBankedHelixDownSmall, // TrackElemType::LeftHalfBankedHelixDownSmall TrackElemType::LeftHalfBankedHelixDownSmall, // TrackElemType::RightHalfBankedHelixDownSmall TrackElemType::RightHalfBankedHelixUpLarge, // TrackElemType::LeftHalfBankedHelixUpLarge TrackElemType::LeftHalfBankedHelixUpLarge, // TrackElemType::RightHalfBankedHelixUpLarge TrackElemType::RightHalfBankedHelixDownLarge, // TrackElemType::LeftHalfBankedHelixDownLarge TrackElemType::LeftHalfBankedHelixDownLarge, // TrackElemType::RightHalfBankedHelixDownLarge TrackElemType::RightQuarterTurn1TileUp60, // TrackElemType::LeftQuarterTurn1TileUp60 TrackElemType::LeftQuarterTurn1TileUp60, // TrackElemType::RightQuarterTurn1TileUp60 TrackElemType::RightQuarterTurn1TileDown60, // TrackElemType::LeftQuarterTurn1TileDown60 TrackElemType::LeftQuarterTurn1TileDown60, // TrackElemType::RightQuarterTurn1TileDown60 TrackElemType::Brakes, TrackElemType::Booster, TrackElemType::Maze, TrackElemType::RightQuarterBankedHelixLargeUp, // TrackElemType::LeftQuarterBankedHelixLargeUp TrackElemType::LeftQuarterBankedHelixLargeUp, // TrackElemType::RightQuarterBankedHelixLargeUp TrackElemType::RightQuarterBankedHelixLargeDown, // TrackElemType::LeftQuarterBankedHelixLargeDown TrackElemType::LeftQuarterBankedHelixLargeDown, // TrackElemType::RightQuarterBankedHelixLargeDown TrackElemType::RightQuarterHelixLargeUp, // TrackElemType::LeftQuarterHelixLargeUp TrackElemType::LeftQuarterHelixLargeUp, // TrackElemType::RightQuarterHelixLargeUp TrackElemType::RightQuarterHelixLargeDown, // TrackElemType::LeftQuarterHelixLargeDown TrackElemType::LeftQuarterHelixLargeDown, // TrackElemType::RightQuarterHelixLargeDown TrackElemType::Up25RightBanked, // TrackElemType::Up25LeftBanked TrackElemType::Up25LeftBanked, // TrackElemType::Up25RightBanked TrackElemType::Waterfall, TrackElemType::Rapids, TrackElemType::OnRidePhoto, TrackElemType::Down25RightBanked, // TrackElemType::Down25LeftBanked TrackElemType::Down25LeftBanked, // TrackElemType::Down25RightBanked TrackElemType::Watersplash, TrackElemType::FlatToUp60LongBase, TrackElemType::Up60ToFlatLongBase, TrackElemType::Whirlpool, TrackElemType::Down60ToFlatLongBase, TrackElemType::FlatToDown60LongBase, TrackElemType::CableLiftHill, TrackElemType::ReverseFreefallSlope, TrackElemType::ReverseFreefallVertical, TrackElemType::Up90, TrackElemType::Down90, TrackElemType::Up60ToUp90, TrackElemType::Down90ToDown60, TrackElemType::Up90ToUp60, TrackElemType::Down60ToDown90, TrackElemType::BrakeForDrop, TrackElemType::RightEighthToDiag, // TrackElemType::LeftEighthToDiag TrackElemType::LeftEighthToDiag, // TrackElemType::RightEighthToDiag TrackElemType::RightEighthToOrthogonal, // TrackElemType::LeftEighthToOrthogonal TrackElemType::LeftEighthToOrthogonal, // TrackElemType::RightEighthToOrthogonal TrackElemType::RightEighthBankToDiag, // TrackElemType::LeftEighthBankToDiag TrackElemType::LeftEighthBankToDiag, // TrackElemType::RightEighthBankToDiag TrackElemType::RightEighthBankToOrthogonal, // TrackElemType::LeftEighthBankToOrthogonal TrackElemType::LeftEighthBankToOrthogonal, // TrackElemType::RightEighthBankToOrthogonal TrackElemType::DiagFlat, TrackElemType::DiagUp25, TrackElemType::DiagUp60, TrackElemType::DiagFlatToUp25, TrackElemType::DiagUp25ToUp60, TrackElemType::DiagUp60ToUp25, TrackElemType::DiagUp25ToFlat, TrackElemType::DiagDown25, TrackElemType::DiagDown60, TrackElemType::DiagFlatToDown25, TrackElemType::DiagDown25ToDown60, TrackElemType::DiagDown60ToDown25, TrackElemType::DiagDown25ToFlat, TrackElemType::DiagFlatToUp60, TrackElemType::DiagUp60ToFlat, TrackElemType::DiagFlatToDown60, TrackElemType::DiagDown60ToFlat, TrackElemType::DiagFlatToRightBank, // TrackElemType::DiagFlatToLeftBank TrackElemType::DiagFlatToLeftBank, // TrackElemType::DiagFlatToRightBank TrackElemType::DiagRightBankToFlat, // TrackElemType::DiagLeftBankToFlat TrackElemType::DiagLeftBankToFlat, // TrackElemType::DiagRightBankToFlat TrackElemType::DiagRightBankToUp25, // TrackElemType::DiagLeftBankToUp25 TrackElemType::DiagLeftBankToUp25, // TrackElemType::DiagRightBankToUp25 TrackElemType::DiagUp25ToRightBank, // TrackElemType::DiagUp25ToLeftBank TrackElemType::DiagUp25ToLeftBank, // TrackElemType::DiagUp25ToRightBank TrackElemType::DiagRightBankToDown25, // TrackElemType::DiagLeftBankToDown25 TrackElemType::DiagLeftBankToDown25, // TrackElemType::DiagRightBankToDown25 TrackElemType::DiagDown25ToRightBank, // TrackElemType::DiagDown25ToLeftBank TrackElemType::DiagDown25ToLeftBank, // TrackElemType::DiagDown25ToRightBank TrackElemType::DiagRightBank, // TrackElemType::DiagLeftBank TrackElemType::DiagLeftBank, // TrackElemType::DiagRightBank TrackElemType::LogFlumeReverser, TrackElemType::SpinningTunnel, TrackElemType::RightBarrelRollUpToDown, // TrackElemType::LeftBarrelRollUpToDown TrackElemType::LeftBarrelRollUpToDown, // TrackElemType::RightBarrelRollUpToDown TrackElemType::RightBarrelRollDownToUp, // TrackElemType::LeftBarrelRollDownToUp TrackElemType::LeftBarrelRollDownToUp, // TrackElemType::RightBarrelRollDownToUp TrackElemType::RightBankToRightQuarterTurn3TilesUp25, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25 TrackElemType::RightQuarterTurn3TilesDown25ToRightBank, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank TrackElemType::PoweredLift, TrackElemType::RightLargeHalfLoopUp, // TrackElemType::LeftLargeHalfLoopUp TrackElemType::LeftLargeHalfLoopUp, // TrackElemType::RightLargeHalfLoopUp TrackElemType::RightLargeHalfLoopDown, // TrackElemType::LeftLargeHalfLoopDown TrackElemType::LeftLargeHalfLoopDown, // TrackElemType::RightLargeHalfLoopDown TrackElemType::RightFlyerTwistUp, // TrackElemType::LeftFlyerTwistUp TrackElemType::LeftFlyerTwistUp, // TrackElemType::RightFlyerTwistUp TrackElemType::RightFlyerTwistDown, // TrackElemType::LeftFlyerTwistDown TrackElemType::LeftFlyerTwistDown, // TrackElemType::RightFlyerTwistDown TrackElemType::FlyerHalfLoopUninvertedUp, TrackElemType::FlyerHalfLoopInvertedDown, TrackElemType::RightFlyerCorkscrewUp, // TrackElemType::LeftFlyerCorkscrewUp TrackElemType::LeftFlyerCorkscrewUp, // TrackElemType::RightFlyerCorkscrewUp TrackElemType::RightFlyerCorkscrewDown, // TrackElemType::LeftFlyerCorkscrewDown TrackElemType::LeftFlyerCorkscrewDown, // TrackElemType::RightFlyerCorkscrewDown TrackElemType::HeartLineTransferUp, TrackElemType::HeartLineTransferDown, TrackElemType::RightHeartLineRoll, // TrackElemType::LeftHeartLineRoll TrackElemType::LeftHeartLineRoll, // TrackElemType::RightHeartLineRoll TrackElemType::MinigolfHoleA, TrackElemType::MinigolfHoleB, TrackElemType::MinigolfHoleC, TrackElemType::MinigolfHoleE, // TrackElemType::MinigolfHoleD TrackElemType::MinigolfHoleD, // TrackElemType::MinigolfHoleE TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop, TrackElemType::Up90ToInvertedFlatQuarterLoop, TrackElemType::InvertedFlatToDown90QuarterLoop, TrackElemType::RightCurvedLiftHill, // TrackElemType::LeftCurvedLiftHill TrackElemType::LeftCurvedLiftHill, // TrackElemType::RightCurvedLiftHill TrackElemType::RightReverser, // TrackElemType::LeftReverser TrackElemType::LeftReverser, // TrackElemType::RightReverser TrackElemType::AirThrustTopCap, TrackElemType::AirThrustVerticalDown, TrackElemType::AirThrustVerticalDownToLevel, TrackElemType::BlockBrakes, TrackElemType::RightBankedQuarterTurn3TileUp25, // TrackElemType::LeftBankedQuarterTurn3TileUp25 TrackElemType::LeftBankedQuarterTurn3TileUp25, // TrackElemType::RightBankedQuarterTurn3TileUp25 TrackElemType::RightBankedQuarterTurn3TileDown25, // TrackElemType::LeftBankedQuarterTurn3TileDown25 TrackElemType::LeftBankedQuarterTurn3TileDown25, // TrackElemType::RightBankedQuarterTurn3TileDown25 TrackElemType::RightBankedQuarterTurn5TileUp25, // TrackElemType::LeftBankedQuarterTurn5TileUp25 TrackElemType::LeftBankedQuarterTurn5TileUp25, // TrackElemType::RightBankedQuarterTurn5TileUp25 TrackElemType::RightBankedQuarterTurn5TileDown25, // TrackElemType::LeftBankedQuarterTurn5TileDown25 TrackElemType::LeftBankedQuarterTurn5TileDown25, // TrackElemType::RightBankedQuarterTurn5TileDown25 TrackElemType::Up25ToRightBankedUp25, // TrackElemType::Up25ToLeftBankedUp25 TrackElemType::Up25ToLeftBankedUp25, // TrackElemType::Up25ToRightBankedUp25 TrackElemType::RightBankedUp25ToUp25, // TrackElemType::LeftBankedUp25ToUp25 TrackElemType::LeftBankedUp25ToUp25, // TrackElemType::RightBankedUp25ToUp25 TrackElemType::Down25ToRightBankedDown25, // TrackElemType::Down25ToLeftBankedDown25 TrackElemType::Down25ToLeftBankedDown25, // TrackElemType::Down25ToRightBankedDown25 TrackElemType::RightBankedDown25ToDown25, // TrackElemType::LeftBankedDown25ToDown25 TrackElemType::LeftBankedDown25ToDown25, // TrackElemType::RightBankedDown25ToDown25 TrackElemType::RightBankedFlatToRightBankedUp25, // TrackElemType::LeftBankedFlatToLeftBankedUp25 TrackElemType::LeftBankedFlatToLeftBankedUp25, // TrackElemType::RightBankedFlatToRightBankedUp25 TrackElemType::RightBankedUp25ToRightBankedFlat, // TrackElemType::LeftBankedUp25ToLeftBankedFlat TrackElemType::LeftBankedUp25ToLeftBankedFlat, // TrackElemType::RightBankedUp25ToRightBankedFlat TrackElemType::RightBankedFlatToRightBankedDown25, // TrackElemType::LeftBankedFlatToLeftBankedDown25 TrackElemType::LeftBankedFlatToLeftBankedDown25, // TrackElemType::RightBankedFlatToRightBankedDown25 TrackElemType::RightBankedDown25ToRightBankedFlat, // TrackElemType::LeftBankedDown25ToLeftBankedFlat TrackElemType::LeftBankedDown25ToLeftBankedFlat, // TrackElemType::RightBankedDown25ToRightBankedFlat TrackElemType::FlatToRightBankedUp25, // TrackElemType::FlatToLeftBankedUp25 TrackElemType::FlatToLeftBankedUp25, // TrackElemType::FlatToRightBankedUp25 TrackElemType::RightBankedUp25ToFlat, // TrackElemType::LeftBankedUp25ToFlat TrackElemType::LeftBankedUp25ToFlat, // TrackElemType::RightBankedUp25ToFlat TrackElemType::FlatToRightBankedDown25, // TrackElemType::FlatToLeftBankedDown25 TrackElemType::FlatToLeftBankedDown25, // TrackElemType::FlatToRightBankedDown25 TrackElemType::RightBankedDown25ToFlat, // TrackElemType::LeftBankedDown25ToFlat TrackElemType::LeftBankedDown25ToFlat, // TrackElemType::RightBankedDown25ToFlat TrackElemType::RightQuarterTurn1TileUp90, // TrackElemType::LeftQuarterTurn1TileUp90 TrackElemType::LeftQuarterTurn1TileUp90, // TrackElemType::RightQuarterTurn1TileUp90 TrackElemType::RightQuarterTurn1TileDown90, // TrackElemType::LeftQuarterTurn1TileDown90 TrackElemType::LeftQuarterTurn1TileDown90, // TrackElemType::RightQuarterTurn1TileDown90 TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop, TrackElemType::MultiDimFlatToDown90QuarterLoop, TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop, TrackElemType::RotationControlToggle, TrackElemType::FlatTrack1x4A, // TrackElemType::FlatTrack1x4A TrackElemType::FlatTrack2x2, // TrackElemType::FlatTrack2x2 TrackElemType::FlatTrack4x4, // TrackElemType::FlatTrack4x4 TrackElemType::FlatTrack2x4, // TrackElemType::FlatTrack2x4 TrackElemType::FlatTrack1x5, // TrackElemType::FlatTrack1x5 TrackElemType::FlatTrack1x1A, // TrackElemType::FlatTrack1x1A TrackElemType::FlatTrack1x4B, // TrackElemType::FlatTrack1x4B TrackElemType::FlatTrack1x1B, // TrackElemType::FlatTrack1x1B TrackElemType::FlatTrack1x4C, // TrackElemType::FlatTrack1x4C TrackElemType::FlatTrack3x3, // TrackElemType::FlatTrack3x3 TrackElemType::RightLargeCorkscrewUp, // TrackElemType::LeftLargeCorkscrewUp TrackElemType::LeftLargeCorkscrewUp, // TrackElemType::RightLargeCorkscrewUp TrackElemType::RightLargeCorkscrewDown, // TrackElemType::LeftLargeCorkscrewDown TrackElemType::LeftLargeCorkscrewDown, // TrackElemType::RightLargeCorkscrewDown TrackElemType::RightMediumHalfLoopUp, // TrackElemType::LeftMediumHalfLoopUp TrackElemType::LeftMediumHalfLoopUp, // TrackElemType::RightMediumHalfLoopUp TrackElemType::RightMediumHalfLoopDown, // TrackElemType::LeftMediumHalfLoopDown TrackElemType::LeftMediumHalfLoopDown, // TrackElemType::RightMediumHalfLoopDown TrackElemType::RightZeroGRollUp, // TrackElemType::LeftZeroGRollUp TrackElemType::LeftZeroGRollUp, // TrackElemType::RightZeroGRollUp TrackElemType::RightZeroGRollDown, // TrackElemType::LeftZeroGRollDown TrackElemType::LeftZeroGRollDown, // TrackElemType::RightZeroGRollDown TrackElemType::RightLargeZeroGRollUp, // TrackElemType::LeftLargeZeroGRollUp TrackElemType::LeftLargeZeroGRollUp, // TrackElemType::RightLargeZeroGRollUp TrackElemType::RightLargeZeroGRollDown, // TrackElemType::LeftLargeZeroGRollDown TrackElemType::LeftLargeZeroGRollDown, // TrackElemType::RightLargeZeroGRollDown TrackElemType::RightFlyerLargeHalfLoopUninvertedUp, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp TrackElemType::RightFlyerLargeHalfLoopInvertedDown, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown TrackElemType::RightFlyerLargeHalfLoopInvertedUp, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp TrackElemType::LeftFlyerLargeHalfLoopInvertedUp, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown TrackElemType::FlyerHalfLoopInvertedUp, TrackElemType::FlyerHalfLoopUninvertedDown, TrackElemType::RightEighthToDiagUp25, // TrackElemType::LeftEighthToDiagUp25 TrackElemType::LeftEighthToDiagUp25, // TrackElemType::RightEighthToDiagUp25 TrackElemType::RightEighthToDiagDown25, // TrackElemType::LeftEighthToDiagDown25 TrackElemType::LeftEighthToDiagDown25, // TrackElemType::RightEighthToDiagDown25 TrackElemType::RightEighthToOrthogonalUp25, // TrackElemType::LeftEighthToOrthogonalUp25 TrackElemType::LeftEighthToOrthogonalUp25, // TrackElemType::RightEighthToOrthogonalUp25 TrackElemType::RightEighthToOrthogonalDown25, // TrackElemType::LeftEighthToOrthogonalDown25 TrackElemType::LeftEighthToOrthogonalDown25, // TrackElemType::RightEighthToOrthogonalDown25 TrackElemType::DiagUp25ToRightBankedUp25, // TrackElemType::DiagUp25ToRightBankedUp25 TrackElemType::DiagUp25ToLeftBankedUp25, // TrackElemType::DiagUp25ToLeftBankedUp25 TrackElemType::DiagRightBankedUp25ToUp25, // TrackElemType::DiagRightBankedUp25ToUp25 TrackElemType::DiagLeftBankedUp25ToUp25, // TrackElemType::DiagLeftBankedUp25ToUp25 TrackElemType::DiagDown25ToRightBankedDown25, // TrackElemType::DiagDown25ToRightBankedDown25 TrackElemType::DiagDown25ToLeftBankedDown25, // TrackElemType::DiagDown25ToLeftBankedDown25 TrackElemType::DiagRightBankedDown25ToDown25, // TrackElemType::DiagRightBankedDown25ToDown25 TrackElemType::DiagLeftBankedDown25ToDown25, // TrackElemType::DiagLeftBankedDown25ToDown25 TrackElemType::DiagRightBankedFlatToRightBankedUp25, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 TrackElemType::DiagLeftBankedFlatToLeftBankedUp25, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 TrackElemType::DiagRightBankedUp25ToRightBankedFlat, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat TrackElemType::DiagRightBankedFlatToRightBankedDown25,// TrackElemType::DiagRightBankedFlatToRightBankedDown25 TrackElemType::DiagLeftBankedFlatToLeftBankedDown25, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 TrackElemType::DiagRightBankedDown25ToRightBankedFlat,// TrackElemType::DiagRightBankedDown25ToRightBankedFlat TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat TrackElemType::DiagFlatToRightBankedUp25, // TrackElemType::DiagFlatToRightBankedUp25 TrackElemType::DiagFlatToLeftBankedUp25, // TrackElemType::DiagFlatToLeftBankedUp25 TrackElemType::DiagRightBankedUp25ToFlat, // TrackElemType::DiagRightBankedUp25ToFlat TrackElemType::DiagLeftBankedUp25ToFlat, // TrackElemType::DiagLeftBankedUp25ToFlat TrackElemType::DiagFlatToRightBankedDown25, // TrackElemType::DiagFlatToRightBankedDown25 TrackElemType::DiagFlatToLeftBankedDown25, // TrackElemType::DiagFlatToLeftBankedDown25 TrackElemType::DiagRightBankedDown25ToFlat, // TrackElemType::DiagRightBankedDown25ToFlat TrackElemType::DiagLeftBankedDown25ToFlat, // TrackElemType::DiagLeftBankedDown25ToFlat TrackElemType::DiagUp25RightBanked, // TrackElemType::DiagUp25RightBanked TrackElemType::DiagUp25LeftBanked, // TrackElemType::DiagUp25LeftBanked TrackElemType::DiagDown25RightBanked, // TrackElemType::DiagDown25RightBanked TrackElemType::DiagDown25LeftBanked, // TrackElemType::DiagDown25LeftBanked TrackElemType::RightEighthBankToDiagUp25, // TrackElemType::RightEighthBankToDiagUp25 TrackElemType::LeftEighthBankToDiagUp25, // TrackElemType::LeftEighthBankToDiagUp25 TrackElemType::RightEighthBankToDiagDown25, // TrackElemType::RightEighthBankToDiagDown25 TrackElemType::LeftEighthBankToDiagDown25, // TrackElemType::LeftEighthBankToDiagDown25 TrackElemType::RightEighthBankToOrthogonalUp25, // TrackElemType::RightEighthBankToOrthogonalUp25 TrackElemType::LeftEighthBankToOrthogonalUp25, // TrackElemType::LeftEighthBankToOrthogonalUp25 TrackElemType::RightEighthBankToOrthogonalDown25, // TrackElemType::RightEighthBankToOrthogonalDown25 TrackElemType::LeftEighthBankToOrthogonalDown25, // TrackElemType::LeftEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackElementMirrorMap) == TrackElemType::Count); /** rct2: 0x00999694 */ static constexpr uint32_t TrackHeightMarkerPositions[] = { (1 << 0), // TrackElemType::Flat (1 << 0), // TrackElemType::EndStation (1 << 0), // TrackElemType::BeginStation (1 << 0), // TrackElemType::MiddleStation (1 << 0), // TrackElemType::Up25 (1 << 0), // TrackElemType::Up60 (1 << 0), // TrackElemType::FlatToUp25 (1 << 0), // TrackElemType::Up25ToUp60 (1 << 0), // TrackElemType::Up60ToUp25 (1 << 0), // TrackElemType::Up25ToFlat (1 << 0), // TrackElemType::Down25 (1 << 0), // TrackElemType::Down60 (1 << 0), // TrackElemType::FlatToDown25 (1 << 0), // TrackElemType::Down25ToDown60 (1 << 0), // TrackElemType::Down60ToDown25 (1 << 0), // TrackElemType::Down25ToFlat (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5Tiles (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5Tiles (1 << 0), // TrackElemType::FlatToLeftBank (1 << 0), // TrackElemType::FlatToRightBank (1 << 0), // TrackElemType::LeftBankToFlat (1 << 0), // TrackElemType::RightBankToFlat (1 << 0) | (1 << 6), // TrackElemType::BankedLeftQuarterTurn5Tiles (1 << 0) | (1 << 6), // TrackElemType::BankedRightQuarterTurn5Tiles (1 << 0), // TrackElemType::LeftBankToUp25 (1 << 0), // TrackElemType::RightBankToUp25 (1 << 0), // TrackElemType::Up25ToLeftBank (1 << 0), // TrackElemType::Up25ToRightBank (1 << 0), // TrackElemType::LeftBankToDown25 (1 << 0), // TrackElemType::RightBankToDown25 (1 << 0), // TrackElemType::Down25ToLeftBank (1 << 0), // TrackElemType::Down25ToRightBank (1 << 0), // TrackElemType::LeftBank (1 << 0), // TrackElemType::RightBank (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesUp25 (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesUp25 (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesDown25 (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesDown25 (1 << 0) | (1 << 3), // TrackElemType::SBendLeft (1 << 0) | (1 << 3), // TrackElemType::SBendRight (1 << 0) | (1 << 9), // TrackElemType::LeftVerticalLoop (1 << 0) | (1 << 9), // TrackElemType::RightVerticalLoop (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3Tiles (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3Tiles (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3Tiles (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3Tiles (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesUp25 (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesUp25 (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesDown25 (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesDown25 (1 << 0), // TrackElemType::LeftQuarterTurn1Tile (1 << 0), // TrackElemType::RightQuarterTurn1Tile (1 << 0) | (1 << 2), // TrackElemType::LeftTwistDownToUp (1 << 0) | (1 << 2), // TrackElemType::RightTwistDownToUp (1 << 0) | (1 << 2), // TrackElemType::LeftTwistUpToDown (1 << 0) | (1 << 2), // TrackElemType::RightTwistUpToDown (1 << 0) | (1 << 3), // TrackElemType::HalfLoopUp (1 << 0) | (1 << 3), // TrackElemType::HalfLoopDown (1 << 0) | (1 << 2), // TrackElemType::LeftCorkscrewUp (1 << 0) | (1 << 2), // TrackElemType::RightCorkscrewUp (1 << 0) | (1 << 2), // TrackElemType::LeftCorkscrewDown (1 << 0) | (1 << 2), // TrackElemType::RightCorkscrewDown (1 << 0), // TrackElemType::FlatToUp60 (1 << 0), // TrackElemType::Up60ToFlat (1 << 0), // TrackElemType::FlatToDown60 (1 << 0), // TrackElemType::Down60ToFlat (1 << 1) | (1 << 3) | (1 << 6) | (1 << 7), // TrackElemType::TowerBase (1 << 0), // TrackElemType::TowerSection (1 << 0), // TrackElemType::FlatCovered (1 << 0), // TrackElemType::Up25Covered (1 << 0), // TrackElemType::Up60Covered (1 << 0), // TrackElemType::FlatToUp25Covered (1 << 0), // TrackElemType::Up25ToUp60Covered (1 << 0), // TrackElemType::Up60ToUp25Covered (1 << 0), // TrackElemType::Up25ToFlatCovered (1 << 0), // TrackElemType::Down25Covered (1 << 0), // TrackElemType::Down60Covered (1 << 0), // TrackElemType::FlatToDown25Covered (1 << 0), // TrackElemType::Down25ToDown60Covered (1 << 0), // TrackElemType::Down60ToDown25Covered (1 << 0), // TrackElemType::Down25ToFlatCovered (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterTurn5TilesCovered (1 << 0) | (1 << 6), // TrackElemType::RightQuarterTurn5TilesCovered (1 << 0) | (1 << 3), // TrackElemType::SBendLeftCovered (1 << 0) | (1 << 3), // TrackElemType::SBendRightCovered (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesCovered (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesCovered (1 << 0) | (1 << 7), // TrackElemType::LeftHalfBankedHelixUpSmall (1 << 0) | (1 << 7), // TrackElemType::RightHalfBankedHelixUpSmall (1 << 0) | (1 << 7), // TrackElemType::LeftHalfBankedHelixDownSmall (1 << 0) | (1 << 7), // TrackElemType::RightHalfBankedHelixDownSmall (1 << 0) | (1 << 13), // TrackElemType::LeftHalfBankedHelixUpLarge (1 << 0) | (1 << 13), // TrackElemType::RightHalfBankedHelixUpLarge (1 << 0) | (1 << 13), // TrackElemType::LeftHalfBankedHelixDownLarge (1 << 0) | (1 << 13), // TrackElemType::RightHalfBankedHelixDownLarge (1 << 0), // TrackElemType::LeftQuarterTurn1TileUp60 (1 << 0), // TrackElemType::RightQuarterTurn1TileUp60 (1 << 0), // TrackElemType::LeftQuarterTurn1TileDown60 (1 << 0), // TrackElemType::RightQuarterTurn1TileDown60 (1 << 0), // TrackElemType::Brakes (1 << 0), // TrackElemType::Booster (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7) | (1 << 8) | (1 << 9) | (1 << 10) | (1 << 11) | (1 << 12) | (1 << 13) | (1 << 14) | (1 << 15), // Maze (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterBankedHelixLargeUp (1 << 0) | (1 << 6), // TrackElemType::RightQuarterBankedHelixLargeUp (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterBankedHelixLargeDown (1 << 0) | (1 << 6), // TrackElemType::RightQuarterBankedHelixLargeDown (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterHelixLargeUp (1 << 0) | (1 << 6), // TrackElemType::RightQuarterHelixLargeUp (1 << 0) | (1 << 6), // TrackElemType::LeftQuarterHelixLargeDown (1 << 0) | (1 << 6), // TrackElemType::RightQuarterHelixLargeDown (1 << 0), // TrackElemType::Up25LeftBanked (1 << 0) | (1 << 3) | (1 << 12) | (1 << 15), // TrackElemType::Up25RightBanked (1 << 0), // TrackElemType::Waterfall (1 << 0), // TrackElemType::Rapids (1 << 0), // TrackElemType::OnRidePhoto (1 << 0) | (1 << 7), // TrackElemType::Down25LeftBanked (1 << 0), // TrackElemType::Down25RightBanked (1 << 0) | (1 << 4), // TrackElemType::Watersplash (1 << 0) | (1 << 3), // TrackElemType::FlatToUp60LongBase (1 << 0) | (1 << 3), // TrackElemType::Up60ToFlatLongBase (1 << 0), // TrackElemType::Whirlpool (1 << 0) | (1 << 3), // TrackElemType::Down60ToFlatLongBase (1 << 0) | (1 << 3), // TrackElemType::FlatToUp60LongBase (1 << 0) | (1 << 3), // TrackElemType::CableLiftHill (1 << 0) | (1 << 5), // TrackElemType::ReverseFreefallSlope (1 << 0), // TrackElemType::ReverseFreefallVertical (1 << 0), // TrackElemType::Up90 (1 << 0), // TrackElemType::Down90 (1 << 0), // TrackElemType::Up60ToUp90 (1 << 0), // TrackElemType::Down90ToDown60 (1 << 0), // TrackElemType::Up90ToUp60 (1 << 0), // TrackElemType::Down60ToDown90 (1 << 0), // TrackElemType::BrakeForDrop (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiag (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiag (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonal (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonal (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiag (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiag (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonal (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonal (1 << 0), // TrackElemType::DiagFlat (1 << 0), // TrackElemType::DiagUp25 (1 << 0), // TrackElemType::DiagUp60 (1 << 0), // TrackElemType::DiagFlatToUp25 (1 << 0), // TrackElemType::DiagUp25ToUp60 (1 << 0), // TrackElemType::DiagUp60ToUp25 (1 << 0), // TrackElemType::DiagUp25ToFlat (1 << 3), // TrackElemType::DiagDown25 (1 << 3), // TrackElemType::DiagDown60 (1 << 3), // TrackElemType::DiagFlatToDown25 (1 << 3), // TrackElemType::DiagDown25ToDown60 (1 << 3), // TrackElemType::DiagDown60ToDown25 (1 << 3), // TrackElemType::DiagDown25ToFlat (1 << 0), // TrackElemType::DiagFlatToUp60 (1 << 0), // TrackElemType::DiagUp60ToFlat (1 << 3), // TrackElemType::DiagFlatToDown60 (1 << 3), // TrackElemType::DiagDown60ToFlat (1 << 0), // TrackElemType::DiagFlatToLeftBank (1 << 0), // TrackElemType::DiagFlatToRightBank (1 << 0), // TrackElemType::DiagLeftBankToFlat (1 << 0), // TrackElemType::DiagRightBankToFlat (1 << 0), // TrackElemType::DiagLeftBankToUp25 (1 << 0), // TrackElemType::DiagRightBankToUp25 (1 << 0), // TrackElemType::DiagUp25ToLeftBank (1 << 0), // TrackElemType::DiagUp25ToRightBank (1 << 3), // TrackElemType::DiagLeftBankToDown25 (1 << 3), // TrackElemType::DiagRightBankToDown25 (1 << 3), // TrackElemType::DiagDown25ToLeftBank (1 << 3), // TrackElemType::DiagDown25ToRightBank (1 << 0), // TrackElemType::DiagLeftBank (1 << 0), // TrackElemType::DiagRightBank (1 << 0), // TrackElemType::LogFlumeReverser (1 << 0), // TrackElemType::SpinningTunnel (1 << 0) | (1 << 2), // TrackElemType::LeftBarrelRollUpToDown (1 << 0) | (1 << 2), // TrackElemType::RightBarrelRollUpToDown (1 << 0) | (1 << 2), // TrackElemType::LeftBarrelRollDownToUp (1 << 0) | (1 << 2), // TrackElemType::RightBarrelRollDownToUp (1 << 0) | (1 << 3), // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 (1 << 0) | (1 << 3), // TrackElemType::RightBankToRightQuarterTurn3TilesUp25 (1 << 0) | (1 << 3), // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank (1 << 0) | (1 << 3), // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank (1 << 0), // TrackElemType::PoweredLift (1 << 0) | (1 << 6), // TrackElemType::LeftLargeHalfLoopUp (1 << 0) | (1 << 6), // TrackElemType::RightLargeHalfLoopUp (1 << 0) | (1 << 6), // TrackElemType::LeftLargeHalfLoopDown (1 << 0) | (1 << 6), // TrackElemType::RightLargeHalfLoopDown (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerTwistUp (1 << 0) | (1 << 2), // TrackElemType::RightFlyerTwistUp (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerTwistDown (1 << 0) | (1 << 2), // TrackElemType::RightFlyerTwistDown (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopUninvertedUp (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopInvertedDown (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerCorkscrewUp (1 << 0) | (1 << 2), // TrackElemType::RightFlyerCorkscrewUp (1 << 0) | (1 << 2), // TrackElemType::LeftFlyerCorkscrewDown (1 << 0) | (1 << 2), // TrackElemType::RightFlyerCorkscrewDown (1 << 0) | (1 << 3), // TrackElemType::HeartLineTransferUp (1 << 0) | (1 << 3), // TrackElemType::HeartLineTransferDown (1 << 0) | (1 << 5), // TrackElemType::LeftHeartLineRoll (1 << 0) | (1 << 5), // TrackElemType::RightHeartLineRoll (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleA (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleB (1 << 0) | (1 << 1), // TrackElemType::MinigolfHoleC (1 << 0) | (1 << 2), // TrackElemType::MinigolfHoleD (1 << 0) | (1 << 2), // TrackElemType::MinigolfHoleE (1 << 0) | (1 << 2), // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop (1 << 0) | (1 << 2), // TrackElemType::Up90ToInvertedFlatQuarterLoop (1 << 0) | (1 << 2), // TrackElemType::InvertedFlatToDown90QuarterLoop (1 << 0) | (1 << 3), // TrackElemType::LeftCurvedLiftHill (1 << 0) | (1 << 3), // TrackElemType::RightCurvedLiftHill (1 << 0) | (1 << 5), // TrackElemType::LeftReverser (1 << 0) | (1 << 5), // TrackElemType::RightReverser (1 << 0) | (1 << 3), // TrackElemType::AirThrustTopCap (1 << 0), // TrackElemType::AirThrustVerticalDown (1 << 0) | (1 << 5), // TrackElemType::AirThrustVerticalDownToLevel (1 << 0), // TrackElemType::BlockBrakes (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3TileUp25 (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3TileUp25 (1 << 0) | (1 << 3), // TrackElemType::LeftBankedQuarterTurn3TileDown25 (1 << 0) | (1 << 3), // TrackElemType::RightBankedQuarterTurn3TileDown25 (1 << 0) | (1 << 6), // TrackElemType::LeftBankedQuarterTurn5TileUp25 (1 << 0) | (1 << 6), // TrackElemType::RightBankedQuarterTurn5TileUp25 (1 << 0) | (1 << 6), // TrackElemType::LeftBankedQuarterTurn5TileDown25 (1 << 0) | (1 << 6), // TrackElemType::RightBankedQuarterTurn5TileDown25 (1 << 0), // TrackElemType::Up25ToLeftBankedUp25 (1 << 0), // TrackElemType::Up25ToRightBankedUp25 (1 << 0), // TrackElemType::LeftBankedUp25ToUp25 (1 << 0), // TrackElemType::RightBankedUp25ToUp25 (1 << 0), // TrackElemType::Down25ToLeftBankedDown25 (1 << 0), // TrackElemType::Down25ToRightBankedDown25 (1 << 0), // TrackElemType::LeftBankedDown25ToDown25 (1 << 0), // TrackElemType::RightBankedDown25ToDown25 (1 << 0), // TrackElemType::LeftBankedFlatToLeftBankedUp25 (1 << 0), // TrackElemType::RightBankedFlatToRightBankedUp25 (1 << 0), // TrackElemType::LeftBankedUp25ToLeftBankedFlat (1 << 0), // TrackElemType::RightBankedUp25ToRightBankedFlat (1 << 0), // TrackElemType::LeftBankedFlatToLeftBankedDown25 (1 << 0), // TrackElemType::RightBankedFlatToRightBankedDown25 (1 << 0), // TrackElemType::LeftBankedDown25ToLeftBankedFlat (1 << 0), // TrackElemType::RightBankedDown25ToRightBankedFlat (1 << 0), // TrackElemType::FlatToLeftBankedUp25 (1 << 0), // TrackElemType::FlatToRightBankedUp25 (1 << 0), // TrackElemType::LeftBankedUp25ToFlat (1 << 0), // TrackElemType::RightBankedUp25ToFlat (1 << 0), // TrackElemType::FlatToLeftBankedDown25 (1 << 0), // TrackElemType::FlatToRightBankedDown25 (1 << 0), // TrackElemType::LeftBankedDown25ToFlat (1 << 0), // TrackElemType::RightBankedDown25ToFlat (1 << 0), // TrackElemType::LeftQuarterTurn1TileUp90 (1 << 0), // TrackElemType::RightQuarterTurn1TileUp90 (1 << 0), // TrackElemType::LeftQuarterTurn1TileDown90 (1 << 0), // TrackElemType::RightQuarterTurn1TileDown90 (1 << 0) | (1 << 2), // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop (1 << 0) | (1 << 2), // TrackElemType::MultiDimFlatToDown90QuarterLoop (1 << 0) | (1 << 2), // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop (1 << 0), // TrackElemType::RotationControlToggle (1 << 0), // TrackElemType::FlatTrack1x4A (1 << 0), // TrackElemType::FlatTrack2x2 (1 << 0), // TrackElemType::FlatTrack4x4 (1 << 0), // TrackElemType::FlatTrack2x4 (1 << 0), // TrackElemType::FlatTrack1x5 (1 << 0), // TrackElemType::FlatTrack1x1A (1 << 0), // TrackElemType::FlatTrack1x4B (1 << 0), // TrackElemType::FlatTrack1x1B (1 << 0), // TrackElemType::FlatTrack1x4C (1 << 0), // TrackElemType::FlatTrack3x3 (1 << 0) | (1 << 5), // TrackElemType::LeftLargeCorkscrewUp (1 << 0) | (1 << 5), // TrackElemType::RightLargeCorkscrewUp (1 << 0) | (1 << 5), // TrackElemType::LeftLargeCorkscrewDown (1 << 0) | (1 << 5), // TrackElemType::RightLargeCorkscrewDown (1 << 0) | (1 << 4), // TrackElemType::LeftMediumHalfLoopUp (1 << 0) | (1 << 4), // TrackElemType::RightMediumHalfLoopUp (1 << 0) | (1 << 4), // TrackElemType::LeftMediumHalfLoopDown (1 << 0) | (1 << 4), // TrackElemType::RightMediumHalfLoopDown (1 << 0) | (1 << 2), // TrackElemType::LeftZeroGRollUp (1 << 0) | (1 << 2), // TrackElemType::RightZeroGRollUp (1 << 0) | (1 << 2), // TrackElemType::LeftZeroGRollDown (1 << 0) | (1 << 2), // TrackElemType::RightZeroGRollDown (1 << 0) | (1 << 3), // TrackElemType::LeftLargeZeroGRollUp (1 << 0) | (1 << 3), // TrackElemType::RightLargeZeroGRollUp (1 << 0) | (1 << 3), // TrackElemType::LeftLargeZeroGRollDown (1 << 0) | (1 << 3), // TrackElemType::RightLargeZeroGRollDown (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopInvertedDown (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopInvertedUp (1 << 0) | (1 << 6), // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown (1 << 0) | (1 << 6), // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopInvertedUp (1 << 0) | (1 << 3), // TrackElemType::FlyerHalfLoopUninvertedDown (1 << 0), // TrackElemType::LeftEighthToDiagUp25 (1 << 0), // TrackElemType::RightEighthToDiagUp25 (1 << 0), // TrackElemType::LeftEighthToDiagDown25 (1 << 0), // TrackElemType::RightEighthToDiagDown25 (1 << 0), // TrackElemType::LeftEighthToOrthogonalUp25 (1 << 0), // TrackElemType::RightEighthToOrthogonalUp25 (1 << 0), // TrackElemType::LeftEighthToOrthogonalDown25 (1 << 0), // TrackElemType::RightEighthToOrthogonalDown25 (1 << 0), // TrackElemType::DiagUp25ToRightBankedUp25 (1 << 0), // TrackElemType::DiagUp25ToLeftBankedUp25 (1 << 0), // TrackElemType::DiagRightBankedUp25ToUp25 (1 << 0), // TrackElemType::DiagLeftBankedUp25ToUp25 (1 << 0), // TrackElemType::DiagDown25ToRightBankedDown25 (1 << 0), // TrackElemType::DiagDown25ToLeftBankedDown25 (1 << 0), // TrackElemType::DiagRightBankedDown25ToDown25 (1 << 0), // TrackElemType::DiagLeftBankedDown25ToDown25 (1 << 0), // TrackElemType::DiagRightBankedFlatToRightBankedUp25 (1 << 0), // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 (1 << 0), // TrackElemType::DiagRightBankedUp25ToRightBankedFlat (1 << 0), // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat (1 << 0), // TrackElemType::DiagRightBankedFlatToRightBankedDown25 (1 << 0), // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 (1 << 0), // TrackElemType::DiagRightBankedDown25ToRightBankedFlat (1 << 0), // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat (1 << 0), // TrackElemType::DiagFlatToRightBankedUp25 (1 << 0), // TrackElemType::DiagFlatToLeftBankedUp25 (1 << 0), // TrackElemType::DiagRightBankedUp25ToFlat (1 << 0), // TrackElemType::DiagLeftBankedUp25ToFlat (1 << 0), // TrackElemType::DiagFlatToRightBankedDown25 (1 << 0), // TrackElemType::DiagFlatToLeftBankedDown25 (1 << 0), // TrackElemType::DiagRightBankedDown25ToFlat (1 << 0), // TrackElemType::DiagLeftBankedDown25ToFlat (1 << 0), // TrackElemType::DiagUp25RightBanked (1 << 0), // TrackElemType::DiagUp25LeftBanked (1 << 0), // TrackElemType::DiagDown25RightBanked (1 << 0), // TrackElemType::DiagDown25LeftBanked (1 << 0), // TrackElemType::RightEighthBankToDiagUp25 (1 << 0), // TrackElemType::LeftEighthBankToDiagUp25 (1 << 0), // TrackElemType::RightEighthBankToDiagDown25 (1 << 0), // TrackElemType::LeftEighthBankToDiagDown25 (1 << 0), // TrackElemType::RightEighthBankToOrthogonalUp25 (1 << 0), // TrackElemType::LeftEighthBankToOrthogonalUp25 (1 << 0), // TrackElemType::RightEighthBankToOrthogonalDown25 (1 << 0), // TrackElemType::LeftEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackHeightMarkerPositions) == TrackElemType::Count); /** rct2: 0x00999A94 */ static constexpr uint8_t TrackSequenceElementAllowedWallEdges[][MaxSequencesPerPiece] = { { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Flat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::EndStation { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BeginStation { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MiddleStation { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToUp60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60ToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToDown60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60ToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToFlat { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn5Tiles { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn5Tiles { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToLeftBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToRightBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankToFlat { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BankedLeftQuarterTurn5Tiles { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BankedRightQuarterTurn5Tiles { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToLeftBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToRightBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToLeftBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToRightBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBank { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn5TilesUp25 { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn5TilesUp25 { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn5TilesDown25 { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn5TilesDown25 { 0b1010, 0b0011, 0b1100, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::SBendLeft { 0b1010, 0b1001, 0b0110, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::SBendRight { 0b0010, 0b0010, 0b0011, 0, 0, 0, 0, 0b1100, 0b1000, 0b1000, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftVerticalLoop { 0b1000, 0b1000, 0b1001, 0, 0, 0, 0, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightVerticalLoop { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn3Tiles { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn3Tiles { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedQuarterTurn3Tiles { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedQuarterTurn3Tiles { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn3TilesUp25 { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn3TilesUp25 { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn3TilesDown25 { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn3TilesDown25 { 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn1Tile { 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn1Tile { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftTwistDownToUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightTwistDownToUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftTwistUpToDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightTwistUpToDown { 0b1010, 0b1010, 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::HalfLoopUp { 0, 0b1011, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::HalfLoopDown { 0b1010, 0b0011, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftCorkscrewUp { 0b1010, 0b1001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightCorkscrewUp { 0b1010, 0b0011, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftCorkscrewDown { 0b1010, 0b1001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightCorkscrewDown { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToUp60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60ToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToDown60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60ToFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::TowerBase { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::TowerSection { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatCovered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToUp25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToUp60Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60ToUp25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToFlatCovered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToDown25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToDown60Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60ToDown25Covered { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToFlatCovered { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn5TilesCovered { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn5TilesCovered { 0b1010, 0b0011, 0b1100, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::SBendLeftCovered { 0b1010, 0b1001, 0b0110, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::SBendRightCovered { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn3TilesCovered { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn3TilesCovered { 0b0010, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftHalfBankedHelixUpSmall { 0b1000, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightHalfBankedHelixUpSmall { 0b0010, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftHalfBankedHelixDownSmall { 0b1000, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightHalfBankedHelixDownSmall { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b1000, 0, 0 }, // TrackElemType::LeftHalfBankedHelixUpLarge { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0010, 0, 0 }, // TrackElemType::RightHalfBankedHelixUpLarge { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0b0001, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b1000, 0, 0 }, // TrackElemType::LeftHalfBankedHelixDownLarge { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0b0001, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0010, 0, 0 }, // TrackElemType::RightHalfBankedHelixDownLarge { 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn1TileUp60 { 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn1TileUp60 { 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn1TileDown60 { 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn1TileDown60 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Brakes { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Booster { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterBankedHelixLargeUp { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterBankedHelixLargeUp { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterBankedHelixLargeDown { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterBankedHelixLargeDown { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterHelixLargeUp { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterHelixLargeUp { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterHelixLargeDown { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterHelixLargeDown { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25LeftBanked { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25RightBanked { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Waterfall { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Rapids { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::OnRidePhoto { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25LeftBanked { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25RightBanked { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Watersplash { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToUp60LongBase { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60ToFlatLongBase { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Whirlpool { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60ToFlatLongBase { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToDown60LongBase { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::CableLiftHill { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::ReverseFreefallSlope { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::ReverseFreefallVertical { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up90 { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down90 { 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up60ToUp90 { 0b1110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down90ToDown60 { 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up90ToUp60 { 0b1110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down60ToDown90 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BrakeForDrop { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiag { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiag { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonal { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonal { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiag { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiag { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonal { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonal { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToUp25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToUp60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp60ToUp25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToDown25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToDown60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown60ToDown25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToUp60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp60ToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToDown60 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown60ToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankToFlat { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankToUp25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankToUp25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToLeftBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToRightBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankToDown25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankToDown25 { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToLeftBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToRightBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBank { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBank { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LogFlumeReverser { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::SpinningTunnel { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBarrelRollUpToDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBarrelRollUpToDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBarrelRollDownToUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBarrelRollDownToUp { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankToRightQuarterTurn3TilesUp25 { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn3TilesDown25ToRightBank { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::PoweredLift { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeHalfLoopUp { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeHalfLoopUp { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeHalfLoopDown { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeHalfLoopDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerTwistUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerTwistUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerTwistDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerTwistDown { 0b1010, 0b1010, 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlyerHalfLoopUninvertedUp { 0, 0b1011, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlyerHalfLoopInvertedDown { 0b1010, 0b0011, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerCorkscrewUp { 0b1010, 0b1001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerCorkscrewUp { 0b1010, 0b0011, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerCorkscrewDown { 0b1010, 0b1001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerCorkscrewDown { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::HeartLineTransferUp { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::HeartLineTransferDown { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftHeartLineRoll { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightHeartLineRoll { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MinigolfHoleA { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MinigolfHoleB { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MinigolfHoleC { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MinigolfHoleD { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MinigolfHoleE { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up90ToInvertedFlatQuarterLoop { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::InvertedFlatToDown90QuarterLoop { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftCurvedLiftHill { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightCurvedLiftHill { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftReverser { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightReverser { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::AirThrustTopCap { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::AirThrustVerticalDown { 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::AirThrustVerticalDownToLevel { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::BlockBrakes { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedQuarterTurn3TileUp25 { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedQuarterTurn3TileUp25 { 0b0010, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedQuarterTurn3TileDown25 { 0b1000, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedQuarterTurn3TileDown25 { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedQuarterTurn5TileUp25 { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedQuarterTurn5TileUp25 { 0b0010, 0b1100, 0b0011, 0, 0b1100, 0b0011, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedQuarterTurn5TileDown25 { 0b1000, 0b0110, 0b1001, 0, 0b0110, 0b1001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedQuarterTurn5TileDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToLeftBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Up25ToRightBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedUp25ToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedUp25ToUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToLeftBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::Down25ToRightBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedDown25ToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedDown25ToDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedFlatToLeftBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedFlatToRightBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedUp25ToLeftBankedFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedUp25ToRightBankedFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedFlatToLeftBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedFlatToRightBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedDown25ToLeftBankedFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedDown25ToRightBankedFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToLeftBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToRightBankedUp25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedUp25ToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedUp25ToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToLeftBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatToRightBankedDown25 { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftBankedDown25ToFlat { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightBankedDown25ToFlat { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn1TileUp90 { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn1TileUp90 { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftQuarterTurn1TileDown90 { 0b1111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightQuarterTurn1TileDown90 { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MultiDimFlatToDown90QuarterLoop { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop { 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RotationControlToggle { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x4A { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack2x2 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack4x4 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack2x4 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x5 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x1A { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x4B { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x1B { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack1x4C { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlatTrack3x3 { 0b1010, 0b0010, 0b0011, 0b1100, 0b0001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeCorkscrewUp { 0b1010, 0b1000, 0b1001, 0b0110, 0b0001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeCorkscrewUp { 0b1010, 0b0010, 0b1100, 0b0011, 0b0001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeCorkscrewDown { 0b1010, 0b1000, 0b0110, 0b1001, 0b0001, 0b0101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeCorkscrewDown { 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftMediumHalfLoopUp { 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightMediumHalfLoopUp { 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftMediumHalfLoopDown { 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightMediumHalfLoopDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftZeroGRollUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightZeroGRollUp { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftZeroGRollDown { 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightZeroGRollDown { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeZeroGRollUp { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeZeroGRollUp { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftLargeZeroGRollDown { 0b1010, 0b1010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightLargeZeroGRollDown { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown { 0b1010, 0b1010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1000, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp { 0b1010, 0b1010, 0b1000, 0b1001, 0b0011, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp { 0b0010, 0b0010, 0b0011, 0b1001, 0b1000, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown { 0b1000, 0b1000, 0b1001, 0b0011, 0b0010, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown { 0b1010, 0b1010, 0b1011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlyerHalfLoopInvertedUp { 0, 0b1011, 0b1010, 0b1010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::FlyerHalfLoopUninvertedDown { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25RightBanked { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25LeftBanked { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25RightBanked { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25LeftBanked { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackSequenceElementAllowedWallEdges) == TrackElemType::Count); /** rct2: 0x0099423C */ static constexpr uint16_t TrackFlags[] = { /* TrackElemType::Flat */ TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::EndStation */ 0, /* TrackElemType::BeginStation */ 0, /* TrackElemType::MiddleStation */ 0, /* TrackElemType::Up25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::FlatToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up25ToUp60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up60ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::FlatToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down25ToDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down60ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::LeftQuarterTurn5Tiles */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightQuarterTurn5Tiles */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::FlatToLeftBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::FlatToRightBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankToFlat */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankToFlat */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::BankedLeftQuarterTurn5Tiles */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::BankedRightQuarterTurn5Tiles */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25ToLeftBank */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25ToRightBank */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Down25ToLeftBank */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Down25ToRightBank */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterTurn5TilesUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightQuarterTurn5TilesUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftQuarterTurn5TilesDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightQuarterTurn5TilesDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::SBendLeft */ 0, /* TrackElemType::SBendRight */ 0, /* TrackElemType::LeftVerticalLoop */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightVerticalLoop */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftQuarterTurn3Tiles */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightQuarterTurn3Tiles */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::LeftBankedQuarterTurn3Tiles */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedQuarterTurn3Tiles */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterTurn3TilesUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightQuarterTurn3TilesUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftQuarterTurn3TilesDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightQuarterTurn3TilesDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftQuarterTurn1Tile */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightQuarterTurn1Tile */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::LeftTwistDownToUp */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightTwistDownToUp */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftTwistUpToDown */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightTwistUpToDown */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::HalfLoopUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::HalfLoopDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::FlatToUp60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up60ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::FlatToDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Down60ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::TowerBase */ 0, /* TrackElemType::TowerSection */ 0, /* TrackElemType::FlatCovered */ 0, /* TrackElemType::Up25Covered */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Up60Covered */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::FlatToUp25Covered */ TRACK_ELEM_FLAG_UP, /* TrackElemType::Up25ToUp60Covered */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Up60ToUp25Covered */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Up25ToFlatCovered */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down25Covered */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down60Covered */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::FlatToDown25Covered */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down25ToDown60Covered */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down60ToDown25Covered */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down25ToFlatCovered */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::LeftQuarterTurn5TilesCovered */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightQuarterTurn5TilesCovered */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::SBendLeftCovered */ 0, /* TrackElemType::SBendRightCovered */ 0, /* TrackElemType::LeftQuarterTurn3TilesCovered */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightQuarterTurn3TilesCovered */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::LeftHalfBankedHelixUpSmall */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightHalfBankedHelixUpSmall */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftHalfBankedHelixDownSmall */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightHalfBankedHelixDownSmall */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftHalfBankedHelixUpLarge */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightHalfBankedHelixUpLarge */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftHalfBankedHelixDownLarge */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightHalfBankedHelixDownLarge */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterTurn1TileUp60 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::RightQuarterTurn1TileUp60 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftQuarterTurn1TileDown60 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::RightQuarterTurn1TileDown60 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Brakes */ 0, /* TrackElemType::Booster */ 0, /* TrackElemType::InvertedUp90ToFlatQuarterLoopAlias / Maze */ TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND, /* TrackElemType::LeftQuarterBankedHelixLargeUp */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightQuarterBankedHelixLargeUp */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterBankedHelixLargeDown */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightQuarterBankedHelixLargeDown */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterHelixLargeUp */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, /* TrackElemType::RightQuarterHelixLargeUp */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, /* TrackElemType::LeftQuarterHelixLargeDown */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_HELIX, /* TrackElemType::RightQuarterHelixLargeDown */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_HELIX, /* TrackElemType::Up25LeftBanked */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25RightBanked */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Waterfall */ 0, /* TrackElemType::Rapids */ 0, /* TrackElemType::OnRidePhoto */ 0, /* TrackElemType::Down25LeftBanked */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Down25RightBanked */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Watersplash */ 0, /* TrackElemType::FlatToUp60LongBase */ TRACK_ELEM_FLAG_UP, /* TrackElemType::Up60ToFlatLongBase */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Whirlpool */ 0, /* TrackElemType::Down60ToFlatLongBase */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::FlatToDown60LongBase */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::CableLiftHill */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::ReverseFreefallSlope */ TRACK_ELEM_FLAG_UP, /* TrackElemType::ReverseFreefallVertical */ TRACK_ELEM_FLAG_UP, /* TrackElemType::Up90 */ TRACK_ELEM_FLAG_UP, /* TrackElemType::Down90 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up60ToUp90 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down90ToDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::Up90ToUp60 */ TRACK_ELEM_FLAG_UP, /* TrackElemType::Down60ToDown90 */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::BrakeForDrop */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftEighthToDiag */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightEighthToDiag */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::LeftEighthToOrthogonal */ TRACK_ELEM_FLAG_TURN_LEFT, /* TrackElemType::RightEighthToOrthogonal */ TRACK_ELEM_FLAG_TURN_RIGHT, /* TrackElemType::LeftEighthBankToDiag */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightEighthBankToDiag */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftEighthBankToOrthogonal */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightEighthBankToOrthogonal */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_BANKED | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagFlat */ TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagFlatToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp25ToUp60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp60ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagFlatToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown25ToDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown60ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagFlatToUp60 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagUp60ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_IS_STEEP_UP | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagFlatToDown60 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagDown60ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL, /* TrackElemType::DiagFlatToLeftBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagFlatToRightBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagLeftBankToFlat */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankToFlat */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagLeftBankToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagUp25ToLeftBank */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagUp25ToRightBank */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagLeftBankToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagDown25ToLeftBank */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::DiagDown25ToRightBank */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::DiagLeftBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBank */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LogFlumeReverser */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::SpinningTunnel */ TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBarrelRollUpToDown */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightBarrelRollUpToDown */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftBarrelRollDownToUp */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightBarrelRollDownToUp */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankToRightQuarterTurn3TilesUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightQuarterTurn3TilesDown25ToRightBank */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::PoweredLift */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftLargeHalfLoopUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeHalfLoopUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftLargeHalfLoopDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeHalfLoopDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerTwistUp */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightFlyerTwistUp */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerTwistDown */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightFlyerTwistDown */ TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::FlyerHalfLoopUninvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::FlyerHalfLoopInvertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightFlyerCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightFlyerCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::HeartLineTransferUp */ 0, /* TrackElemType::HeartLineTransferDown */ 0, /* TrackElemType::LeftHeartLineRoll */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightHeartLineRoll */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::MinigolfHoleA */ TRACK_ELEM_FLAG_IS_GOLF_HOLE, /* TrackElemType::MinigolfHoleB */ TRACK_ELEM_FLAG_IS_GOLF_HOLE, /* TrackElemType::MinigolfHoleC */ TRACK_ELEM_FLAG_IS_GOLF_HOLE, /* TrackElemType::MinigolfHoleD */ TRACK_ELEM_FLAG_IS_GOLF_HOLE, /* TrackElemType::MinigolfHoleE */ TRACK_ELEM_FLAG_IS_GOLF_HOLE, /* TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::Up90ToInvertedFlatQuarterLoop */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::InvertedFlatToDown90QuarterLoop */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftCurvedLiftHill */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_UP, /* TrackElemType::RightCurvedLiftHill */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_UP, /* TrackElemType::LeftReverser */ 0, /* TrackElemType::RightReverser */ 0, /* TrackElemType::AirThrustTopCap */ 0, /* TrackElemType::AirThrustVerticalDown */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::AirThrustVerticalDownToLevel */ TRACK_ELEM_FLAG_DOWN, /* TrackElemType::BlockBrakes */ 0, /* TrackElemType::LeftBankedQuarterTurn3TileUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedQuarterTurn3TileUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedQuarterTurn3TileDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedQuarterTurn3TileDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedQuarterTurn5TileUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedQuarterTurn5TileUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedQuarterTurn5TileDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedQuarterTurn5TileDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25ToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25ToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedUp25ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedUp25ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Down25ToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Down25ToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedDown25ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedDown25ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedFlatToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedFlatToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedUp25ToLeftBankedFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedUp25ToRightBankedFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedFlatToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedFlatToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedDown25ToLeftBankedFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedDown25ToRightBankedFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::FlatToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::FlatToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedUp25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedUp25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::FlatToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::FlatToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftBankedDown25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::RightBankedDown25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::LeftQuarterTurn1TileUp90 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, /* TrackElemType::RightQuarterTurn1TileUp90 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP, /* TrackElemType::LeftQuarterTurn1TileDown90 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, /* TrackElemType::RightQuarterTurn1TileDown90 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN, /* TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::MultiDimFlatToDown90QuarterLoop */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RotationControlToggle */ 0, /* TrackElemType::FlatTrack1x4A */ 0, /* TrackElemType::FlatTrack2x2 */ 0, /* TrackElemType::FlatTrack4x4 */ 0, /* TrackElemType::FlatTrack2x4 */ TRACK_ELEM_FLAG_ONLY_ABOVE_GROUND, /* TrackElemType::FlatTrack1x5 */ 0, /* TrackElemType::FlatTrack1x1A */ 0, /* TrackElemType::FlatTrack1x4B */ 0, /* TrackElemType::FlatTrack1x1B */ 0, /* TrackElemType::FlatTrack1x4C */ 0, /* TrackElemType::FlatTrack3x3 */ 0, /* TrackElemType::LeftLargeCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeCorkscrewUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftLargeCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeCorkscrewDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftMediumHalfLoopUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightMediumHalfLoopUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftMediumHalfLoopDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightMediumHalfLoopDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftZeroGRollUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightZeroGRollUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftZeroGRollDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightZeroGRollDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftLargeZeroGRollUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeZeroGRollUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftLargeZeroGRollDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightLargeZeroGRollDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::RightFlyerLargeHalfLoopUninvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftFlyerLargeHalfLoopInvertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::RightFlyerLargeHalfLoopInvertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL, /* TrackElemType::LeftFlyerLargeHalfLoopInvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::RightFlyerLargeHalfLoopInvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION, /* TrackElemType::RightFlyerLargeHalfLoopUninvertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION, /* TrackElemType::FlyerHalfLoopInvertedUp */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::FlyerHalfLoopUnivertedDown */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_NORMAL_TO_INVERSION, /* TrackElemType::LeftEighthToDiagUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthToDiagUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthToDiagDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthToDiagDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthToOrthogonalUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthToOrthogonalUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthToOrthogonalDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthToOrthogonalDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::DiagUp25ToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagUp25ToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedUp25ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagRightBankedUp25ToUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagDown25ToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagDown25ToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedDown25ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagRightBankedDown25ToDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankedFlatToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagRightBankedUp25ToRightBankedFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagRightBankedFlatToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankedDown25ToRightBankedFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagFlatToLeftBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagFlatToRightBankedUp25 */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagLeftBankedUp25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagRightBankedUp25ToFlat */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagFlatToLeftBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagFlatToRightBankedDown25 */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::DiagLeftBankedDown25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::DiagRightBankedDown25ToFlat */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED, /* TrackElemType::Up25LeftBanked */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Up25RightBanked */ TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down25LeftBanked */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::Down25RightBanked */ TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_BANKED | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT, /* TrackElemType::LeftEighthBankToDiagUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthBankToDiagUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthBankToDiagDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthBankToDiagDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthBankToOrthogonalUp25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthBankToOrthogonalUp25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_UP | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::LeftEighthBankToOrthogonalDown25 */ TRACK_ELEM_FLAG_TURN_LEFT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, /* TrackElemType::RightEighthBankToOrthogonalDown25 */ TRACK_ELEM_FLAG_TURN_RIGHT | TRACK_ELEM_FLAG_TURN_SLOPED | TRACK_ELEM_FLAG_DOWN | TRACK_ELEM_FLAG_STARTS_AT_HALF_HEIGHT | TRACK_ELEM_FLAG_ALLOW_LIFT_HILL | TRACK_ELEM_FLAG_CURVE_ALLOWS_LIFT, }; static_assert(std::size(TrackFlags) == TrackElemType::Count); // clang-format on /** rct2: 0x00997C9D */ // clang-format off 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, 0 }, // TrackElemType::LeftLargeCorkscrewUp { TRACK_CORKSCREW_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_NONE, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // 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, 0 }, // TrackElemType::LeftLargeZeroGRollUp { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_NONE, TRACK_SLOPE_UP_60, TRACK_BANK_UPSIDE_DOWN, TRACK_BANK_NONE, 0 }, // TrackElemType::RightLargeZeroGRollUp { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // TrackElemType::LeftLargeZeroGRollDown { TRACK_ZERO_G_ROLL_LARGE, TRACK_SLOPE_DOWN_60, TRACK_SLOPE_NONE, TRACK_BANK_NONE, TRACK_BANK_UPSIDE_DOWN, 0 }, // 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, 0 }, // TrackElemType::LeftEighthToDiagUp25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::RightEighthToDiagUp25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::LeftEighthToDiagDown25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::RightEighthToDiagDown25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::LeftEighthToOrthogonalUp25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::RightEighthToOrthogonalUp25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 { TRACK_SLOPE_CURVE_LARGE, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_NONE, TRACK_BANK_NONE, 0 }, // 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, 0 }, // TrackElemType::LeftEighthBankToDiagUp25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::RightEighthBankToDiagUp25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::LeftEighthBankToDiagDown25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::RightEighthBankToDiagDown25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_UP_25, TRACK_SLOPE_UP_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_LEFT, TRACK_BANK_LEFT, 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 { TRACK_SLOPE_CURVE_LARGE_BANKED, TRACK_SLOPE_DOWN_25, TRACK_SLOPE_DOWN_25, TRACK_BANK_RIGHT, TRACK_BANK_RIGHT, 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(TrackDefinitions) == TrackElemType::Count); // clang-format on constexpr static uint8_t TrackTypeToSpinFunction[] = { NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, RL_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L5_SPIN, R5_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, LR_SPIN, RL_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L5_SPIN, R5_SPIN, L5_SPIN, R5_SPIN, NO_SPIN, RC_SPIN, NO_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, SP_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, R5_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, L7_SPIN, R7_SPIN, L7_SPIN, R7_SPIN, L8_SPIN, R8_SPIN, L8_SPIN, R8_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, NO_SPIN, }; static_assert(std::size(TrackTypeToSpinFunction) == TrackElemType::Count); template static int32_t EvaluatorConst(const int16_t) { return TConstant; } static int32_t EvaluatorVerticalLoop(const int16_t progress) { return (abs(progress - 155) / 2) + 28; } static int32_t EvaluatorHalfLoopUp(const int16_t progress) { return ((static_cast(-(progress - 155))) / 2) + 28; } static int32_t EvaluatorHalfLoopDown(const int16_t progress) { return (progress / 2) + 28; } static int32_t EvaluatorLargeZeroGRollUp(const int16_t progress) { if (progress > 114) return (371 - 2 * progress); return 0; } static int32_t EvaluatorLargeZeroGRollDown(const int16_t progress) { if (progress < 38) return 67 + 2 * progress; return 0; } static int32_t EvaluatorLargeZeroGRollUpLeft(const int16_t progress) { return 387 - 2 * progress; } static int32_t EvaluatorLargeZeroGRollUpRight(const int16_t progress) { return 2 * progress - 387; } static int32_t EvaluatorLargeZeroGRollDownLeft(const int16_t progress) { return 83 + 2 * progress; } static int32_t EvaluatorLargeZeroGRollDownRight(const int16_t progress) { return -(83 + 2 * progress); } static int32_t EvaluatorZeroGRollUpLeft(const int16_t progress) { return 174 - progress; } static int32_t EvaluatorZeroGRollUpRight(const int16_t progress) { return progress - 174; } static int32_t EvaluatorZeroGRollDownLeft(const int16_t progress) { return 73 + progress; } static int32_t EvaluatorZeroGRollDownRight(const int16_t progress) { return -(73 + progress); } static int32_t EvaluatorWaterSplash(const int16_t progress) { if (progress < 32) return -150; if (progress < 64) return 150; if (progress < 96) return 0; if (progress < 128) return 150; return -150; } static int32_t EvaluatorQuarterTurn3Tiles(const int16_t progress) { return -(progress / 2) + 134; } static int32_t EvaluatorMediumHalfLoopUp(const int16_t progress) { return (244 - progress) / 4 + 51; } static int32_t EvaluatorMediumHalfLoopDown(const int16_t progress) { return (progress / 4) + 51; } static int32_t EvaluatorLargeHalfLoopUp(const int16_t progress) { return ((static_cast(-(progress - 311))) / 4) + 46; } static int32_t EvaluatorLargeHalfLoopDown(const int16_t progress) { return (progress / 4) + 46; } static int32_t EvaluatorHeartLineTransferUp(const int16_t progress) { if (progress < 32) return 103; if (progress < 64) return -103; if (progress < 96) return 0; if (progress < 128) return 103; return -103; } static int32_t EvaluatorHeartLineTransferDown(const int16_t progress) { if (progress < 32) return -103; if (progress < 64) return 103; if (progress < 96) return 0; if (progress < 128) return -103; return 103; } static int32_t EvaluatorDown90QuarterLoop(const int16_t progress) { return (progress / 4) + 55; } static int32_t EvaluatorUp90QuarterLoop(const int16_t progress) { return ((static_cast(-(progress - 137))) / 4) + 55; } static int32_t EvaluatorSBendLeft(const int16_t progress) { return (progress < 48) ? 98 : -98; } static int32_t EvaluatorSBendRight(const int16_t progress) { return (progress < 48) ? -98 : 98; } static constexpr TrackComputeFunction GetLateralFunction(const uint16_t type) { switch (type) { case TrackElemType::Flat: case TrackElemType::EndStation: case TrackElemType::BeginStation: case TrackElemType::MiddleStation: case TrackElemType::Up25: case TrackElemType::Up60: // case TrackElemType::Down25: case TrackElemType::Down60: // case TrackElemType::FlatToLeftBank: case TrackElemType::FlatToRightBank: case TrackElemType::LeftBankToFlat: case TrackElemType::RightBankToFlat: // case TrackElemType::LeftBank: case TrackElemType::RightBank: case TrackElemType::TowerBase: case TrackElemType::TowerSection: case TrackElemType::FlatCovered: case TrackElemType::Up25Covered: case TrackElemType::Up60Covered: case TrackElemType::Down25Covered: case TrackElemType::Down60Covered: case TrackElemType::Brakes: case TrackElemType::RotationControlToggle: case TrackElemType::Maze: case TrackElemType::Up25LeftBanked: case TrackElemType::Up25RightBanked: case TrackElemType::Waterfall: case TrackElemType::Rapids: case TrackElemType::OnRidePhoto: case TrackElemType::Down25LeftBanked: case TrackElemType::Down25RightBanked: case TrackElemType::Whirlpool: case TrackElemType::ReverseFreefallVertical: case TrackElemType::Up90: case TrackElemType::Down90: case TrackElemType::DiagFlat: case TrackElemType::DiagUp25: case TrackElemType::DiagUp60: case TrackElemType::DiagDown25: case TrackElemType::DiagDown60: case TrackElemType::DiagFlatToLeftBank: case TrackElemType::DiagFlatToRightBank: case TrackElemType::DiagLeftBankToFlat: case TrackElemType::DiagRightBankToFlat: case TrackElemType::DiagLeftBank: case TrackElemType::DiagRightBank: case TrackElemType::LogFlumeReverser: case TrackElemType::SpinningTunnel: case TrackElemType::PoweredLift: case TrackElemType::MinigolfHoleA: case TrackElemType::MinigolfHoleB: case TrackElemType::MinigolfHoleC: case TrackElemType::MinigolfHoleD: case TrackElemType::MinigolfHoleE: case TrackElemType::LeftReverser: case TrackElemType::RightReverser: case TrackElemType::AirThrustVerticalDown: case TrackElemType::BlockBrakes: case TrackElemType::Up25ToLeftBankedUp25: case TrackElemType::Up25ToRightBankedUp25: case TrackElemType::LeftBankedUp25ToUp25: case TrackElemType::RightBankedUp25ToUp25: case TrackElemType::Down25ToLeftBankedDown25: case TrackElemType::Down25ToRightBankedDown25: case TrackElemType::LeftBankedDown25ToDown25: case TrackElemType::RightBankedDown25ToDown25: case TrackElemType::LeftQuarterTurn1TileUp90: case TrackElemType::RightQuarterTurn1TileUp90: case TrackElemType::LeftQuarterTurn1TileDown90: case TrackElemType::RightQuarterTurn1TileDown90: return EvaluatorConst<0>; case TrackElemType::FlatToUp25: // case TrackElemType::Down25ToFlat: // case TrackElemType::LeftBankToUp25: case TrackElemType::RightBankToUp25: case TrackElemType::Down25ToLeftBank: case TrackElemType::Down25ToRightBank: case TrackElemType::FlatToUp25Covered: case TrackElemType::Down25ToFlatCovered: case TrackElemType::LeftBankedFlatToLeftBankedUp25: case TrackElemType::RightBankedFlatToRightBankedUp25: case TrackElemType::LeftBankedDown25ToLeftBankedFlat: case TrackElemType::RightBankedDown25ToRightBankedFlat: case TrackElemType::FlatToLeftBankedUp25: case TrackElemType::FlatToRightBankedUp25: case TrackElemType::LeftBankedDown25ToFlat: case TrackElemType::RightBankedDown25ToFlat: case TrackElemType::DiagUp25ToLeftBankedUp25: case TrackElemType::DiagUp25ToRightBankedUp25: case TrackElemType::DiagLeftBankedUp25ToUp25: case TrackElemType::DiagRightBankedUp25ToUp25: case TrackElemType::DiagDown25ToLeftBankedDown25: case TrackElemType::DiagDown25ToRightBankedDown25: case TrackElemType::DiagLeftBankedDown25ToDown25: case TrackElemType::DiagRightBankedDown25ToDown25: case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: case TrackElemType::DiagRightBankedFlatToRightBankedUp25: case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: case TrackElemType::DiagRightBankedFlatToRightBankedDown25: case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: case TrackElemType::DiagFlatToLeftBankedUp25: case TrackElemType::DiagFlatToRightBankedUp25: case TrackElemType::DiagLeftBankedUp25ToFlat: case TrackElemType::DiagRightBankedUp25ToFlat: case TrackElemType::DiagFlatToLeftBankedDown25: case TrackElemType::DiagFlatToRightBankedDown25: case TrackElemType::DiagLeftBankedDown25ToFlat: case TrackElemType::DiagRightBankedDown25ToFlat: case TrackElemType::DiagUp25LeftBanked: case TrackElemType::DiagUp25RightBanked: case TrackElemType::DiagDown25LeftBanked: case TrackElemType::DiagDown25RightBanked: return EvaluatorConst<0>; case TrackElemType::Up25ToFlat: // case TrackElemType::FlatToDown25: // case TrackElemType::Up25ToLeftBank: case TrackElemType::Up25ToRightBank: case TrackElemType::LeftBankToDown25: case TrackElemType::RightBankToDown25: case TrackElemType::Up25ToFlatCovered: case TrackElemType::FlatToDown25Covered: case TrackElemType::CableLiftHill: case TrackElemType::LeftBankedUp25ToLeftBankedFlat: case TrackElemType::RightBankedUp25ToRightBankedFlat: case TrackElemType::LeftBankedFlatToLeftBankedDown25: case TrackElemType::RightBankedFlatToRightBankedDown25: case TrackElemType::LeftBankedUp25ToFlat: case TrackElemType::RightBankedUp25ToFlat: case TrackElemType::FlatToLeftBankedDown25: case TrackElemType::FlatToRightBankedDown25: return EvaluatorConst<0>; case TrackElemType::Up25ToUp60: // case TrackElemType::Down60ToDown25: // case TrackElemType::Up25ToUp60Covered: case TrackElemType::Down60ToDown25Covered: return EvaluatorConst<0>; case TrackElemType::Up60ToUp25: // case TrackElemType::Down25ToDown60: // case TrackElemType::Up60ToUp25Covered: case TrackElemType::Down25ToDown60Covered: return EvaluatorConst<0>; case TrackElemType::LeftQuarterTurn5Tiles: // case TrackElemType::LeftQuarterTurn5TilesUp25: case TrackElemType::LeftQuarterTurn5TilesDown25: case TrackElemType::LeftTwistDownToUp: case TrackElemType::LeftTwistUpToDown: case TrackElemType::LeftQuarterTurn5TilesCovered: case TrackElemType::LeftQuarterHelixLargeUp: case TrackElemType::LeftQuarterHelixLargeDown: case TrackElemType::LeftFlyerTwistUp: case TrackElemType::LeftFlyerTwistDown: case TrackElemType::LeftHeartLineRoll: return EvaluatorConst<98>; case TrackElemType::RightQuarterTurn5Tiles: // case TrackElemType::RightQuarterTurn5TilesUp25: case TrackElemType::RightQuarterTurn5TilesDown25: case TrackElemType::RightTwistDownToUp: case TrackElemType::RightTwistUpToDown: case TrackElemType::RightQuarterTurn5TilesCovered: case TrackElemType::RightQuarterHelixLargeUp: case TrackElemType::RightQuarterHelixLargeDown: case TrackElemType::RightFlyerTwistUp: case TrackElemType::RightFlyerTwistDown: case TrackElemType::RightHeartLineRoll: return EvaluatorConst<-98>; case TrackElemType::BankedLeftQuarterTurn5Tiles: case TrackElemType::LeftHalfBankedHelixUpLarge: case TrackElemType::LeftHalfBankedHelixDownLarge: case TrackElemType::LeftQuarterBankedHelixLargeUp: case TrackElemType::LeftQuarterBankedHelixLargeDown: return EvaluatorConst<160>; case TrackElemType::BankedRightQuarterTurn5Tiles: case TrackElemType::RightHalfBankedHelixUpLarge: case TrackElemType::RightHalfBankedHelixDownLarge: case TrackElemType::RightQuarterBankedHelixLargeUp: case TrackElemType::RightQuarterBankedHelixLargeDown: return EvaluatorConst<-160>; case TrackElemType::SBendLeft: case TrackElemType::SBendLeftCovered: return EvaluatorSBendLeft; case TrackElemType::SBendRight: case TrackElemType::SBendRightCovered: return EvaluatorSBendRight; case TrackElemType::LeftVerticalLoop: case TrackElemType::RightVerticalLoop: return EvaluatorConst<0>; case TrackElemType::LeftQuarterTurn3Tiles: case TrackElemType::LeftQuarterTurn3TilesUp25: case TrackElemType::LeftQuarterTurn3TilesDown25: case TrackElemType::LeftQuarterTurn3TilesCovered: case TrackElemType::LeftCurvedLiftHill: return EvaluatorConst<59>; case TrackElemType::RightQuarterTurn3Tiles: case TrackElemType::RightQuarterTurn3TilesUp25: case TrackElemType::RightQuarterTurn3TilesDown25: case TrackElemType::RightQuarterTurn3TilesCovered: case TrackElemType::RightCurvedLiftHill: return EvaluatorConst<-59>; case TrackElemType::LeftBankedQuarterTurn3Tiles: case TrackElemType::LeftHalfBankedHelixUpSmall: case TrackElemType::LeftHalfBankedHelixDownSmall: return EvaluatorConst<100>; case TrackElemType::RightBankedQuarterTurn3Tiles: case TrackElemType::RightHalfBankedHelixUpSmall: case TrackElemType::RightHalfBankedHelixDownSmall: return EvaluatorConst<-100>; case TrackElemType::LeftQuarterTurn1Tile: return EvaluatorConst<45>; case TrackElemType::RightQuarterTurn1Tile: return EvaluatorConst<-45>; case TrackElemType::HalfLoopUp: case TrackElemType::FlyerHalfLoopUninvertedUp: case TrackElemType::FlyerHalfLoopInvertedUp: return EvaluatorConst<0>; case TrackElemType::HalfLoopDown: case TrackElemType::FlyerHalfLoopInvertedDown: case TrackElemType::FlyerHalfLoopUninvertedDown: return EvaluatorConst<0>; case TrackElemType::LeftLargeCorkscrewUp: case TrackElemType::RightLargeCorkscrewDown: return EvaluatorConst<117>; case TrackElemType::RightLargeCorkscrewUp: case TrackElemType::LeftLargeCorkscrewDown: return EvaluatorConst<-117>; case TrackElemType::LeftCorkscrewUp: case TrackElemType::RightCorkscrewDown: case TrackElemType::LeftFlyerCorkscrewUp: case TrackElemType::RightFlyerCorkscrewDown: return EvaluatorConst<70>; case TrackElemType::RightCorkscrewUp: case TrackElemType::LeftCorkscrewDown: case TrackElemType::RightFlyerCorkscrewUp: case TrackElemType::LeftFlyerCorkscrewDown: return EvaluatorConst<-70>; case TrackElemType::FlatToUp60: case TrackElemType::Down60ToFlat: return EvaluatorConst<0>; case TrackElemType::Up60ToFlat: case TrackElemType::FlatToDown60: case TrackElemType::BrakeForDrop: return EvaluatorConst<0>; case TrackElemType::LeftQuarterTurn1TileUp60: case TrackElemType::LeftQuarterTurn1TileDown60: return EvaluatorConst<88>; case TrackElemType::RightQuarterTurn1TileUp60: case TrackElemType::RightQuarterTurn1TileDown60: return EvaluatorConst<-88>; case TrackElemType::Watersplash: return EvaluatorConst<0>; case TrackElemType::FlatToUp60LongBase: case TrackElemType::Down60ToFlatLongBase: return EvaluatorConst<0>; case TrackElemType::Up60ToFlatLongBase: case TrackElemType::FlatToDown60LongBase: return EvaluatorConst<0>; case TrackElemType::ReverseFreefallSlope: case TrackElemType::AirThrustVerticalDownToLevel: return EvaluatorConst<0>; case TrackElemType::Up60ToUp90: case TrackElemType::Down90ToDown60: return EvaluatorConst<0>; case TrackElemType::Up90ToUp60: case TrackElemType::Down60ToDown90: return EvaluatorConst<0>; case TrackElemType::LeftEighthToDiag: case TrackElemType::LeftEighthToOrthogonal: case TrackElemType::LeftEighthToDiagUp25: case TrackElemType::LeftEighthToDiagDown25: case TrackElemType::LeftEighthToOrthogonalUp25: case TrackElemType::LeftEighthToOrthogonalDown25: return EvaluatorConst<137>; case TrackElemType::RightEighthToDiag: case TrackElemType::RightEighthToOrthogonal: case TrackElemType::RightEighthToDiagUp25: case TrackElemType::RightEighthToDiagDown25: case TrackElemType::RightEighthToOrthogonalUp25: case TrackElemType::RightEighthToOrthogonalDown25: return EvaluatorConst<-137>; case TrackElemType::LeftEighthBankToDiag: case TrackElemType::LeftEighthBankToOrthogonal: case TrackElemType::LeftEighthBankToDiagUp25: case TrackElemType::LeftEighthBankToDiagDown25: case TrackElemType::LeftEighthBankToOrthogonalUp25: case TrackElemType::LeftEighthBankToOrthogonalDown25: return EvaluatorConst<200>; case TrackElemType::RightEighthBankToDiag: case TrackElemType::RightEighthBankToOrthogonal: case TrackElemType::RightEighthBankToDiagUp25: case TrackElemType::RightEighthBankToDiagDown25: case TrackElemType::RightEighthBankToOrthogonalUp25: case TrackElemType::RightEighthBankToOrthogonalDown25: return EvaluatorConst<-200>; case TrackElemType::DiagFlatToUp25: case TrackElemType::DiagDown25ToFlat: case TrackElemType::DiagLeftBankToUp25: case TrackElemType::DiagRightBankToUp25: case TrackElemType::DiagDown25ToLeftBank: case TrackElemType::DiagDown25ToRightBank: return EvaluatorConst<0>; case TrackElemType::DiagUp25ToFlat: case TrackElemType::DiagFlatToDown25: case TrackElemType::DiagUp25ToLeftBank: case TrackElemType::DiagUp25ToRightBank: case TrackElemType::DiagLeftBankToDown25: case TrackElemType::DiagRightBankToDown25: return EvaluatorConst<0>; case TrackElemType::DiagUp25ToUp60: case TrackElemType::DiagDown60ToDown25: return EvaluatorConst<0>; case TrackElemType::DiagUp60ToUp25: case TrackElemType::DiagDown25ToDown60: return EvaluatorConst<0>; case TrackElemType::DiagFlatToUp60: case TrackElemType::DiagDown60ToFlat: return EvaluatorConst<0>; case TrackElemType::DiagUp60ToFlat: case TrackElemType::DiagFlatToDown60: return EvaluatorConst<0>; case TrackElemType::LeftBarrelRollUpToDown: case TrackElemType::LeftBarrelRollDownToUp: return EvaluatorConst<115>; case TrackElemType::RightBarrelRollUpToDown: case TrackElemType::RightBarrelRollDownToUp: return EvaluatorConst<-115>; case TrackElemType::LeftZeroGRollUp: return EvaluatorZeroGRollUpLeft; case TrackElemType::RightZeroGRollUp: return EvaluatorZeroGRollUpRight; case TrackElemType::LeftZeroGRollDown: return EvaluatorZeroGRollDownLeft; case TrackElemType::RightZeroGRollDown: return EvaluatorZeroGRollDownRight; case TrackElemType::LeftLargeZeroGRollUp: return EvaluatorLargeZeroGRollUpLeft; case TrackElemType::RightLargeZeroGRollUp: return EvaluatorLargeZeroGRollUpRight; case TrackElemType::LeftLargeZeroGRollDown: return EvaluatorLargeZeroGRollDownLeft; case TrackElemType::RightLargeZeroGRollDown: return EvaluatorLargeZeroGRollDownRight; case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: return EvaluatorConst<90>; case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: return EvaluatorConst<-90>; case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: return EvaluatorConst<90>; case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: return EvaluatorConst<-90>; case TrackElemType::LeftLargeHalfLoopUp: case TrackElemType::RightLargeHalfLoopUp: return EvaluatorConst<0>; case TrackElemType::LeftLargeHalfLoopDown: case TrackElemType::RightLargeHalfLoopDown: return EvaluatorConst<0>; case TrackElemType::HeartLineTransferUp: return EvaluatorConst<0>; case TrackElemType::HeartLineTransferDown: return EvaluatorConst<0>; case TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop: case TrackElemType::InvertedFlatToDown90QuarterLoop: case TrackElemType::MultiDimFlatToDown90QuarterLoop: return EvaluatorConst<0>; case TrackElemType::Up90ToInvertedFlatQuarterLoop: case TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop: case TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop: return EvaluatorConst<0>; case TrackElemType::AirThrustTopCap: return EvaluatorConst<0>; case TrackElemType::LeftBankedQuarterTurn3TileUp25: case TrackElemType::LeftBankedQuarterTurn3TileDown25: return EvaluatorConst<100>; case TrackElemType::RightBankedQuarterTurn3TileUp25: case TrackElemType::RightBankedQuarterTurn3TileDown25: return EvaluatorConst<-100>; case TrackElemType::LeftBankedQuarterTurn5TileUp25: case TrackElemType::LeftBankedQuarterTurn5TileDown25: return EvaluatorConst<160>; case TrackElemType::RightBankedQuarterTurn5TileUp25: case TrackElemType::RightBankedQuarterTurn5TileDown25: return EvaluatorConst<-160>; default: return EvaluatorConst<0>; } } static constexpr TrackComputeFunction GetVerticalFunction(const uint16_t type) { switch (type) { case TrackElemType::Flat: case TrackElemType::EndStation: case TrackElemType::BeginStation: case TrackElemType::MiddleStation: case TrackElemType::Up25: case TrackElemType::Up60: // case TrackElemType::Down25: case TrackElemType::Down60: // case TrackElemType::FlatToLeftBank: case TrackElemType::FlatToRightBank: case TrackElemType::LeftBankToFlat: case TrackElemType::RightBankToFlat: // case TrackElemType::LeftBank: case TrackElemType::RightBank: case TrackElemType::TowerBase: case TrackElemType::TowerSection: case TrackElemType::FlatCovered: case TrackElemType::Up25Covered: case TrackElemType::Up60Covered: case TrackElemType::Down25Covered: case TrackElemType::Down60Covered: case TrackElemType::Brakes: case TrackElemType::RotationControlToggle: case TrackElemType::Maze: case TrackElemType::Up25LeftBanked: case TrackElemType::Up25RightBanked: case TrackElemType::Waterfall: case TrackElemType::Rapids: case TrackElemType::OnRidePhoto: case TrackElemType::Down25LeftBanked: case TrackElemType::Down25RightBanked: case TrackElemType::Whirlpool: case TrackElemType::ReverseFreefallVertical: case TrackElemType::Up90: case TrackElemType::Down90: case TrackElemType::DiagFlat: case TrackElemType::DiagUp25: case TrackElemType::DiagUp60: case TrackElemType::DiagDown25: case TrackElemType::DiagDown60: case TrackElemType::DiagFlatToLeftBank: case TrackElemType::DiagFlatToRightBank: case TrackElemType::DiagLeftBankToFlat: case TrackElemType::DiagRightBankToFlat: case TrackElemType::DiagLeftBank: case TrackElemType::DiagRightBank: case TrackElemType::LogFlumeReverser: case TrackElemType::SpinningTunnel: case TrackElemType::PoweredLift: case TrackElemType::MinigolfHoleA: case TrackElemType::MinigolfHoleB: case TrackElemType::MinigolfHoleC: case TrackElemType::MinigolfHoleD: case TrackElemType::MinigolfHoleE: case TrackElemType::LeftReverser: case TrackElemType::RightReverser: case TrackElemType::AirThrustVerticalDown: case TrackElemType::BlockBrakes: case TrackElemType::Up25ToLeftBankedUp25: case TrackElemType::Up25ToRightBankedUp25: case TrackElemType::LeftBankedUp25ToUp25: case TrackElemType::RightBankedUp25ToUp25: case TrackElemType::Down25ToLeftBankedDown25: case TrackElemType::Down25ToRightBankedDown25: case TrackElemType::LeftBankedDown25ToDown25: case TrackElemType::RightBankedDown25ToDown25: case TrackElemType::LeftQuarterTurn1TileUp90: case TrackElemType::RightQuarterTurn1TileUp90: case TrackElemType::LeftQuarterTurn1TileDown90: case TrackElemType::RightQuarterTurn1TileDown90: case TrackElemType::LeftEighthToDiagUp25: case TrackElemType::RightEighthToDiagUp25: case TrackElemType::LeftEighthToDiagDown25: case TrackElemType::RightEighthToDiagDown25: case TrackElemType::LeftEighthToOrthogonalUp25: case TrackElemType::RightEighthToOrthogonalUp25: case TrackElemType::LeftEighthToOrthogonalDown25: case TrackElemType::RightEighthToOrthogonalDown25: case TrackElemType::DiagUp25ToLeftBankedUp25: case TrackElemType::DiagUp25ToRightBankedUp25: case TrackElemType::DiagLeftBankedUp25ToUp25: case TrackElemType::DiagRightBankedUp25ToUp25: case TrackElemType::DiagDown25ToLeftBankedDown25: case TrackElemType::DiagDown25ToRightBankedDown25: case TrackElemType::DiagLeftBankedDown25ToDown25: case TrackElemType::DiagRightBankedDown25ToDown25: case TrackElemType::DiagUp25LeftBanked: case TrackElemType::DiagUp25RightBanked: case TrackElemType::DiagDown25LeftBanked: case TrackElemType::DiagDown25RightBanked: return EvaluatorConst<0>; case TrackElemType::FlatToUp25: // case TrackElemType::Down25ToFlat: // case TrackElemType::LeftBankToUp25: case TrackElemType::RightBankToUp25: case TrackElemType::Down25ToLeftBank: case TrackElemType::Down25ToRightBank: case TrackElemType::FlatToUp25Covered: case TrackElemType::Down25ToFlatCovered: case TrackElemType::LeftBankedFlatToLeftBankedUp25: case TrackElemType::RightBankedFlatToRightBankedUp25: case TrackElemType::LeftBankedDown25ToLeftBankedFlat: case TrackElemType::RightBankedDown25ToRightBankedFlat: case TrackElemType::FlatToLeftBankedUp25: case TrackElemType::FlatToRightBankedUp25: case TrackElemType::LeftBankedDown25ToFlat: case TrackElemType::RightBankedDown25ToFlat: return EvaluatorConst<103>; case TrackElemType::Up25ToFlat: // case TrackElemType::FlatToDown25: // case TrackElemType::Up25ToLeftBank: case TrackElemType::Up25ToRightBank: case TrackElemType::LeftBankToDown25: case TrackElemType::RightBankToDown25: case TrackElemType::Up25ToFlatCovered: case TrackElemType::FlatToDown25Covered: case TrackElemType::CableLiftHill: case TrackElemType::LeftBankedUp25ToLeftBankedFlat: case TrackElemType::RightBankedUp25ToRightBankedFlat: case TrackElemType::LeftBankedFlatToLeftBankedDown25: case TrackElemType::RightBankedFlatToRightBankedDown25: case TrackElemType::LeftBankedUp25ToFlat: case TrackElemType::RightBankedUp25ToFlat: case TrackElemType::FlatToLeftBankedDown25: case TrackElemType::FlatToRightBankedDown25: return EvaluatorConst<-103>; case TrackElemType::Up25ToUp60: // case TrackElemType::Down60ToDown25: // case TrackElemType::Up25ToUp60Covered: case TrackElemType::Down60ToDown25Covered: return EvaluatorConst<82>; case TrackElemType::Up60ToUp25: // case TrackElemType::Down25ToDown60: // case TrackElemType::Up60ToUp25Covered: case TrackElemType::Down25ToDown60Covered: return EvaluatorConst<-82>; case TrackElemType::LeftQuarterTurn5Tiles: // case TrackElemType::LeftQuarterTurn5TilesUp25: case TrackElemType::LeftQuarterTurn5TilesDown25: case TrackElemType::LeftTwistDownToUp: case TrackElemType::LeftTwistUpToDown: case TrackElemType::LeftQuarterTurn5TilesCovered: case TrackElemType::LeftQuarterHelixLargeUp: case TrackElemType::LeftQuarterHelixLargeDown: case TrackElemType::LeftFlyerTwistUp: case TrackElemType::LeftFlyerTwistDown: case TrackElemType::LeftHeartLineRoll: return EvaluatorConst<0>; case TrackElemType::RightQuarterTurn5Tiles: // case TrackElemType::RightQuarterTurn5TilesUp25: case TrackElemType::RightQuarterTurn5TilesDown25: case TrackElemType::RightTwistDownToUp: case TrackElemType::RightTwistUpToDown: case TrackElemType::RightQuarterTurn5TilesCovered: case TrackElemType::RightQuarterHelixLargeUp: case TrackElemType::RightQuarterHelixLargeDown: case TrackElemType::RightFlyerTwistUp: case TrackElemType::RightFlyerTwistDown: case TrackElemType::RightHeartLineRoll: return EvaluatorConst<0>; case TrackElemType::BankedLeftQuarterTurn5Tiles: case TrackElemType::LeftHalfBankedHelixUpLarge: case TrackElemType::LeftHalfBankedHelixDownLarge: case TrackElemType::LeftQuarterBankedHelixLargeUp: case TrackElemType::LeftQuarterBankedHelixLargeDown: return EvaluatorConst<200>; case TrackElemType::BankedRightQuarterTurn5Tiles: case TrackElemType::RightHalfBankedHelixUpLarge: case TrackElemType::RightHalfBankedHelixDownLarge: case TrackElemType::RightQuarterBankedHelixLargeUp: case TrackElemType::RightQuarterBankedHelixLargeDown: return EvaluatorConst<200>; case TrackElemType::SBendLeft: case TrackElemType::SBendLeftCovered: return EvaluatorConst<0>; case TrackElemType::SBendRight: case TrackElemType::SBendRightCovered: return EvaluatorConst<0>; case TrackElemType::LeftVerticalLoop: case TrackElemType::RightVerticalLoop: return EvaluatorVerticalLoop; case TrackElemType::LeftQuarterTurn3Tiles: case TrackElemType::LeftQuarterTurn3TilesUp25: case TrackElemType::LeftQuarterTurn3TilesDown25: case TrackElemType::LeftQuarterTurn3TilesCovered: case TrackElemType::LeftCurvedLiftHill: return EvaluatorConst<0>; case TrackElemType::RightQuarterTurn3Tiles: case TrackElemType::RightQuarterTurn3TilesUp25: case TrackElemType::RightQuarterTurn3TilesDown25: case TrackElemType::RightQuarterTurn3TilesCovered: case TrackElemType::RightCurvedLiftHill: return EvaluatorConst<0>; case TrackElemType::LeftBankedQuarterTurn3Tiles: case TrackElemType::LeftHalfBankedHelixUpSmall: case TrackElemType::LeftHalfBankedHelixDownSmall: return EvaluatorConst<100>; case TrackElemType::RightBankedQuarterTurn3Tiles: case TrackElemType::RightHalfBankedHelixUpSmall: case TrackElemType::RightHalfBankedHelixDownSmall: return EvaluatorConst<100>; case TrackElemType::LeftQuarterTurn1Tile: return EvaluatorConst<0>; case TrackElemType::RightQuarterTurn1Tile: return EvaluatorConst<0>; case TrackElemType::HalfLoopUp: case TrackElemType::FlyerHalfLoopUninvertedUp: case TrackElemType::FlyerHalfLoopInvertedUp: return EvaluatorHalfLoopUp; case TrackElemType::HalfLoopDown: case TrackElemType::FlyerHalfLoopInvertedDown: case TrackElemType::FlyerHalfLoopUninvertedDown: return EvaluatorHalfLoopDown; case TrackElemType::LeftLargeCorkscrewUp: case TrackElemType::RightLargeCorkscrewDown: return EvaluatorConst<89>; case TrackElemType::RightLargeCorkscrewUp: case TrackElemType::LeftLargeCorkscrewDown: return EvaluatorConst<89>; case TrackElemType::LeftCorkscrewUp: case TrackElemType::RightCorkscrewDown: case TrackElemType::LeftFlyerCorkscrewUp: case TrackElemType::RightFlyerCorkscrewDown: return EvaluatorConst<52>; case TrackElemType::RightCorkscrewUp: case TrackElemType::LeftCorkscrewDown: case TrackElemType::RightFlyerCorkscrewUp: case TrackElemType::LeftFlyerCorkscrewDown: return EvaluatorConst<52>; case TrackElemType::FlatToUp60: case TrackElemType::Down60ToFlat: return EvaluatorConst<56>; case TrackElemType::Up60ToFlat: case TrackElemType::FlatToDown60: case TrackElemType::BrakeForDrop: return EvaluatorConst<-56>; case TrackElemType::LeftQuarterTurn1TileUp60: case TrackElemType::LeftQuarterTurn1TileDown60: return EvaluatorConst<0>; case TrackElemType::RightQuarterTurn1TileUp60: case TrackElemType::RightQuarterTurn1TileDown60: return EvaluatorConst<0>; case TrackElemType::Watersplash: return EvaluatorWaterSplash; case TrackElemType::FlatToUp60LongBase: case TrackElemType::Down60ToFlatLongBase: return EvaluatorConst<160>; case TrackElemType::Up60ToFlatLongBase: case TrackElemType::FlatToDown60LongBase: return EvaluatorConst<-160>; case TrackElemType::ReverseFreefallSlope: case TrackElemType::AirThrustVerticalDownToLevel: return EvaluatorConst<120>; case TrackElemType::Up60ToUp90: case TrackElemType::Down90ToDown60: return EvaluatorConst<110>; case TrackElemType::Up90ToUp60: case TrackElemType::Down60ToDown90: return EvaluatorConst<-110>; case TrackElemType::LeftEighthToDiag: case TrackElemType::LeftEighthToOrthogonal: return EvaluatorConst<0>; case TrackElemType::RightEighthToDiag: case TrackElemType::RightEighthToOrthogonal: return EvaluatorConst<0>; case TrackElemType::LeftEighthBankToDiag: case TrackElemType::LeftEighthBankToOrthogonal: case TrackElemType::LeftEighthBankToDiagUp25: case TrackElemType::LeftEighthBankToDiagDown25: case TrackElemType::LeftEighthBankToOrthogonalUp25: case TrackElemType::LeftEighthBankToOrthogonalDown25: return EvaluatorConst<270>; case TrackElemType::RightEighthBankToDiag: case TrackElemType::RightEighthBankToOrthogonal: case TrackElemType::RightEighthBankToDiagUp25: case TrackElemType::RightEighthBankToDiagDown25: case TrackElemType::RightEighthBankToOrthogonalUp25: case TrackElemType::RightEighthBankToOrthogonalDown25: return EvaluatorConst<270>; case TrackElemType::DiagFlatToUp25: case TrackElemType::DiagDown25ToFlat: case TrackElemType::DiagLeftBankToUp25: case TrackElemType::DiagRightBankToUp25: case TrackElemType::DiagDown25ToLeftBank: case TrackElemType::DiagDown25ToRightBank: case TrackElemType::DiagLeftBankedFlatToLeftBankedUp25: case TrackElemType::DiagRightBankedFlatToRightBankedUp25: case TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat: case TrackElemType::DiagRightBankedDown25ToRightBankedFlat: case TrackElemType::DiagFlatToLeftBankedUp25: case TrackElemType::DiagFlatToRightBankedUp25: case TrackElemType::DiagLeftBankedDown25ToFlat: case TrackElemType::DiagRightBankedDown25ToFlat: return EvaluatorConst<113>; case TrackElemType::DiagUp25ToFlat: case TrackElemType::DiagFlatToDown25: case TrackElemType::DiagUp25ToLeftBank: case TrackElemType::DiagUp25ToRightBank: case TrackElemType::DiagLeftBankToDown25: case TrackElemType::DiagRightBankToDown25: case TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat: case TrackElemType::DiagRightBankedUp25ToRightBankedFlat: case TrackElemType::DiagLeftBankedFlatToLeftBankedDown25: case TrackElemType::DiagRightBankedFlatToRightBankedDown25: case TrackElemType::DiagLeftBankedUp25ToFlat: case TrackElemType::DiagRightBankedUp25ToFlat: case TrackElemType::DiagFlatToLeftBankedDown25: case TrackElemType::DiagFlatToRightBankedDown25: return EvaluatorConst<-113>; case TrackElemType::DiagUp25ToUp60: case TrackElemType::DiagDown60ToDown25: return EvaluatorConst<95>; case TrackElemType::DiagUp60ToUp25: case TrackElemType::DiagDown25ToDown60: return EvaluatorConst<-95>; case TrackElemType::DiagFlatToUp60: case TrackElemType::DiagDown60ToFlat: return EvaluatorConst<60>; case TrackElemType::DiagUp60ToFlat: case TrackElemType::DiagFlatToDown60: return EvaluatorConst<-60>; case TrackElemType::LeftBarrelRollUpToDown: case TrackElemType::LeftBarrelRollDownToUp: return EvaluatorConst<170>; case TrackElemType::RightBarrelRollUpToDown: case TrackElemType::RightBarrelRollDownToUp: return EvaluatorConst<170>; case TrackElemType::LeftZeroGRollUp: case TrackElemType::RightZeroGRollUp: return EvaluatorConst<250>; case TrackElemType::LeftZeroGRollDown: case TrackElemType::RightZeroGRollDown: return EvaluatorConst<250>; case TrackElemType::LeftLargeZeroGRollUp: case TrackElemType::RightLargeZeroGRollUp: return EvaluatorLargeZeroGRollUp; case TrackElemType::LeftLargeZeroGRollDown: case TrackElemType::RightLargeZeroGRollDown: return EvaluatorLargeZeroGRollDown; case TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25: case TrackElemType::RightBankToRightQuarterTurn3TilesUp25: case TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank: case TrackElemType::RightQuarterTurn3TilesDown25ToRightBank: return EvaluatorQuarterTurn3Tiles; case TrackElemType::LeftMediumHalfLoopUp: case TrackElemType::RightMediumHalfLoopUp: return EvaluatorMediumHalfLoopUp; case TrackElemType::RightMediumHalfLoopDown: case TrackElemType::LeftMediumHalfLoopDown: return EvaluatorMediumHalfLoopDown; case TrackElemType::LeftLargeHalfLoopUp: case TrackElemType::RightLargeHalfLoopUp: case TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp: case TrackElemType::RightFlyerLargeHalfLoopUninvertedUp: case TrackElemType::LeftFlyerLargeHalfLoopInvertedUp: case TrackElemType::RightFlyerLargeHalfLoopInvertedUp: return EvaluatorLargeHalfLoopUp; case TrackElemType::LeftLargeHalfLoopDown: case TrackElemType::RightLargeHalfLoopDown: case TrackElemType::LeftFlyerLargeHalfLoopInvertedDown: case TrackElemType::RightFlyerLargeHalfLoopInvertedDown: case TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown: case TrackElemType::RightFlyerLargeHalfLoopUninvertedDown: return EvaluatorLargeHalfLoopDown; case TrackElemType::HeartLineTransferUp: return EvaluatorHeartLineTransferUp; case TrackElemType::HeartLineTransferDown: return EvaluatorHeartLineTransferDown; case TrackElemType::MultiDimInvertedFlatToDown90QuarterLoop: case TrackElemType::InvertedFlatToDown90QuarterLoop: case TrackElemType::MultiDimFlatToDown90QuarterLoop: return EvaluatorDown90QuarterLoop; case TrackElemType::Up90ToInvertedFlatQuarterLoop: case TrackElemType::MultiDimUp90ToInvertedFlatQuarterLoop: case TrackElemType::MultiDimInvertedUp90ToFlatQuarterLoop: return EvaluatorUp90QuarterLoop; case TrackElemType::AirThrustTopCap: return EvaluatorConst<-60>; case TrackElemType::LeftBankedQuarterTurn3TileUp25: case TrackElemType::LeftBankedQuarterTurn3TileDown25: return EvaluatorConst<200>; case TrackElemType::RightBankedQuarterTurn3TileUp25: case TrackElemType::RightBankedQuarterTurn3TileDown25: return EvaluatorConst<200>; case TrackElemType::LeftBankedQuarterTurn5TileUp25: case TrackElemType::LeftBankedQuarterTurn5TileDown25: return EvaluatorConst<200>; case TrackElemType::RightBankedQuarterTurn5TileUp25: case TrackElemType::RightBankedQuarterTurn5TileDown25: return EvaluatorConst<200>; default: return EvaluatorConst<0>; } } static constexpr StringId RideConfigurationStringIds[] = { STR_EMPTY, // 0 STR_STATION_PLATFORM, // 1 STR_EMPTY, // 2 STR_EMPTY, // 3 STR_EMPTY, // 4 STR_EMPTY, // 5 STR_EMPTY, // 6 STR_EMPTY, // 7 STR_EMPTY, // 8 STR_EMPTY, // 9 STR_EMPTY, // 10 STR_EMPTY, // 11 STR_EMPTY, // 12 STR_EMPTY, // 13 STR_EMPTY, // 14 STR_EMPTY, // 15 STR_EMPTY, // 16 STR_EMPTY, // 17 STR_EMPTY, // 18 STR_EMPTY, // 19 STR_EMPTY, // 20 STR_EMPTY, // 21 STR_EMPTY, // 22 STR_EMPTY, // 23 STR_EMPTY, // 24 STR_EMPTY, // 25 STR_EMPTY, // 26 STR_EMPTY, // 27 STR_EMPTY, // 28 STR_EMPTY, // 29 STR_EMPTY, // 30 STR_EMPTY, // 31 STR_EMPTY, // 32 STR_EMPTY, // 33 STR_EMPTY, // 34 STR_EMPTY, // 35 STR_EMPTY, // 36 STR_EMPTY, // 37 STR_S_BEND_LEFT, // 38 STR_S_BEND_RIGHT, // 39 STR_VERTICAL_LOOP_LEFT, // 40 STR_VERTICAL_LOOP_RIGHT, // 41 STR_EMPTY, // 42 STR_EMPTY, // 43 STR_EMPTY, // 44 STR_EMPTY, // 45 STR_EMPTY, // 46 STR_EMPTY, // 47 STR_EMPTY, // 48 STR_EMPTY, // 49 STR_EMPTY, // 50 STR_EMPTY, // 51 STR_IN_LINE_TWIST_LEFT, // 52 STR_IN_LINE_TWIST_RIGHT, // 53 STR_IN_LINE_TWIST_LEFT, // 54 STR_IN_LINE_TWIST_RIGHT, // 55 STR_HALF_LOOP, // 56 STR_HALF_LOOP, // 57 STR_HALF_CORKSCREW_LEFT, // 58 STR_HALF_CORKSCREW_RIGHT, // 59 STR_HALF_CORKSCREW_LEFT, // 60 STR_HALF_CORKSCREW_RIGHT, // 61 STR_EMPTY, // 62 STR_EMPTY, // 63 STR_EMPTY, // 64 STR_EMPTY, // 65 STR_ENTRY_EXIT_PLATFORM, // 66 STR_VERTICAL_TOWER, // 67 STR_EMPTY, // 68 STR_EMPTY, // 69 STR_EMPTY, // 70 STR_EMPTY, // 71 STR_EMPTY, // 72 STR_EMPTY, // 73 STR_EMPTY, // 74 STR_EMPTY, // 75 STR_EMPTY, // 76 STR_EMPTY, // 77 STR_EMPTY, // 78 STR_EMPTY, // 79 STR_EMPTY, // 80 STR_EMPTY, // 81 STR_EMPTY, // 82 STR_S_BEND_LEFT, // 83 STR_S_BEND_RIGHT, // 84 STR_EMPTY, // 85 STR_EMPTY, // 86 STR_HELIX_UP_SMALL, // 87 STR_HELIX_UP_SMALL, // 88 STR_HELIX_DOWN_SMALL, // 89 STR_HELIX_DOWN_SMALL, // 90 STR_HELIX_UP_LARGE, // 91 STR_HELIX_UP_LARGE, // 92 STR_HELIX_DOWN_LARGE, // 93 STR_HELIX_DOWN_LARGE, // 94 STR_EMPTY, // 95 STR_EMPTY, // 96 STR_EMPTY, // 97 STR_EMPTY, // 98 STR_BRAKES, // 99 STR_BOOSTER, // 100 STR_EMPTY, // 101 STR_HELIX_UP_LARGE, // 102 STR_HELIX_UP_LARGE, // 103 STR_HELIX_DOWN_LARGE, // 104 STR_HELIX_DOWN_LARGE, // 105 STR_HELIX_UP_LEFT, // 106 STR_HELIX_UP_RIGHT, // 107 STR_HELIX_DOWN_LEFT, // 108 STR_HELIX_DOWN_RIGHT, // 109 STR_EMPTY, // TrackElemType::Up25LeftBanked STR_EMPTY, // TrackElemType::Up25RighBanked STR_WATERFALLS, // 112 STR_RAPIDS, // 113 STR_ON_RIDE_PHOTO_SECTION, // 114 STR_EMPTY, // TrackElemType::Down25LeftBanked STR_EMPTY, // TrackElemType::Down25RightBanked STR_WATER_SPLASH, // 117 STR_EMPTY, // 118 STR_EMPTY, // 119 STR_WHIRLPOOL, // 120 STR_EMPTY, // 121 STR_EMPTY, // 122 STR_CABLE_LIFT_HILL, // 123 STR_SLOPE_UP_TO_VERTICAL, // 124 STR_VERTICAL_TRACK, // 125 STR_EMPTY, // 126 STR_EMPTY, // 127 STR_EMPTY, // 128 STR_EMPTY, // 129 STR_EMPTY, // 130 STR_EMPTY, // 131 STR_HOLDING_BRAKE_FOR_DROP, // 132 STR_EMPTY, // 133 STR_EMPTY, // 134 STR_EMPTY, // 135 STR_EMPTY, // 136 STR_EMPTY, // 137 STR_EMPTY, // 138 STR_EMPTY, // 139 STR_EMPTY, // 140 STR_EMPTY, // 141 STR_EMPTY, // 142 STR_EMPTY, // 143 STR_EMPTY, // 144 STR_EMPTY, // 145 STR_EMPTY, // 146 STR_EMPTY, // 147 STR_EMPTY, // 148 STR_EMPTY, // 149 STR_EMPTY, // 150 STR_EMPTY, // 151 STR_EMPTY, // 152 STR_EMPTY, // 153 STR_EMPTY, // 154 STR_EMPTY, // 155 STR_EMPTY, // 156 STR_EMPTY, // 157 STR_EMPTY, // 158 STR_EMPTY, // 159 STR_EMPTY, // 160 STR_EMPTY, // 161 STR_EMPTY, // 162 STR_EMPTY, // 163 STR_EMPTY, // 164 STR_EMPTY, // 165 STR_EMPTY, // 166 STR_EMPTY, // 167 STR_EMPTY, // 168 STR_EMPTY, // 169 STR_EMPTY, // 170 STR_EMPTY, // 171 STR_REVERSER_TURNTABLE, // 172 STR_SPINNING_TUNNEL, // 173 STR_BARREL_ROLL_LEFT, // 174 STR_BARREL_ROLL_RIGHT, // 175 STR_BARREL_ROLL_LEFT, // 176 STR_BARREL_ROLL_RIGHT, // 177 STR_EMPTY, // 178 STR_EMPTY, // 179 STR_EMPTY, // 180 STR_EMPTY, // 181 STR_LAUNCHED_LIFT_HILL, // 182 STR_LARGE_HALF_LOOP_LEFT, // 183 STR_LARGE_HALF_LOOP_RIGHT, // 184 STR_LARGE_HALF_LOOP_LEFT, // 185 STR_LARGE_HALF_LOOP_RIGHT, // 186 STR_IN_LINE_TWIST_LEFT, // 187 STR_IN_LINE_TWIST_RIGHT, // 188 STR_IN_LINE_TWIST_LEFT, // 189 STR_IN_LINE_TWIST_RIGHT, // 190 STR_HALF_LOOP, // 191 STR_HALF_LOOP, // 192 STR_HALF_CORKSCREW_LEFT, // 193 STR_HALF_CORKSCREW_RIGHT, // 194 STR_HALF_CORKSCREW_LEFT, // 195 STR_HALF_CORKSCREW_RIGHT, // 196 STR_UPPER_TRANSFER, // 197 STR_LOWER_TRANSFER, // 198 STR_HEARTLINE_ROLL_LEFT, // 199 STR_HEARTLINE_ROLL_RIGHT, // 200 STR_GOLF_HOLE_A, // 201 STR_GOLF_HOLE_B, // 202 STR_GOLF_HOLE_C, // 203 STR_GOLF_HOLE_D, // 204 STR_GOLF_HOLE_E, // 205 STR_QUARTER_LOOP, // 206 STR_QUARTER_LOOP, // 207 STR_QUARTER_LOOP, // 208 STR_CURVED_LIFT_HILL_LEFT, // 209 STR_CURVED_LIFT_HILL_RIGHT, // 210 STR_REVERSER_LEFT, // 211 STR_REVERSER_RIGHT, // 212 STR_TOP_SECTION, // 213 STR_VERTICAL_TRACK, // 214 STR_SLOPE_TO_LEVEL, // 215 STR_BLOCK_BRAKES, // 216 STR_EMPTY, // 217 STR_EMPTY, // 218 STR_EMPTY, // 219 STR_EMPTY, // 220 STR_EMPTY, // 221 STR_EMPTY, // 222 STR_EMPTY, // 223 STR_EMPTY, // 224 STR_EMPTY, // 225 STR_EMPTY, // 226 STR_EMPTY, // 227 STR_EMPTY, // 228 STR_EMPTY, // 229 STR_EMPTY, // 230 STR_EMPTY, // 231 STR_EMPTY, // 232 STR_EMPTY, // 233 STR_EMPTY, // 234 STR_EMPTY, // 235 STR_EMPTY, // 236 STR_EMPTY, // 237 STR_EMPTY, // 238 STR_EMPTY, // 239 STR_EMPTY, // 240 STR_EMPTY, // 241 STR_EMPTY, // 242 STR_EMPTY, // 243 STR_EMPTY, // 244 STR_EMPTY, // 245 STR_EMPTY, // 246 STR_EMPTY, // 247 STR_EMPTY, // 248 STR_EMPTY, // 249 STR_EMPTY, // 250 STR_EMPTY, // 251 STR_EMPTY, // 252 STR_QUARTER_LOOP, // 253 STR_QUARTER_LOOP, // 254 STR_QUARTER_LOOP, // 255 STR_SPINNING_CONTROL_TOGGLE_TRACK, // 256 STR_EMPTY, // TrackElemType::FlatTrack1x4A STR_BASE_SIZE_2_X_2, // TrackElemType::FlatTrack2x2 STR_BASE_SIZE_4_X_4, // TrackElemType::FlatTrack4x4 STR_BASE_SIZE_2_X_4, // TrackElemType::FlatTrack2x4 STR_BASE_SIZE_5_X_1, // TrackElemType::FlatTrack1x5 STR_EMPTY, // TrackElemType::FlatTrack1x1A STR_EMPTY, // TrackElemType::FlatTrack1x4B STR_EMPTY, // TrackElemType::FlatTrack1x1B STR_EMPTY, // TrackElemType::FlatTrack1x4C STR_EMPTY, // TrackElemType::FlatTrack3x3 STR_LARGE_HALF_CORKSCREW_LEFT, // TrackElemType::LeftCorkscrewUp STR_LARGE_HALF_CORKSCREW_RIGHT, // TrackElemType::RightCorkscrewUp STR_LARGE_HALF_CORKSCREW_LEFT, // TrackElemType::LeftCorkscrewDown STR_LARGE_HALF_CORKSCREW_RIGHT, // TrackElemType::RightCorkscrewDown STR_MEDIUM_HALF_LOOP_LEFT, // TrackElemType::LeftMediumHalfLoopUp STR_MEDIUM_HALF_LOOP_RIGHT, // TrackElemType::RightMediumHalfLoopUp STR_MEDIUM_HALF_LOOP_LEFT, // TrackElemType::LeftMediumHalfLoopDown STR_MEDIUM_HALF_LOOP_RIGHT, // TrackElemType::RightMediumHalfLoopDown STR_ZERO_G_ROLL_LEFT, // TrackElemType::LeftZeroGRollUp STR_ZERO_G_ROLL_RIGHT, // TrackElemType::RightZeroGRollUp STR_ZERO_G_ROLL_LEFT, // TrackElemType::LeftZeroGRollDown STR_ZERO_G_ROLL_RIGHT, // TrackElemType::RightZeroGRollDown STR_LARGE_ZERO_G_ROLL_LEFT, // TrackElemType::LeftLargeZeroGRollUp STR_LARGE_ZERO_G_ROLL_RIGHT, // TrackElemType::RightLargeZeroGRollUp STR_LARGE_ZERO_G_ROLL_LEFT, // TrackElemType::LeftLargeZeroGRollDown STR_LARGE_ZERO_G_ROLL_RIGHT, // TrackElemType::RightLargeZeroGRollDown STR_LARGE_HALF_LOOP_LEFT, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp STR_LARGE_HALF_LOOP_RIGHT, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp STR_LARGE_HALF_LOOP_LEFT, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown STR_LARGE_HALF_LOOP_RIGHT, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown STR_LARGE_HALF_LOOP_LEFT, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp STR_LARGE_HALF_LOOP_RIGHT, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp STR_LARGE_HALF_LOOP_LEFT, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown STR_LARGE_HALF_LOOP_RIGHT, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown STR_HALF_LOOP, // TrackElemType::FlyerHalfLoopInvertedUp STR_HALF_LOOP, // TrackElemType::FlyerHalfLoopUninvertedDown STR_EMPTY, // TrackElemType::LeftEighthToDiagUp25 STR_EMPTY, // TrackElemType::RightEighthToDiagUp25 STR_EMPTY, // TrackElemType::LeftEighthToDiagDown25 STR_EMPTY, // TrackElemType::RightEighthToDiagDown25 STR_EMPTY, // TrackElemType::LeftEighthToOrthogonalUp25 STR_EMPTY, // TrackElemType::RightEighthToOrthogonalUp25 STR_EMPTY, // TrackElemType::LeftEighthToOrthogonalDown25 STR_EMPTY, // TrackElemType::RightEighthToOrthogonalDown25 STR_EMPTY, // TrackElemType::DiagUp25ToLeftBankedUp25 STR_EMPTY, // TrackElemType::DiagUp25ToRightBankedUp25 STR_EMPTY, // TrackElemType::DiagLeftBankedUp25ToUp25 STR_EMPTY, // TrackElemType::DiagRightBankedUp25ToUp25 STR_EMPTY, // TrackElemType::DiagDown25ToLeftBankedDown25 STR_EMPTY, // TrackElemType::DiagDown25ToRightBankedDown25 STR_EMPTY, // TrackElemType::DiagLeftBankedDown25ToDown25 STR_EMPTY, // TrackElemType::DiagRightBankedDown25ToDown25 STR_EMPTY, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 STR_EMPTY, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 STR_EMPTY, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat STR_EMPTY, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat STR_EMPTY, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 STR_EMPTY, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 STR_EMPTY, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat STR_EMPTY, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat STR_EMPTY, // TrackElemType::DiagFlatToLeftBankedUp25 STR_EMPTY, // TrackElemType::DiagFlatToRightBankedUp25 STR_EMPTY, // TrackElemType::DiagLeftBankedUp25ToFlat STR_EMPTY, // TrackElemType::DiagRightBankedUp25ToFlat STR_EMPTY, // TrackElemType::DiagFlatToLeftBankedDown25 STR_EMPTY, // TrackElemType::DiagFlatToRightBankedDown25 STR_EMPTY, // TrackElemType::DiagLeftBankedDown25ToFlat STR_EMPTY, // TrackElemType::DiagRightBankedDown25ToFlat STR_EMPTY, // TrackElemType::Up25LeftBanked STR_EMPTY, // TrackElemType::Up25RightBanked STR_EMPTY, // TrackElemType::Down25LeftBanked STR_EMPTY, // TrackElemType::Down25RightBanked STR_EMPTY, // TrackElemType::LeftEighthBankToDiagUp25 STR_EMPTY, // TrackElemType::RightEighthBankToDiagUp25 STR_EMPTY, // TrackElemType::LeftEighthBankToDiagDown25 STR_EMPTY, // TrackElemType::RightEighthBankToDiagDown25 STR_EMPTY, // TrackElemType::LeftEighthBankToOrthogonalUp25 STR_EMPTY, // TrackElemType::RightEighthBankToOrthogonalUp25 STR_EMPTY, // TrackElemType::LeftEighthBankToOrthogonalDown25 STR_EMPTY, // TrackElemType::RightEighthBankToOrthogonalDown25 }; static_assert(std::size(RideConfigurationStringIds) == TrackElemType::Count); namespace OpenRCT2 { namespace TrackMetaData { static constexpr auto BuildDescriptorTable() { std::array res{}; for (int i = 0; i < TrackElemType::Count; i++) { TrackElementDescriptor& desc = res[i]; desc.Description = RideConfigurationStringIds[i]; desc.AlternativeType = AlternativeTrackTypes[i]; desc.Block = const_cast(TrackBlocks[i]); desc.Coordinates = _trackCoordinates[i]; desc.CurveChain = gTrackCurveChain[i]; desc.Flags = TrackFlags[i]; desc.HeightMarkerPositions = TrackHeightMarkerPositions[i]; desc.MirrorElement = TrackElementMirrorMap[i]; desc.PieceLength = TrackPieceLengths[i]; desc.PriceModifier = TrackPricing[i]; desc.Definition = TrackDefinitions[i]; desc.SpinFunction = TrackTypeToSpinFunction[i]; desc.VerticalFactor = GetVerticalFunction(i); desc.LateralFactor = GetLateralFunction(i); for (uint8_t j = 0; j < MaxSequencesPerPiece; j++) { desc.SequenceElementAllowedWallEdges[j] = TrackSequenceElementAllowedWallEdges[i][j]; desc.SequenceProperties[j] = TrackSequenceProperties[i][j]; } } return res; } static constexpr auto _trackElementDescriptors = BuildDescriptorTable(); const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type) { if (type >= _trackElementDescriptors.size()) return _trackElementDescriptors[0]; return _trackElementDescriptors[type]; } } // namespace TrackMetaData } // namespace OpenRCT2 const PreviewTrack* TrackElementDescriptor::GetBlockForSequence(uint8_t sequenceIndex) const { const auto* trackBlock = Block; if (trackBlock == nullptr) return nullptr; // The sequence index may be higher than the amount of sequences actually present. // We don’t know the amount of sequences present in the block upfront, but there is an end marker consisting of all 255s. for (auto i = 0; i < sequenceIndex; i++) { trackBlock++; if (trackBlock == nullptr || trackBlock->index == 255) return nullptr; } return trackBlock; }