diff --git a/src/openrct2/ride/TrackData.cpp b/src/openrct2/ride/TrackData.cpp index f1d899dd61..b0a005094d 100644 --- a/src/openrct2/ride/TrackData.cpp +++ b/src/openrct2/ride/TrackData.cpp @@ -18,8035 +18,8032 @@ using namespace OpenRCT2; -// 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 - { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBrakes - { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBlockBrakes -}; -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 - /* DiagonalBrakes */ { 0 }, - /* DiagonalBlockBrakes */ { 0 }, -}; -static_assert(std::size(TrackSequenceProperties) == TrackElemType::Count); - -constexpr PreviewTrack kTrackBlockEnd { 255, 255, 255, 255, 255, {255, 255}, 255 }; - -static constexpr PreviewTrack TrackBlocks000[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks001[] = { - { 0, 0, 0, 0, 0,{ 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks002[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks003[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks004[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks005[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks006[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks007[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks008[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks009[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks010[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks011[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks012[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks013[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks014[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks015[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks018[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks019[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks020[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks021[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks024[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks025[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks026[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks027[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks028[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks029[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks030[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks031[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks032[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks033[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -// LeftVerticalLoop -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 }, - kTrackBlockEnd -}; - -// RightVerticalLoop -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks050[] = { - { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks051[] = { - { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -// HalfLoopUp -static constexpr PreviewTrack TrackBlocks056[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -// HalfLoopDown -static constexpr PreviewTrack TrackBlocks057[] = { - { 0, 0, 0, -32, 16, { 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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks062[] = { - { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks063[] = { - { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks064[] = { - { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks065[] = { - { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks068[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks069[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks070[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks071[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks072[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks073[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks074[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks075[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks076[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks077[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks078[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks079[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks080[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks095[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks096[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks097[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks098[] = { - { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks099[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks100[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks101[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks110[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks111[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks112[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks113[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks114[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks115[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks116[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks120[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks125[] = { - { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, - { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks129[] = { - { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks130[] = { - { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks132[] = { - { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks172[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks173[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks182[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -// LeftLargeHalfLoopUp -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 }, - kTrackBlockEnd -}; - -// RightLargeHalfLoopUp -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 }, - kTrackBlockEnd -}; - -// LeftLargeHalfLoopDown -static constexpr PreviewTrack TrackBlocks185[] = { - { 0, 0, 0, -32, 16, { 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 }, - kTrackBlockEnd -}; - -// RightLargeHalfLoopDown -static constexpr PreviewTrack TrackBlocks186[] = { - { 0, 0, 0, -32, 16, { 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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -// FlyerHalfLoopUninvertedUp -static constexpr PreviewTrack TrackBlocks191[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -// FlyerHalfLoopInvertedDown -static constexpr PreviewTrack TrackBlocks192[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks201[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks202[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks203[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks214[] = { - { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, - { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks216[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks225[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks226[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks227[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks228[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks229[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks230[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks231[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks232[] = { - { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks233[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks234[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks235[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks236[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks237[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks238[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks239[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks240[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks241[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks242[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks243[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks244[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks245[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks246[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks247[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocks248[] = { - { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksRotationControlToggle[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0b1100 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksFlatTrack1x1A[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksFlatTrack1x1B[] = { - { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedDown[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedDown[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown[] = { - { 0, 0, 0, -32, 32, { 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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedDown[] = { - { 0, 0, 0, -32, 32, { 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 }, - kTrackBlockEnd -}; - -static constexpr PreviewTrack TrackBlocksFlyerHalfLoopUpInverted[] = { - { 0, 0, 0, 0, 16, { 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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - -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 }, - kTrackBlockEnd -}; - - -// 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 - TrackBlocks141, // TrackElemType::DiagBrakes - TrackBlocks141, // TrackElemType::DiagBlockBrakes -}; - -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 - 92, // TrackElemType::LeftEighthToDiagUp25 - 92, // TrackElemType::RightEighthToDiagUp25 - 92, // TrackElemType::LeftEighthToDiagDown25 - 92, // TrackElemType::RightEighthToDiagDown25 - 92, // TrackElemType::LeftEighthToOrthogonalUp25 - 92, // TrackElemType::RightEighthToOrthogonalUp25 - 92, // TrackElemType::LeftEighthToOrthogonalDown25 - 92, // TrackElemType::RightEighthToOrthogonalDown25 - 45, // TrackElemType::DiagUp25ToLeftBankedUp25 - 45, // TrackElemType::DiagUp25ToRightBankedUp25 - 45, // TrackElemType::DiagLeftBankedUp25ToUp25 - 45, // TrackElemType::DiagRightBankedUp25ToUp25 - 45, // TrackElemType::DiagDown25ToLeftBankedDown25 - 45, // TrackElemType::DiagDown25ToRightBankedDown25 - 45, // TrackElemType::DiagLeftBankedDown25ToDown25 - 45, // TrackElemType::DiagRightBankedDown25ToDown25 - 45, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - 45, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - 45, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - 45, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - 45, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - 45, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - 45, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - 45, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - 45, // TrackElemType::DiagFlatToLeftBankedUp25 - 45, // TrackElemType::DiagFlatToRightBankedUp25 - 45, // TrackElemType::DiagLeftBankedUp25ToFlat - 45, // TrackElemType::DiagRightBankedUp25ToFlat - 45, // TrackElemType::DiagFlatToLeftBankedDown25 - 45, // TrackElemType::DiagFlatToRightBankedDown25 - 45, // TrackElemType::DiagLeftBankedDown25ToFlat - 45, // TrackElemType::DiagRightBankedDown25ToFlat - 45, // TrackElemType::DiagUp25LeftBanked - 45, // TrackElemType::DiagUp25RightBanked - 45, // TrackElemType::DiagDown25LeftBanked - 45, // TrackElemType::DiagDown25RightBanked - 92, // TrackElemType::LeftEighthBankToDiagUp25 - 92, // TrackElemType::RightEighthBankToDiagUp25 - 92, // TrackElemType::LeftEighthBankToDiagDown25 - 92, // TrackElemType::RightEighthBankToDiagDown25 - 92, // TrackElemType::LeftEighthBankToOrthogonalUp25 - 92, // TrackElemType::RightEighthBankToOrthogonalUp25 - 92, // TrackElemType::LeftEighthBankToOrthogonalDown25 - 92, // TrackElemType::RightEighthBankToOrthogonalDown25 - 45, // TrackElemType::DiagBrakes - 45, // TrackElemType::DiagBlockBrakes -}; -static_assert(std::size(TrackPieceLengths) == TrackElemType::Count); - -// rct2: 0x00998C95 -static constexpr TrackCurveChain gTrackCurveChain[] = { - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, - { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, - { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftVerySmall), EnumValue(TrackCurve::LeftVerySmall) }, - { EnumValue(TrackCurve::RightVerySmall), EnumValue(TrackCurve::RightVerySmall) }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistUpToDown, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightTwistUpToDown, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistDownToUp }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightTwistDownToUp }, - { RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopDown, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopUp }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewDown, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewDown, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewUp }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewUp }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall }, - { 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 }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { RideConstructionSpecialPieceSelected | TrackElemType::Brakes, RideConstructionSpecialPieceSelected | TrackElemType::Brakes }, - { RideConstructionSpecialPieceSelected | TrackElemType::Booster, RideConstructionSpecialPieceSelected | TrackElemType::Booster }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::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 }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { RideConstructionSpecialPieceSelected | TrackElemType::Waterfall, RideConstructionSpecialPieceSelected | TrackElemType::Waterfall }, - { RideConstructionSpecialPieceSelected | TrackElemType::Rapids, RideConstructionSpecialPieceSelected | TrackElemType::Rapids }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollDownToUp, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollDownToUp, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollUpToDown }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollUpToDown }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift, RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopDown, EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopDown, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopUp }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopUp }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::InvertedFlatToDown90QuarterLoop, EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::Up90ToInvertedFlatQuarterLoop }, - { RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill }, - { RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, - { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, - { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, - { 65535, 65535 }, // TrackElemType::FlatTrack1x4A - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack2x2 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack4x4 - { 65535, 65535 }, // TrackElemType::FlatTrack2x4 - { 65535, 65535 }, // TrackElemType::FlatTrack1x5 - { 65535, 65535 }, // TrackElemType::FlatTrack1x1A - { 65535, 65535 }, // TrackElemType::FlatTrack1x4B - { 65535, 65535 }, // TrackElemType::FlatTrack1x1B - { 65535, 65535 }, // TrackElemType::FlatTrack1x4C - { 65535, 65535 }, // TrackElemType::FlatTrack3x3 - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeCorkscrewUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeCorkscrewUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewUp }, // TrackElemType::LeftLargeCorkscrewDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewUp }, // TrackElemType::RightCorkscrewDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftMediumHalfLoopUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightMediumHalfLoopUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopUp }, // TrackElemType::LeftMediumHalfLoopDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopUp }, // TrackElemType::RightMediumHalfLoopDown - { RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftZeroGRollUp - { RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightZeroGRollUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollUp }, // TrackElemType::LeftZeroGRollDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollUp }, // TrackElemType::RightZeroGRollDown - { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeZeroGRollUp - { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeZeroGRollUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollUp }, // TrackElemType::LeftLargeZeroGRollDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollUp }, // TrackElemType::RightLargeZeroGRollDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopUninvertedUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopUninvertedUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedUp }, // LeftFlyerLargeHalfLoopInvertedDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp }, // RightFlyerLargeHalfLoopInvertedDown - { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopInvertedUp - { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopInvertedUp - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedUp }, // LeftFlyerLargeHalfLoopUninvertedDown - { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedUp }, // RightFlyerLargeHalfLoopUninvertedDown - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopInvertedUp - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopUninvertedUp - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagDown25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalDown25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25ToRightBankedUp25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25ToRightBankedDown25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToDown25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedUp25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToFlat - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToFlat - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedDown25 - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToFlat - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToFlat - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25LeftBanked - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25RightBanked - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25LeftBanked - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25RightBanked - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagDown25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalDown25 - { RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes, RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes - { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagBlockBrakes -}; -static_assert(std::size(gTrackCurveChain) == TrackElemType::Count); - -const TrackDescriptor gTrackDescriptors[186] = { - { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagDown60 }, - { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagDown60ToDown25 }, - { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagDown60ToFlat }, - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagDown25ToDown60 }, - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagDown25 }, - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagDown25ToLeftBank }, - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagDown25ToFlat }, - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagDown25ToRightBank }, - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonal }, - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagLeftBankToDown25 }, - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBank }, - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankToFlat }, - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagLeftBankToUp25 }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::None, TrackElemType::LeftEighthToOrthogonal }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagFlatToDown60 }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagFlatToDown25 }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagFlatToLeftBank }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagFlat }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagFlatToRightBank }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagFlatToUp25 }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagFlatToUp60 }, - { true, TrackPitch::None, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::None, TrackElemType::RightEighthToOrthogonal }, - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagRightBankToDown25 }, - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankToFlat }, - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBank }, - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagRightBankToUp25 }, - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::Right, TrackElemType::RightEighthBankToOrthogonal }, - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagUp25ToLeftBank }, - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagUp25ToFlat }, - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagUp25ToRightBank }, - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagUp25 }, - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagUp25ToUp60 }, - { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagUp60ToFlat }, - { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagUp60ToUp25 }, - { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagUp60 }, - { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down90, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileDown90 }, - { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::None, TrackPitch::Down90, TrackRoll::None, TrackElemType::Down90 }, - { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down90ToDown60 }, - { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down90, TrackRoll::None, TrackElemType::RightQuarterTurn1TileDown90 }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down60, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileDown60 }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down90, TrackRoll::None, TrackElemType::Down60ToDown90 }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down60 }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::Down60ToDown25 }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Down60ToFlat }, - { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down60, TrackRoll::None, TrackElemType::RightQuarterTurn1TileDown60 }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::Left, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::Down25LeftBanked }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftBankedDown25ToDown25 }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankedDown25ToFlat }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftQuarterTurn3TilesDown25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::Left, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftQuarterTurn5TilesDown25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down25ToDown60 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::Down25ToLeftBankedDown25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::Down25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::Down25ToRightBankedDown25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::Down25ToLeftBank }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Down25ToFlat }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::Down25ToRightBank }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::Right, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightQuarterTurn5TilesDown25 }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::Right, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightQuarterTurn3TilesDown25 }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightBankedDown25ToDown25 }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::Down25RightBanked }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankedDown25ToFlat }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedDown25ToRightBankedFlat }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::Right, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn5TileDown25 }, - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3TileDown25 }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3Tiles }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::Left, TrackPitch::None, TrackRoll::Left, TrackElemType::BankedLeftQuarterTurn5Tiles }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftEighthBankToDiag }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftBankToDown25 }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBank }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankToFlat }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, - { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankToUp25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn3Tiles }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::Left, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn5Tiles }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::None, TrackElemType::LeftEighthToDiag }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::FlatToDown60 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::FlatToLeftBankedDown25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::FlatToDown25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::FlatToRightBankedDown25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::FlatToLeftBank }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Flat }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftVerySmall, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn1Tile }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightVerySmall, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn1Tile }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::FlatToRightBank }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::FlatToLeftBankedUp25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::FlatToUp25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::FlatToRightBankedUp25 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::FlatToUp60 }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::None, TrackElemType::RightEighthToDiag }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::Right, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn5Tiles }, - { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn3Tiles }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightBankToDown25 }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedFlatToRightBankedDown25 }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankToFlat }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBank }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankToUp25 }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedFlatToRightBankedUp25 }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::Right, TrackElemType::RightEighthBankToDiag }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::Right, TrackPitch::None, TrackRoll::Right, TrackElemType::BankedRightQuarterTurn5Tiles }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3Tiles }, - { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::Left, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankedUp25ToFlat }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::Up25LeftBanked }, - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankedUp25ToUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftQuarterTurn3TilesUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::Left, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftQuarterTurn5TilesUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::Up25ToLeftBank }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Up25ToFlat }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::Up25ToRightBank }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::Up25ToLeftBankedUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::Up25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::Up25ToRightBankedUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up25ToUp60 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::Right, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightQuarterTurn5TilesUp25 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightQuarterTurn3TilesUp25 }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankedUp25ToFlat }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedUp25ToRightBankedFlat }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankedUp25ToUp25 }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::Up25RightBanked }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::Right, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn5TileUp25 }, - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3TileUp25 }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up60, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileUp60 }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Up60ToFlat }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::Up60ToUp25 }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up60 }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up90, TrackRoll::None, TrackElemType::Up60ToUp90 }, - { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up60, TrackRoll::None, TrackElemType::RightQuarterTurn1TileUp60 }, - { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up90, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileUp90 }, - { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up90ToUp60 }, - { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::None, TrackPitch::Up90, TrackRoll::None, TrackElemType::Up90 }, - { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up90, TrackRoll::None, TrackElemType::RightQuarterTurn1TileUp90 }, - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 - { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 - { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 - { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat - { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 - { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat - { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat - { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked - { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked - { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked - { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked - { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 - { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 - { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 - { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 - { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::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 - TrackElemType::None, // TrackElemType::DiagBrakes - TrackElemType::None, // TrackElemType::DiagBlockBrakes -}; -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 - 219559, // TrackElemType::LeftEighthToDiagUp25 - 219559, // TrackElemType::RightEighthToDiagUp25 - 219559, // TrackElemType::LeftEighthToDiagDown25 - 219559, // TrackElemType::RightEighthToDiagDown25 - 219559, // TrackElemType::LeftEighthToOrthogonalUp25 - 219559, // TrackElemType::RightEighthToOrthogonalUp25 - 219559, // TrackElemType::LeftEighthToOrthogonalDown25 - 219559, // TrackElemType::RightEighthToOrthogonalDown25 - 118809, // TrackElemType::DiagUp25ToLeftBankedUp25 - 118809, // TrackElemType::DiagUp25ToRightBankedUp25 - 118809, // TrackElemType::DiagLeftBankedUp25ToUp25 - 118809, // TrackElemType::DiagRightBankedUp25ToUp25 - 118809, // TrackElemType::DiagDown25ToLeftBankedDown25 - 118809, // TrackElemType::DiagDown25ToRightBankedDown25 - 118809, // TrackElemType::DiagLeftBankedDown25ToDown25 - 118809, // TrackElemType::DiagRightBankedDown25ToDown25 - 108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - 108800, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - 108800, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - 108800, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - 108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - 108800, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - 108800, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - 108800, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - 108800, // TrackElemType::DiagFlatToLeftBankedUp25 - 108800, // TrackElemType::DiagFlatToRightBankedUp25 - 108800, // TrackElemType::DiagLeftBankedUp25ToFlat - 108800, // TrackElemType::DiagRightBankedUp25ToFlat - 108800, // TrackElemType::DiagFlatToLeftBankedDown25 - 108800, // TrackElemType::DiagFlatToRightBankedDown25 - 108800, // TrackElemType::DiagLeftBankedDown25ToFlat - 108800, // TrackElemType::DiagRightBankedDown25ToFlat - 118809, // TrackElemType::DiagUp25LeftBanked - 118809, // TrackElemType::DiagUp25RightBanked - 118809, // TrackElemType::DiagDown25LeftBanked - 118809, // TrackElemType::DiagDown25RightBanked - 233281, // TrackElemType::LeftEighthBankToDiagUp25 - 233281, // TrackElemType::RightEighthBankToDiagUp25 - 233281, // TrackElemType::LeftEighthBankToDiagDown25 - 233281, // TrackElemType::RightEighthBankToDiagDown25 - 233281, // TrackElemType::LeftEighthBankToOrthogonalUp25 - 233281, // TrackElemType::RightEighthBankToOrthogonalUp25 - 233281, // TrackElemType::LeftEighthBankToOrthogonalDown25 - 233281, // TrackElemType::RightEighthBankToOrthogonalDown25 - 123456, // TrackElemType::DiagBrakes - 123456, // TrackElemType::DiagBlockBrakes -}; - - - -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 - TrackElemType::DiagBrakes, - TrackElemType::DiagBlockBrakes, -}; -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) | (1 << 4), // TrackElemType::LeftEighthToDiagUp25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagUp25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiagDown25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagDown25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalUp25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonalUp25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalDown25 - (1 << 0) | (1 << 4), // 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) | (1 << 4), // TrackElemType::RightEighthBankToDiagUp25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagUp25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiagDown25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagDown25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalUp25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalUp25 - (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalDown25 - (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalDown25 - (1 << 0), // TrackElemType::DiagBrakes - (1 << 0), // TrackElemType::DiagBlockBrakes -}; -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 - { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagUp25 - { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagUp25 - { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagDown25 - { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagDown25 - { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalUp25 - { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25LeftBanked - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25RightBanked - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25LeftBanked - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25RightBanked - { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagUp25 - { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagUp25 - { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagDown25 - { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagDown25 - { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25 - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagBrakes - { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagBlockBrakes -}; - - - -static_assert(std::size(TrackSequenceElementAllowedWallEdges) == TrackElemType::Count); - -/** rct2: 0x0099423C */ -static constexpr uint32_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 | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND, - /* TrackElemType::RightHeartLineRoll */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND, - /* 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, - /* TrackElemType::DiagBrakes */ 0, - /* TrackElemType::DiagBlockBrakes */ 0, -}; -static_assert(std::size(TrackFlags) == TrackElemType::Count); -// clang-format on - -/** rct2: 0x00997C9D */ -// clang-format off -static constexpr TrackDefinition TrackDefinitions[] = +namespace OpenRCT2::TrackMetaData { - // TYPE VANGLE END VANGLE START BANK END BANK START PREVIEW Z OFFSET - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT - { TRACK_STATION_END, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_END_STATION - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BEGIN_STATION - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MIDDLE_STATION - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN - { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_LEFT - { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_RIGHT - { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, -48 }, // ELEM_LEFT_VERTICAL_LOOP - { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, -48 }, // ELEM_RIGHT_VERTICAL_LOOP - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE - { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP - { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN - { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN - { TRACK_HALF_LOOP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_HALF_LOOP_UP - { TRACK_HALF_LOOP, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_HALF_LOOP_DOWN - { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_CORKSCREW_UP - { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_CORKSCREW_UP - { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // ELEM_LEFT_CORKSCREW_DOWN - { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // ELEM_RIGHT_CORKSCREW_DOWN - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT - { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_TOWER_BASE - { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_TOWER_SECTION - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_COVERED - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_COVERED - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_COVERED - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_COVERED - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_COVERED - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_LEFT_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_RIGHT_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED - { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL - { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN - { TRACK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BRAKES - { TRACK_BOOSTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BOOSTER - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::Maze - { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN - { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN - { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED - { TRACK_WATERFALL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WATERFALL - { TRACK_RAPIDS, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RAPIDS - { TRACK_ON_RIDE_PHOTO, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_ON_RIDE_PHOTO - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED - { TRACK_WATER_SPLASH, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WATER_SPLASH - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE - { TRACK_WHIRLPOOL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WHIRLPOOL - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 - { TRACK_LIFT_HILL_CABLE, TrackPitch::Down60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_CABLE_LIFT_HILL - { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE - { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::ReverseFreefall, TrackRoll::None,TrackRoll::None, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL - { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_UP - { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_DOWN - { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN - { TRACK_BRAKE_FOR_DROP, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BRAKE_FOR_DROP - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_EIGHTH_TO_DIAG - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_DIAG - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK - { TRACK_LOG_FLUME_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LOG_FLUME_REVERSER - { TRACK_SPINNING_TUNNEL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_SPINNING_TUNNEL - { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN - { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP - { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK - { TRACK_POWERED_LIFT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_POWERED_LIFT - {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP - {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN - {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN - {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP - {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN - {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN - {TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_FLYER_HALF_LOOP_UP - {TRACK_FLYING_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // ELEM_FLYER_HALF_LOOP_DOWN - {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_CORKSCREW_UP - {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -32 }, // ELEM_LEFT_FLYER_CORKSCREW_DOWN - {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -32 }, // ELEM_RIGHT_FLYER_CORKSCREW_DOWN - {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_HEARTLINE_TRANSFER_UP - {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN - {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_HEARTLINE_ROLL - {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL - {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_A - {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_B - {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_C - {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_D - {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_E - { TRACK_QUARTER_LOOP_INVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_QUARTER_LOOP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP - { TRACK_QUARTER_LOOP, TrackPitch::Down90, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN - { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_CURVED_LIFT_HILL - { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_CURVED_LIFT_HILL - { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_REVERSER - { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_REVERSER - { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_TOP_CAP - { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN - { TRACK_SLOPE_TO_FLAT, TrackPitch::None, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL - { TRACK_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BLOCK_BRAKES - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT - { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP - { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN - { TRACK_QUARTER_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP - { TRACK_QUARTER_LOOP_UNINVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP - { TRACK_QUARTER_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP - { TRACK_ROTATION_CONTROL_TOGGLE,TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x4A - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack2x2 - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack4x4 - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack2x4 - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x5 - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x1A - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x4B - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x1B - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, -40 }, // TrackElemType::FlatTrack1x4C - { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack3x3 - { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 32 }, // TrackElemType::LeftLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 32 }, // TrackElemType::RightLargeCorkscrewUp - { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // TrackElemType::LeftLargeCorkscrewDown - { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // TrackElemType::RightLargeCorkscrewDown - { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightMediumHalfLoopUp - { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::LeftMediumHalfLoopDown - { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::RightMediumHalfLoopDown - { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // TrackElemType::LeftZeroGRollUp - { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // TrackElemType::RightZeroGRollUp - { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // TrackElemType::LeftZeroGRollDown - { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // TrackElemType::RightZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightLargeZeroGRollUp - { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::LeftLargeZeroGRollDown - { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::RightLargeZeroGRollDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown - { TRACK_FLYING_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::FlyerHalfLoopInvertedUp - { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::FlyerHalfLoopUninvertedDown - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::LeftEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::RightEighthToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::LeftEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::RightEighthToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::LeftEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::RightEighthToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::LeftEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::RightEighthToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::Up25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::Up25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::Down25LeftBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::Down25RightBanked - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 16 }, // TrackElemType::LeftEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 16 }, // TrackElemType::RightEighthBankToDiagUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, -16 }, // TrackElemType::LeftEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, -16 }, // TrackElemType::RightEighthBankToDiagDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 - { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25 - { TRACK_DIAG_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBrakes - { TRACK_DIAG_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBlockBrakes -}; -static_assert(std::size(TrackDefinitions) == TrackElemType::Count); + // 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 + { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBrakes + { 4, 4, 0, 0, -32, 32 }, // TrackElemType::DiagBlockBrakes + }; + 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 + /* DiagonalBrakes */ { 0 }, + /* DiagonalBlockBrakes */ { 0 }, + }; + static_assert(std::size(TrackSequenceProperties) == TrackElemType::Count); + + constexpr PreviewTrack kTrackBlockEnd { 255, 255, 255, 255, 255, {255, 255}, 255 }; + + static constexpr PreviewTrack TrackBlocks000[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks001[] = { + { 0, 0, 0, 0, 0,{ 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks002[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks003[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks004[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks005[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks006[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks007[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks008[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks009[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks010[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks011[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks012[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks013[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks014[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks015[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks018[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks019[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks020[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks021[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks024[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks025[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks026[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks027[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks028[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks029[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks030[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks031[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks032[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks033[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + // LeftVerticalLoop + 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 }, + kTrackBlockEnd + }; + + // RightVerticalLoop + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks050[] = { + { 0, 0, 0, 0, 0, { 0b0111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks051[] = { + { 0, 0, 0, 0, 0, { 0b1011, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + // HalfLoopUp + static constexpr PreviewTrack TrackBlocks056[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + // HalfLoopDown + static constexpr PreviewTrack TrackBlocks057[] = { + { 0, 0, 0, -32, 16, { 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks062[] = { + { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks063[] = { + { 0, 0, 0, 0, 24, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks064[] = { + { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks065[] = { + { 0, 0, 0, 0, 24, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks068[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks069[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks070[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks071[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks072[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks073[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks074[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks075[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks076[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks077[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks078[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks079[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks080[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks095[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks096[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks097[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks098[] = { + { 0, 0, 0, 0, 64, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks099[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks100[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks101[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks110[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks111[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks112[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks113[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks114[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks115[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks116[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks120[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks125[] = { + { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, + { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks129[] = { + { 0, 0, 0, 0, 32, { 0b1111, 0b0011 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks130[] = { + { 0, 0, 0, 0, 56, { 0b1111, 0 }, RCT_PREVIEW_TRACK_FLAG_IS_VERTICAL }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks132[] = { + { 0, 0, 0, 0, 24, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks172[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks173[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks182[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + // LeftLargeHalfLoopUp + 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 }, + kTrackBlockEnd + }; + + // RightLargeHalfLoopUp + 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 }, + kTrackBlockEnd + }; + + // LeftLargeHalfLoopDown + static constexpr PreviewTrack TrackBlocks185[] = { + { 0, 0, 0, -32, 16, { 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 }, + kTrackBlockEnd + }; + + // RightLargeHalfLoopDown + static constexpr PreviewTrack TrackBlocks186[] = { + { 0, 0, 0, -32, 16, { 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + // FlyerHalfLoopUninvertedUp + static constexpr PreviewTrack TrackBlocks191[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + // FlyerHalfLoopInvertedDown + static constexpr PreviewTrack TrackBlocks192[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks201[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks202[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks203[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + { 1, -32, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks214[] = { + { 0, 0, 0, 0, 48, { 0b1111, 0 }, 0 }, + { 1, 32, 0, 0, 48, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks216[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks225[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks226[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks227[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks228[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks229[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks230[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks231[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks232[] = { + { 0, 0, 0, 0, 16, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks233[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks234[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks235[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks236[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks237[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks238[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks239[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks240[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks241[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks242[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks243[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks244[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks245[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks246[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0b0011 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks247[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocks248[] = { + { 0, 0, 0, 0, 8, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksRotationControlToggle[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0b1100 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksFlatTrack1x1A[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksFlatTrack1x1B[] = { + { 0, 0, 0, 0, 0, { 0b1111, 0 }, 0 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopInvertedDown[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopInvertedDown[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksLeftFlyerLargeHalfLoopUninvertedDown[] = { + { 0, 0, 0, -32, 32, { 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksRightFlyerLargeHalfLoopUninvertedDown[] = { + { 0, 0, 0, -32, 32, { 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 }, + kTrackBlockEnd + }; + + static constexpr PreviewTrack TrackBlocksFlyerHalfLoopUpInverted[] = { + { 0, 0, 0, 0, 16, { 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + 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 }, + kTrackBlockEnd + }; + + + // 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 + TrackBlocks141, // TrackElemType::DiagBrakes + TrackBlocks141, // TrackElemType::DiagBlockBrakes + }; + + 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 + 92, // TrackElemType::LeftEighthToDiagUp25 + 92, // TrackElemType::RightEighthToDiagUp25 + 92, // TrackElemType::LeftEighthToDiagDown25 + 92, // TrackElemType::RightEighthToDiagDown25 + 92, // TrackElemType::LeftEighthToOrthogonalUp25 + 92, // TrackElemType::RightEighthToOrthogonalUp25 + 92, // TrackElemType::LeftEighthToOrthogonalDown25 + 92, // TrackElemType::RightEighthToOrthogonalDown25 + 45, // TrackElemType::DiagUp25ToLeftBankedUp25 + 45, // TrackElemType::DiagUp25ToRightBankedUp25 + 45, // TrackElemType::DiagLeftBankedUp25ToUp25 + 45, // TrackElemType::DiagRightBankedUp25ToUp25 + 45, // TrackElemType::DiagDown25ToLeftBankedDown25 + 45, // TrackElemType::DiagDown25ToRightBankedDown25 + 45, // TrackElemType::DiagLeftBankedDown25ToDown25 + 45, // TrackElemType::DiagRightBankedDown25ToDown25 + 45, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + 45, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + 45, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + 45, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + 45, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + 45, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + 45, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + 45, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + 45, // TrackElemType::DiagFlatToLeftBankedUp25 + 45, // TrackElemType::DiagFlatToRightBankedUp25 + 45, // TrackElemType::DiagLeftBankedUp25ToFlat + 45, // TrackElemType::DiagRightBankedUp25ToFlat + 45, // TrackElemType::DiagFlatToLeftBankedDown25 + 45, // TrackElemType::DiagFlatToRightBankedDown25 + 45, // TrackElemType::DiagLeftBankedDown25ToFlat + 45, // TrackElemType::DiagRightBankedDown25ToFlat + 45, // TrackElemType::DiagUp25LeftBanked + 45, // TrackElemType::DiagUp25RightBanked + 45, // TrackElemType::DiagDown25LeftBanked + 45, // TrackElemType::DiagDown25RightBanked + 92, // TrackElemType::LeftEighthBankToDiagUp25 + 92, // TrackElemType::RightEighthBankToDiagUp25 + 92, // TrackElemType::LeftEighthBankToDiagDown25 + 92, // TrackElemType::RightEighthBankToDiagDown25 + 92, // TrackElemType::LeftEighthBankToOrthogonalUp25 + 92, // TrackElemType::RightEighthBankToOrthogonalUp25 + 92, // TrackElemType::LeftEighthBankToOrthogonalDown25 + 92, // TrackElemType::RightEighthBankToOrthogonalDown25 + 45, // TrackElemType::DiagBrakes + 45, // TrackElemType::DiagBlockBrakes + }; + static_assert(std::size(TrackPieceLengths) == TrackElemType::Count); + + // rct2: 0x00998C95 + static constexpr TrackCurveChain gTrackCurveChain[] = { + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, + { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, + { RideConstructionSpecialPieceSelected | TrackElemType::EndStation, RideConstructionSpecialPieceSelected | TrackElemType::EndStation }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftVerySmall), EnumValue(TrackCurve::LeftVerySmall) }, + { EnumValue(TrackCurve::RightVerySmall), EnumValue(TrackCurve::RightVerySmall) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistUpToDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightTwistUpToDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftTwistDownToUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightTwistDownToUp }, + { RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::HalfLoopUp }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightCorkscrewUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftCorkscrewUp }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::TowerSection, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixUpSmall }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall, RideConstructionSpecialPieceSelected | TrackElemType::RightHalfBankedHelixUpSmall }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall, RideConstructionSpecialPieceSelected | TrackElemType::LeftHalfBankedHelixDownSmall }, + { 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 }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { RideConstructionSpecialPieceSelected | TrackElemType::Brakes, RideConstructionSpecialPieceSelected | TrackElemType::Brakes }, + { RideConstructionSpecialPieceSelected | TrackElemType::Booster, RideConstructionSpecialPieceSelected | TrackElemType::Booster }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::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 }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { RideConstructionSpecialPieceSelected | TrackElemType::Waterfall, RideConstructionSpecialPieceSelected | TrackElemType::Waterfall }, + { RideConstructionSpecialPieceSelected | TrackElemType::Rapids, RideConstructionSpecialPieceSelected | TrackElemType::Rapids }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollDownToUp, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollDownToUp, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftBarrelRollUpToDown }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightBarrelRollUpToDown }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift, RideConstructionSpecialPieceSelected | TrackElemType::PoweredLift }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopDown, EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopDown, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeHalfLoopUp }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeHalfLoopUp }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::InvertedFlatToDown90QuarterLoop, EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::Up90ToInvertedFlatQuarterLoop }, + { RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::LeftCurvedLiftHill }, + { RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill, RideConstructionSpecialPieceSelected | TrackElemType::RightCurvedLiftHill }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::ReverseFreefallVertical }, + { RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown, RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::AirThrustVerticalDown }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::Left), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::Right), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Left) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::Right) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::LeftSmall), EnumValue(TrackCurve::LeftSmall) }, + { EnumValue(TrackCurve::RightSmall), EnumValue(TrackCurve::RightSmall) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, + { 65535, 65535 }, // TrackElemType::FlatTrack1x4A + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack2x2 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::FlatTrack4x4 + { 65535, 65535 }, // TrackElemType::FlatTrack2x4 + { 65535, 65535 }, // TrackElemType::FlatTrack1x5 + { 65535, 65535 }, // TrackElemType::FlatTrack1x1A + { 65535, 65535 }, // TrackElemType::FlatTrack1x4B + { 65535, 65535 }, // TrackElemType::FlatTrack1x1B + { 65535, 65535 }, // TrackElemType::FlatTrack1x4C + { 65535, 65535 }, // TrackElemType::FlatTrack3x3 + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeCorkscrewUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeCorkscrewUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeCorkscrewUp }, // TrackElemType::LeftLargeCorkscrewDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeCorkscrewUp }, // TrackElemType::RightCorkscrewDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftMediumHalfLoopUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightMediumHalfLoopUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightMediumHalfLoopUp }, // TrackElemType::LeftMediumHalfLoopDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftMediumHalfLoopUp }, // TrackElemType::RightMediumHalfLoopDown + { RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftZeroGRollUp + { RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightZeroGRollUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftZeroGRollUp }, // TrackElemType::LeftZeroGRollDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightZeroGRollUp }, // TrackElemType::RightZeroGRollDown + { RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::LeftLargeZeroGRollUp + { RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollDown, EnumValue(TrackCurve::None) }, // TrackElemType::RightLargeZeroGRollUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftLargeZeroGRollUp }, // TrackElemType::LeftLargeZeroGRollDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightLargeZeroGRollUp }, // TrackElemType::RightLargeZeroGRollDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopUninvertedUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopUninvertedUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedUp }, // LeftFlyerLargeHalfLoopInvertedDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp }, // RightFlyerLargeHalfLoopInvertedDown + { RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // LeftFlyerLargeHalfLoopInvertedUp + { RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown, EnumValue(TrackCurve::None) }, // RightFlyerLargeHalfLoopInvertedUp + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::RightFlyerLargeHalfLoopInvertedUp }, // LeftFlyerLargeHalfLoopUninvertedDown + { EnumValue(TrackCurve::None), RideConstructionSpecialPieceSelected | TrackElemType::LeftFlyerLargeHalfLoopInvertedUp }, // RightFlyerLargeHalfLoopUninvertedDown + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopInvertedUp + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // FlyerHalfLoopUninvertedUp + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToDiagDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToDiagDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthToOrthogonalDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthToOrthogonalDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25ToRightBankedUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25ToRightBankedDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedUp25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedUp25ToFlat + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedUp25ToFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagFlatToLeftBankedDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagFlatToRightBankedDown25 + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagLeftBankedDown25ToFlat + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagRightBankedDown25ToFlat + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagUp25LeftBanked + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagUp25RightBanked + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::DiagDown25LeftBanked + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::DiagDown25RightBanked + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToDiagDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToDiagDown25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { EnumValue(TrackCurve::LeftLarge), EnumValue(TrackCurve::LeftLarge) }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { EnumValue(TrackCurve::RightLarge), EnumValue(TrackCurve::RightLarge) }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes, RideConstructionSpecialPieceSelected | TrackElemType::DiagBrakes }, // TrackElemType::DiagBrakes + { EnumValue(TrackCurve::None), EnumValue(TrackCurve::None) }, // TrackElemType::DiagBlockBrakes + }; + static_assert(std::size(gTrackCurveChain) == TrackElemType::Count); + + const TrackDescriptor gTrackDescriptors[186] = { + { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagDown60 }, + { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagDown60ToDown25 }, + { true, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagDown60ToFlat }, + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagDown25ToDown60 }, + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagDown25 }, + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagDown25ToLeftBank }, + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagDown25ToFlat }, + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagDown25ToRightBank }, + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonal }, + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagLeftBankToDown25 }, + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBank }, + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankToFlat }, + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagLeftBankToUp25 }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::None, TrackElemType::LeftEighthToOrthogonal }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::DiagFlatToDown60 }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagFlatToDown25 }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagFlatToLeftBank }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagFlat }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagFlatToRightBank }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagFlatToUp25 }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagFlatToUp60 }, + { true, TrackPitch::None, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::None, TrackElemType::RightEighthToOrthogonal }, + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagRightBankToDown25 }, + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankToFlat }, + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBank }, + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagRightBankToUp25 }, + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::Right, TrackElemType::RightEighthBankToOrthogonal }, + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagUp25ToLeftBank }, + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagUp25ToFlat }, + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagUp25ToRightBank }, + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagUp25 }, + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagUp25ToUp60 }, + { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagUp60ToFlat }, + { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagUp60ToUp25 }, + { true, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::DiagUp60 }, + { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down90, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileDown90 }, + { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::None, TrackPitch::Down90, TrackRoll::None, TrackElemType::Down90 }, + { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down90ToDown60 }, + { false, TrackPitch::Down90, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down90, TrackRoll::None, TrackElemType::RightQuarterTurn1TileDown90 }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down60, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileDown60 }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down90, TrackRoll::None, TrackElemType::Down60ToDown90 }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down60 }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::Down60ToDown25 }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Down60ToFlat }, + { false, TrackPitch::Down60, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down60, TrackRoll::None, TrackElemType::RightQuarterTurn1TileDown60 }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3TileDown25 }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::Left, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn5TileDown25 }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::Down25LeftBanked }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftBankedDown25ToDown25 }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedDown25ToLeftBankedFlat }, + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankedDown25ToFlat }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftQuarterTurn3TilesDown25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftQuarterTurn3TilesDown25ToLeftBank }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::Left, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftQuarterTurn5TilesDown25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::Down25ToDown60 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::Down25ToLeftBankedDown25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::Down25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::Down25ToRightBankedDown25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::Down25ToLeftBank }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Down25ToFlat }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::Down25ToRightBank }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::Right, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightQuarterTurn5TilesDown25 }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::Right, TrackElemType::RightQuarterTurn3TilesDown25ToRightBank }, + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightQuarterTurn3TilesDown25 }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightBankedDown25ToDown25 }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::Down25RightBanked }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankedDown25ToFlat }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedDown25ToRightBankedFlat }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::Right, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn5TileDown25 }, + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3TileDown25 }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankToLeftQuarterTurn3TilesUp25 }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::Left, TrackPitch::None, TrackRoll::Left, TrackElemType::BankedLeftQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftEighthBankToDiag }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftBankedFlatToLeftBankedDown25 }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftBankToDown25 }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBank }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankToFlat }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedFlatToLeftBankedUp25 }, + { false, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankToUp25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::Left, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::None, TrackRoll::None, TrackElemType::LeftEighthToDiag }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down60, TrackRoll::None, TrackElemType::FlatToDown60 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::FlatToLeftBankedDown25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::FlatToDown25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::FlatToRightBankedDown25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::FlatToLeftBank }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Flat }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::LeftVerySmall, TrackPitch::None, TrackRoll::None, TrackElemType::LeftQuarterTurn1Tile }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightVerySmall, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn1Tile }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::FlatToRightBank }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::FlatToLeftBankedUp25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::FlatToUp25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::FlatToRightBankedUp25 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::FlatToUp60 }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::None, TrackElemType::RightEighthToDiag }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::Right, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::None, TrackElemType::RightQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightBankToDown25 }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightBankedFlatToRightBankedDown25 }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankToFlat }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBank }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankToUp25 }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedFlatToRightBankedUp25 }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::None, TrackRoll::Right, TrackElemType::RightEighthBankToDiag }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::Right, TrackPitch::None, TrackRoll::Right, TrackElemType::BankedRightQuarterTurn5Tiles }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3Tiles }, + { false, TrackPitch::None, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankToRightQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn3TileUp25 }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::Left, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftBankedQuarterTurn5TileUp25 }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::LeftBankedUp25ToLeftBankedFlat }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::LeftBankedUp25ToFlat }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::Up25LeftBanked }, + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftBankedUp25ToUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::Left, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftQuarterTurn5TilesUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::Up25ToLeftBank }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Up25ToFlat }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::Up25ToRightBank }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::Up25ToLeftBankedUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::Up25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::Up25ToRightBankedUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up25ToUp60 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::Right, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightQuarterTurn5TilesUp25 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightQuarterTurn3TilesUp25 }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::RightBankedUp25ToFlat }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::RightBankedUp25ToRightBankedFlat }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightBankedUp25ToUp25 }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::Up25RightBanked }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::Right, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn5TileUp25 }, + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightSmall, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightBankedQuarterTurn3TileUp25 }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up60, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileUp60 }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::Up60ToFlat }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::Up60ToUp25 }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up60 }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::None, TrackPitch::Up90, TrackRoll::None, TrackElemType::Up60ToUp90 }, + { false, TrackPitch::Up60, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up60, TrackRoll::None, TrackElemType::RightQuarterTurn1TileUp60 }, + { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::LeftSmall, TrackPitch::Up90, TrackRoll::None, TrackElemType::LeftQuarterTurn1TileUp90 }, + { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::None, TrackPitch::Up60, TrackRoll::None, TrackElemType::Up90ToUp60 }, + { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::None, TrackPitch::Up90, TrackRoll::None, TrackElemType::Up90 }, + { false, TrackPitch::Up90, TrackRoll::None, TrackCurve::RightSmall, TrackPitch::Up90, TrackRoll::None, TrackElemType::RightQuarterTurn1TileUp90 }, + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftEighthToDiagUp25 }, // TrackElemType::LeftEighthToDiagUp25 + { false, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightEighthToDiagUp25 }, // TrackElemType::RightEighthToDiagUp25 + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftEighthToDiagDown25 }, // TrackElemType::LeftEighthToDiagDown25 + { false, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightEighthToDiagDown25 }, // TrackElemType::RightEighthToDiagDown25 + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::LeftEighthToOrthogonalUp25 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::None, TrackElemType::RightEighthToOrthogonalUp25 }, // TrackElemType::RightEighthToOrthogonalUp25 + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::LeftEighthToOrthogonalDown25 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::None, TrackElemType::RightEighthToOrthogonalDown25 }, // TrackElemType::RightEighthToOrthogonalDown25 + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagUp25ToLeftBankedUp25 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { true, TrackPitch::Up25, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagUp25ToRightBankedUp25 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagLeftBankedUp25ToUp25 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::None, TrackElemType::DiagRightBankedUp25ToUp25 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagDown25ToLeftBankedDown25 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { true, TrackPitch::Down25, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagDown25ToRightBankedDown25 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagLeftBankedDown25ToDown25 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::None, TrackElemType::DiagRightBankedDown25ToDown25 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagRightBankedFlatToRightBankedUp25 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBankedUp25ToRightBankedFlat }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { true, TrackPitch::None, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { true, TrackPitch::None, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagRightBankedFlatToRightBankedDown25 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::Left, TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::Right, TrackElemType::DiagRightBankedDown25ToRightBankedFlat }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagFlatToLeftBankedUp25 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagFlatToRightBankedUp25 }, // TrackElemType::DiagFlatToRightBankedUp25 + { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankedUp25ToFlat }, // TrackElemType::DiagLeftBankedUp25ToFlat + { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankedUp25ToFlat }, // TrackElemType::DiagRightBankedUp25ToFlat + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagFlatToLeftBankedDown25 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { true, TrackPitch::None, TrackRoll::None, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagFlatToRightBankedDown25 }, // TrackElemType::DiagFlatToRightBankedDown25 + { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagLeftBankedDown25ToFlat }, // TrackElemType::DiagLeftBankedDown25ToFlat + { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::None, TrackRoll::None, TrackElemType::DiagRightBankedDown25ToFlat }, // TrackElemType::DiagRightBankedDown25ToFlat + { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::None, TrackPitch::Up25, TrackRoll::Left, TrackElemType::DiagUp25LeftBanked }, // TrackElemType::Up25LeftBanked + { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::None, TrackPitch::Up25, TrackRoll::Right, TrackElemType::DiagUp25RightBanked }, // TrackElemType::Up25RightBanked + { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::None, TrackPitch::Down25, TrackRoll::Left, TrackElemType::DiagDown25LeftBanked }, // TrackElemType::Down25LeftBanked + { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::None, TrackPitch::Down25, TrackRoll::Right, TrackElemType::DiagDown25RightBanked }, // TrackElemType::Down25RightBanked + { false, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftEighthBankToDiagUp25 }, // TrackElemType::LeftEighthBankToDiagUp25 + { false, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightEighthBankToDiagUp25 }, // TrackElemType::RightEighthBankToDiagUp25 + { false, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftEighthBankToDiagDown25 }, // TrackElemType::LeftEighthBankToDiagDown25 + { false, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::Right, TrackElemType::RightEighthBankToDiagDown25 }, // TrackElemType::RightEighthBankToDiagDown25 + { true, TrackPitch::Up25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Up25, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonalUp25 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { true, TrackPitch::Up25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Up25, TrackRoll::Right, TrackElemType::RightEighthBankToOrthogonalUp25 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { true, TrackPitch::Down25, TrackRoll::Left, TrackCurve::LeftLarge, TrackPitch::Down25, TrackRoll::Left, TrackElemType::LeftEighthBankToOrthogonalDown25 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { true, TrackPitch::Down25, TrackRoll::Right, TrackCurve::RightLarge, TrackPitch::Down25, TrackRoll::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 + TrackElemType::None, // TrackElemType::DiagBrakes + TrackElemType::None, // TrackElemType::DiagBlockBrakes + }; + 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 + 219559, // TrackElemType::LeftEighthToDiagUp25 + 219559, // TrackElemType::RightEighthToDiagUp25 + 219559, // TrackElemType::LeftEighthToDiagDown25 + 219559, // TrackElemType::RightEighthToDiagDown25 + 219559, // TrackElemType::LeftEighthToOrthogonalUp25 + 219559, // TrackElemType::RightEighthToOrthogonalUp25 + 219559, // TrackElemType::LeftEighthToOrthogonalDown25 + 219559, // TrackElemType::RightEighthToOrthogonalDown25 + 118809, // TrackElemType::DiagUp25ToLeftBankedUp25 + 118809, // TrackElemType::DiagUp25ToRightBankedUp25 + 118809, // TrackElemType::DiagLeftBankedUp25ToUp25 + 118809, // TrackElemType::DiagRightBankedUp25ToUp25 + 118809, // TrackElemType::DiagDown25ToLeftBankedDown25 + 118809, // TrackElemType::DiagDown25ToRightBankedDown25 + 118809, // TrackElemType::DiagLeftBankedDown25ToDown25 + 118809, // TrackElemType::DiagRightBankedDown25ToDown25 + 108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + 108800, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + 108800, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + 108800, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + 108800, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + 108800, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + 108800, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + 108800, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + 108800, // TrackElemType::DiagFlatToLeftBankedUp25 + 108800, // TrackElemType::DiagFlatToRightBankedUp25 + 108800, // TrackElemType::DiagLeftBankedUp25ToFlat + 108800, // TrackElemType::DiagRightBankedUp25ToFlat + 108800, // TrackElemType::DiagFlatToLeftBankedDown25 + 108800, // TrackElemType::DiagFlatToRightBankedDown25 + 108800, // TrackElemType::DiagLeftBankedDown25ToFlat + 108800, // TrackElemType::DiagRightBankedDown25ToFlat + 118809, // TrackElemType::DiagUp25LeftBanked + 118809, // TrackElemType::DiagUp25RightBanked + 118809, // TrackElemType::DiagDown25LeftBanked + 118809, // TrackElemType::DiagDown25RightBanked + 233281, // TrackElemType::LeftEighthBankToDiagUp25 + 233281, // TrackElemType::RightEighthBankToDiagUp25 + 233281, // TrackElemType::LeftEighthBankToDiagDown25 + 233281, // TrackElemType::RightEighthBankToDiagDown25 + 233281, // TrackElemType::LeftEighthBankToOrthogonalUp25 + 233281, // TrackElemType::RightEighthBankToOrthogonalUp25 + 233281, // TrackElemType::LeftEighthBankToOrthogonalDown25 + 233281, // TrackElemType::RightEighthBankToOrthogonalDown25 + 123456, // TrackElemType::DiagBrakes + 123456, // TrackElemType::DiagBlockBrakes + }; + + + + 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 + TrackElemType::DiagBrakes, + TrackElemType::DiagBlockBrakes, + }; + 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) | (1 << 4), // TrackElemType::LeftEighthToDiagUp25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagUp25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToDiagDown25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthToDiagDown25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalUp25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthToOrthogonalUp25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthToOrthogonalDown25 + (1 << 0) | (1 << 4), // 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) | (1 << 4), // TrackElemType::RightEighthBankToDiagUp25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagUp25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToDiagDown25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToDiagDown25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalUp25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalUp25 + (1 << 0) | (1 << 4), // TrackElemType::RightEighthBankToOrthogonalDown25 + (1 << 0) | (1 << 4), // TrackElemType::LeftEighthBankToOrthogonalDown25 + (1 << 0), // TrackElemType::DiagBrakes + (1 << 0), // TrackElemType::DiagBlockBrakes + }; + 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 + { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagUp25 + { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagUp25 + { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToDiagDown25 + { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToDiagDown25 + { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalUp25 + { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthToOrthogonalDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25LeftBanked + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagUp25RightBanked + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25LeftBanked + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagDown25RightBanked + { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagUp25 + { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagUp25 + { 0b0010, 0b0010, 0b1000, 0b0011, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToDiagDown25 + { 0b1000, 0b1000, 0b0010, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToDiagDown25 + { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { 0, 0b1000, 0b0110, 0b0010, 0b0010, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { 0, 0b0100, 0b1001, 0b0001, 0b0001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagBrakes + { 0, 0b0110, 0b1001, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, // TrackElemType::DiagBlockBrakes + }; + + + + static_assert(std::size(TrackSequenceElementAllowedWallEdges) == TrackElemType::Count); + + /** rct2: 0x0099423C */ + static constexpr uint32_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 | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND, + /* TrackElemType::RightHeartLineRoll */ TRACK_ELEM_FLAG_NORMAL_TO_INVERSION | TRACK_ELEM_FLAG_INVERSION_TO_NORMAL | TRACK_ELEM_FLAG_CAN_BE_PARTLY_UNDERGROUND, + /* 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, + /* TrackElemType::DiagBrakes */ 0, + /* TrackElemType::DiagBlockBrakes */ 0, + }; + static_assert(std::size(TrackFlags) == TrackElemType::Count); + // clang-format on -// 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, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT + { TRACK_STATION_END, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_END_STATION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BEGIN_STATION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MIDDLE_STATION + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_BANKED_LEFT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_BANKED_RIGHT_QUARTER_TURN_5_TILES + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_25_DEG_DOWN + { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_LEFT + { TRACK_S_BEND, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_RIGHT + { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, -48 }, // ELEM_LEFT_VERTICAL_LOOP + { TRACK_VERTICAL_LOOP, TrackPitch::Down25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, -48 }, // ELEM_RIGHT_VERTICAL_LOOP + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_BANK + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_TWIST_DOWN_TO_UP + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_TWIST_DOWN_TO_UP + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_LEFT_TWIST_UP_TO_DOWN + { TRACK_TWIST, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_RIGHT_TWIST_UP_TO_DOWN + { TRACK_HALF_LOOP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_HALF_LOOP_UP + { TRACK_HALF_LOOP, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_HALF_LOOP_DOWN + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_CORKSCREW_UP + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_CORKSCREW_UP + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // ELEM_LEFT_CORKSCREW_DOWN + { TRACK_CORKSCREW, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // ELEM_RIGHT_CORKSCREW_DOWN + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_FLAT + { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_TOWER_BASE + { TRACK_TOWER_BASE, TrackPitch::Tower, TrackPitch::Tower, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_TOWER_SECTION + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_60_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_25_DEG_UP_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_FLAT_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_60_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_25_DEG_DOWN_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_FLAT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_5_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_5_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_LEFT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_S_BEND_RIGHT_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_COVERED + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_COVERED + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_SMALL + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_SMALL + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_SMALL + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_SMALL + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_UP_LARGE + { TRACK_HELIX_UP_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_UP_LARGE + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_HALF_BANKED_HELIX_DOWN_LARGE + { TRACK_HELIX_DOWN_BANKED_HALF, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_HALF_BANKED_HELIX_DOWN_LARGE + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_UP + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_60_DEG_DOWN + { TRACK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BRAKES + { TRACK_BOOSTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BOOSTER + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::Maze + { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_UP + { TRACK_HELIX_UP_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_UP + { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_QUARTER_BANKED_HELIX_LARGE_DOWN + { TRACK_HELIX_DOWN_BANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_QUARTER_BANKED_HELIX_LARGE_DOWN + { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_UP + { TRACK_HELIX_UP_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_UP + { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_HELIX_LARGE_DOWN + { TRACK_HELIX_DOWN_UNBANKED_QUARTER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_HELIX_LARGE_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_25_DEG_UP_LEFT_BANKED + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_25_DEG_UP_RIGHT_BANKED + { TRACK_WATERFALL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WATERFALL + { TRACK_RAPIDS, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RAPIDS + { TRACK_ON_RIDE_PHOTO, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_ON_RIDE_PHOTO + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_25_DEG_DOWN_LEFT_BANKED + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_25_DEG_DOWN_RIGHT_BANKED + { TRACK_WATER_SPLASH, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WATER_SPLASH + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_UP_LONG_BASE + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE + { TRACK_WHIRLPOOL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_WHIRLPOOL + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_FLAT_TO_60_DEG_DOWN_LONG_BASE + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_FLAT_LONG_BASE_122 + { TRACK_LIFT_HILL_CABLE, TrackPitch::Down60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_CABLE_LIFT_HILL + { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_REVERSE_FREEFALL_SLOPE + { TRACK_REVERSE_FREEFALL, TrackPitch::ReverseFreefall, TrackPitch::ReverseFreefall, TrackRoll::None,TrackRoll::None, 0 }, // ELEM_REVERSE_FREEFALL_VERTICAL + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_UP_TO_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_90_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_60_DEG_DOWN_TO_90_DEG_DOWN + { TRACK_BRAKE_FOR_DROP, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BRAKE_FOR_DROP + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_EIGHTH_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_EIGHTH_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_EIGHTH_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_DIAG + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_EIGHTH_BANK_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_EIGHTH_BANK_TO_ORTHOGONAL + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::Up60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_60_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down60, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_DIAG_60_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_FLAT_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_UP_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_DIAG_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_DIAG_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_DIAG_RIGHT_BANK + { TRACK_LOG_FLUME_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LOG_FLUME_REVERSER + { TRACK_SPINNING_TUNNEL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_SPINNING_TUNNEL + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_BARREL_ROLL_UP_TO_DOWN + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_BARREL_ROLL_UP_TO_DOWN + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_LEFT_BARREL_ROLL_DOWN_TO_UP + { TRACK_BARREL_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_RIGHT_BARREL_ROLL_DOWN_TO_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANK_TO_LEFT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANK_TO_RIGHT_QUARTER_TURN_3_TILES_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_LEFT_BANK + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_3_TILES_25_DEG_DOWN_TO_RIGHT_BANK + { TRACK_POWERED_LIFT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_POWERED_LIFT + {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_LEFT_LARGE_HALF_LOOP_UP + {TRACK_HALF_LOOP_LARGE, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_UP + {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_RIGHT_LARGE_HALF_LOOP_DOWN + {TRACK_HALF_LOOP_LARGE, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // ELEM_LEFT_LARGE_HALF_LOOP_DOWN + {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_TWIST_UP + {TRACK_INLINE_TWIST_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_UP + {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_TWIST_DOWN + {TRACK_INLINE_TWIST_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_TWIST_DOWN + {TRACK_FLYING_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // ELEM_FLYER_HALF_LOOP_UP + {TRACK_FLYING_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // ELEM_FLYER_HALF_LOOP_DOWN + {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_LEFT_FLYER_CORKSCREW_UP + {TRACK_CORKSCREW_UNINVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_RIGHT_FLYER_CORKSCREW_UP + {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -32 }, // ELEM_LEFT_FLYER_CORKSCREW_DOWN + {TRACK_CORKSCREW_INVERTED, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -32 }, // ELEM_RIGHT_FLYER_CORKSCREW_DOWN + {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_HEARTLINE_TRANSFER_UP + {TRACK_HEARTLINE_TRANSFER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_HEARTLINE_TRANSFER_DOWN + {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_HEARTLINE_ROLL + {TRACK_HEARTLINE_ROLL, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_HEARTLINE_ROLL + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_A + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_B + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_C + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_D + {TRACK_MINI_GOLF_HOLE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_MINI_GOLF_HOLE_E + { TRACK_QUARTER_LOOP_INVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN + { TRACK_QUARTER_LOOP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_90_DEG_TO_INVERTED_FLAT_QUARTER_LOOP_UP + { TRACK_QUARTER_LOOP, TrackPitch::Down90, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // ELEM_INVERTED_FLAT_TO_90_DEG_QUARTER_LOOP_DOWN + { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_CURVED_LIFT_HILL + { TRACK_LIFT_HILL_CURVED, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_CURVED_LIFT_HILL + { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_REVERSER + { TRACK_REVERSER, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_REVERSER + { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_TOP_CAP + { TRACK_SLOPE_TO_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN + { TRACK_SLOPE_TO_FLAT, TrackPitch::None, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_AIR_THRUST_VERTICAL_DOWN_TO_LEVEL + { TRACK_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_BLOCK_BRAKES + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_3_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_QUARTER_TURN_5_TILE_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_UP_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_25_DEG_UP + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_25_DEG_DOWN_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_LEFT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_RIGHT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_FLAT_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_LEFT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_RIGHT_BANKED_FLAT + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_UP + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_UP_TO_FLAT + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // ELEM_FLAT_TO_LEFT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // ELEM_FLAT_TO_RIGHT_BANKED_25_DEG_DOWN + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // ELEM_LEFT_BANKED_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // ELEM_RIGHT_BANKED_25_DEG_DOWN_TO_FLAT + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_UP + { TRACK_FLAT, TrackPitch::Up90, TrackPitch::Up90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_UP + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_LEFT_QUARTER_TURN_1_TILE_90_DEG_DOWN + { TRACK_FLAT, TrackPitch::Down90, TrackPitch::Down90, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_RIGHT_QUARTER_TURN_1_TILE_90_DEG_DOWN + { TRACK_QUARTER_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_90_DEG_UP_TO_INVERTED_FLAT_QUARTER_LOOP + { TRACK_QUARTER_LOOP_UNINVERTED_DOWN, TrackPitch::Down90, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_FLAT_TO_90_DEG_DOWN_QUARTER_LOOP + { TRACK_QUARTER_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up90, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // ELEM_MULTIDIM_INVERTED_FLAT_TO_90_DEG_UP_QUARTER_LOOP + { TRACK_ROTATION_CONTROL_TOGGLE,TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // ELEM_ROTATION_CONTROL_TOGGLE + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x4A + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack2x2 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack4x4 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack2x4 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x5 + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x1A + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x4B + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack1x1B + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, -40 }, // TrackElemType::FlatTrack1x4C + { TRACK_FLAT_RIDE_BASE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::FlatTrack3x3 + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 32 }, // TrackElemType::LeftLargeCorkscrewUp + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, 32 }, // TrackElemType::RightLargeCorkscrewUp + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // TrackElemType::LeftLargeCorkscrewDown + { TRACK_CORKSCREW_LARGE, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -32 }, // TrackElemType::RightLargeCorkscrewDown + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftMediumHalfLoopUp + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightMediumHalfLoopUp + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::LeftMediumHalfLoopDown + { TRACK_HALF_LOOP_MEDIUM, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::RightMediumHalfLoopDown + { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // TrackElemType::LeftZeroGRollUp + { TRACK_ZERO_G_ROLL, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 0 }, // TrackElemType::RightZeroGRollUp + { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // TrackElemType::LeftZeroGRollDown + { TRACK_ZERO_G_ROLL, TrackPitch::Down25, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, 0 }, // TrackElemType::RightZeroGRollDown + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftLargeZeroGRollUp + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::None, TrackPitch::Up60, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightLargeZeroGRollUp + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::LeftLargeZeroGRollDown + { TRACK_ZERO_G_ROLL_LARGE, TrackPitch::Down60, TrackPitch::None, TrackRoll::None, TrackRoll::UpsideDown, -64 }, // TrackElemType::RightLargeZeroGRollDown + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::LeftFlyerLargeHalfLoopInvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::RightFlyerLargeHalfLoopInvertedUp + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::LeftFlyerLargeHalfLoopUninvertedDown + { TRACK_FLYING_LARGE_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::RightFlyerLargeHalfLoopUninvertedDown + { TRACK_FLYING_HALF_LOOP_INVERTED_UP, TrackPitch::None, TrackPitch::Up25, TrackRoll::UpsideDown, TrackRoll::None, 64 }, // TrackElemType::FlyerHalfLoopInvertedUp + { TRACK_FLYING_HALF_LOOP_UNINVERTED_DOWN, TrackPitch::Down25, TrackPitch::None, TrackRoll::UpsideDown, TrackRoll::None, -64 }, // TrackElemType::FlyerHalfLoopUninvertedDown + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::LeftEighthToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::RightEighthToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::LeftEighthToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::RightEighthToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::LeftEighthToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::None, 16 }, // TrackElemType::RightEighthToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::LeftEighthToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::None, -16 }, // TrackElemType::RightEighthToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagUp25ToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagUp25ToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagDown25ToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagDown25ToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToLeftBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToRightBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedFlatToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedFlatToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToLeftBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToRightBankedFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToLeftBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToRightBankedUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedUp25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Up25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedUp25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Left, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToLeftBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::None, TrackRoll::Right, TrackRoll::None, 0 }, // TrackElemType::DiagFlatToRightBankedDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Left, 0 }, // TrackElemType::DiagLeftBankedDown25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::None, TrackPitch::Down25, TrackRoll::None, TrackRoll::Right, 0 }, // TrackElemType::DiagRightBankedDown25ToFlat + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::Up25LeftBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::Up25RightBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, 0 }, // TrackElemType::Down25LeftBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, 0 }, // TrackElemType::Down25RightBanked + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 16 }, // TrackElemType::LeftEighthBankToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 16 }, // TrackElemType::RightEighthBankToDiagUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, -16 }, // TrackElemType::LeftEighthBankToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, -16 }, // TrackElemType::RightEighthBankToDiagDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Left, TrackRoll::Left, 16 }, // TrackElemType::LeftEighthBankToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Up25, TrackPitch::Up25, TrackRoll::Right, TrackRoll::Right, 16 }, // TrackElemType::RightEighthBankToOrthogonalUp25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Left, TrackRoll::Left, -16 }, // TrackElemType::LeftEighthBankToOrthogonalDown25 + { TRACK_SLOPE_CURVE_LARGE_BANKED, TrackPitch::Down25, TrackPitch::Down25, TrackRoll::Right, TrackRoll::Right, -16 }, // TrackElemType::RightEighthBankToOrthogonalDown25 + { TRACK_DIAG_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBrakes + { TRACK_DIAG_BLOCK_BRAKES, TrackPitch::None, TrackPitch::None, TrackRoll::None, TrackRoll::None, 0 }, // TrackElemType::DiagBlockBrakes + }; + static_assert(std::size(TrackDefinitions) == TrackElemType::Count); -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, 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, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, NO_SPIN, - NO_SPIN, -}; -static_assert(std::size(TrackTypeToSpinFunction) == TrackElemType::Count); + // clang-format on -template static int32_t EvaluatorConst(const int16_t) -{ - return TConstant; -} + 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, 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, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, L9_SPIN, R9_SPIN, NO_SPIN, + NO_SPIN, + }; + static_assert(std::size(TrackTypeToSpinFunction) == TrackElemType::Count); -static int32_t EvaluatorVerticalLoop(const int16_t progress) -{ - return (abs(progress - 155) / 2) + 28; -} + template static int32_t EvaluatorConst(const int16_t) + { + return TConstant; + } -static int32_t EvaluatorHalfLoopUp(const int16_t progress) -{ - return ((static_cast(-(progress - 155))) / 2) + 28; -} + static int32_t EvaluatorVerticalLoop(const int16_t progress) + { + return (abs(progress - 155) / 2) + 28; + } -static int32_t EvaluatorHalfLoopDown(const int16_t progress) -{ - return (progress / 2) + 28; -} + static int32_t EvaluatorHalfLoopUp(const int16_t progress) + { + return ((static_cast(-(progress - 155))) / 2) + 28; + } -static int32_t EvaluatorLargeZeroGRollUp(const int16_t progress) -{ - if (progress > 114) - return (371 - 2 * progress); - return 0; -} + static int32_t EvaluatorHalfLoopDown(const int16_t progress) + { + return (progress / 2) + 28; + } -static int32_t EvaluatorLargeZeroGRollDown(const int16_t progress) -{ - if (progress < 38) - return 67 + 2 * progress; - return 0; -} + static int32_t EvaluatorLargeZeroGRollUp(const int16_t progress) + { + if (progress > 114) + return (371 - 2 * progress); + return 0; + } -static int32_t EvaluatorLargeZeroGRollUpLeft(const int16_t progress) -{ - return 387 - 2 * progress; -} + static int32_t EvaluatorLargeZeroGRollDown(const int16_t progress) + { + if (progress < 38) + return 67 + 2 * progress; + return 0; + } -static int32_t EvaluatorLargeZeroGRollUpRight(const int16_t progress) -{ - return 2 * progress - 387; -} + static int32_t EvaluatorLargeZeroGRollUpLeft(const int16_t progress) + { + return 387 - 2 * progress; + } -static int32_t EvaluatorLargeZeroGRollDownLeft(const int16_t progress) -{ - return 83 + 2 * progress; -} + static int32_t EvaluatorLargeZeroGRollUpRight(const int16_t progress) + { + return 2 * progress - 387; + } -static int32_t EvaluatorLargeZeroGRollDownRight(const int16_t progress) -{ - return -(83 + 2 * progress); -} + static int32_t EvaluatorLargeZeroGRollDownLeft(const int16_t progress) + { + return 83 + 2 * progress; + } -static int32_t EvaluatorZeroGRollUpLeft(const int16_t progress) -{ - return 174 - progress; -} + static int32_t EvaluatorLargeZeroGRollDownRight(const int16_t progress) + { + return -(83 + 2 * progress); + } -static int32_t EvaluatorZeroGRollUpRight(const int16_t progress) -{ - return progress - 174; -} + static int32_t EvaluatorZeroGRollUpLeft(const int16_t progress) + { + return 174 - progress; + } -static int32_t EvaluatorZeroGRollDownLeft(const int16_t progress) -{ - return 73 + progress; -} + static int32_t EvaluatorZeroGRollUpRight(const int16_t progress) + { + return progress - 174; + } -static int32_t EvaluatorZeroGRollDownRight(const int16_t progress) -{ - return -(73 + progress); -} + static int32_t EvaluatorZeroGRollDownLeft(const int16_t progress) + { + return 73 + progress; + } -static int32_t EvaluatorWaterSplash(const int16_t progress) -{ - if (progress < 32) + 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; - 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) + static int32_t EvaluatorQuarterTurn3Tiles(const int16_t progress) { - 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>; + return -(progress / 2) + 134; } -} -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 - STR_BRAKES, // TrackElemType::DiagBrakes - STR_BLOCK_BRAKES // TrackElemType::DiagBlockBrakes -}; -static_assert(std::size(RideConfigurationStringIds) == TrackElemType::Count); - -namespace OpenRCT2 -{ - namespace TrackMetaData + static int32_t EvaluatorMediumHalfLoopUp(const int16_t progress) { - static constexpr auto BuildDescriptorTable() + 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) { - std::array res{}; + 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>; + } + } - for (int i = 0; i < TrackElemType::Count; i++) + 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 + STR_BRAKES, // TrackElemType::DiagBrakes + STR_BLOCK_BRAKES // TrackElemType::DiagBlockBrakes + }; + static_assert(std::size(RideConfigurationStringIds) == TrackElemType::Count); + + 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++) { - 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]; - } + 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 res; } - return trackBlock; + static constexpr auto _trackElementDescriptors = BuildDescriptorTable(); + + const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type) + { + if (type >= _trackElementDescriptors.size()) + return _trackElementDescriptors[0]; + return _trackElementDescriptors[type]; + } + + 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; + } } diff --git a/src/openrct2/ride/TrackData.h b/src/openrct2/ride/TrackData.h index cad37f9db2..b815c0540d 100644 --- a/src/openrct2/ride/TrackData.h +++ b/src/openrct2/ride/TrackData.h @@ -11,105 +11,102 @@ #include "Track.h" -constexpr uint8_t MaxSequencesPerPiece = 16; - -// 0x009968BB, 0x009968BC, 0x009968BD, 0x009968BF, 0x009968C1, 0x009968C3 - -struct TrackCurveChain +namespace OpenRCT2::TrackMetaData { - int32_t next; - int32_t previous; -}; + constexpr uint8_t MaxSequencesPerPiece = 16; -struct TrackDescriptor -{ - bool starts_diagonal; - TrackPitch slope_start; - TrackRoll RollStart; - TrackCurve track_curve; - TrackPitch slope_end; - TrackRoll RollEnd; - track_type_t track_element; -}; + // 0x009968BB, 0x009968BC, 0x009968BD, 0x009968BF, 0x009968C1, 0x009968C3 -enum -{ - NO_SPIN, - L8_SPIN, - R8_SPIN, - LR_SPIN, - RL_SPIN, - L7_SPIN, - R7_SPIN, - L5_SPIN, - R5_SPIN, - RC_SPIN, // Rotation Control Spin - SP_SPIN, // Special rapids Spin - L9_SPIN, - R9_SPIN -}; - -extern const TrackDescriptor gTrackDescriptors[186]; - -struct DodgemsTrackSize -{ - uint8_t left; - uint8_t top; - uint8_t right; - uint8_t bottom; -}; - -constexpr DodgemsTrackSize GetDodgemsTrackSize(track_type_t type) -{ - if (type == OpenRCT2::TrackElemType::FlatTrack2x2) - return { 4, 4, 59, 59 }; - if (type == OpenRCT2::TrackElemType::FlatTrack4x4) - return { 4, 4, 123, 123 }; - if (type == OpenRCT2::TrackElemType::FlatTrack2x4) - return { 4, 4, 59, 123 }; - return { 0, 0, 0, 0 }; -} - -using TrackComputeFunction = int32_t (*)(const int16_t); -struct TrackElementDescriptor -{ - StringId Description; - TrackCoordinates Coordinates; - - PreviewTrack* Block; - uint8_t PieceLength; - TrackCurveChain CurveChain; - track_type_t AlternativeType; - // Price Modifier should be used as in the following calculation: - // (RideTrackPrice * TED::PriceModifier) / 65536 - uint32_t PriceModifier; - track_type_t MirrorElement; - uint32_t HeightMarkerPositions; - uint32_t Flags; - - std::array SequenceElementAllowedWallEdges; - std::array SequenceProperties; - - TrackDefinition Definition; - uint8_t SpinFunction; - - TrackComputeFunction VerticalFactor; - TrackComputeFunction LateralFactor; - - /** - * Retrieves the block for the given sequence. This method safely handles - * out-of-bounds sequence indices. - * - * @param sequenceIndex - * @return The track block, or nullptr if it doesn’t exist. - */ - const PreviewTrack* GetBlockForSequence(uint8_t sequenceIndex) const; -}; - -namespace OpenRCT2 -{ - namespace TrackMetaData + struct TrackCurveChain { - const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type); - } // namespace TrackMetaData -} // namespace OpenRCT2 + int32_t next; + int32_t previous; + }; + + struct TrackDescriptor + { + bool starts_diagonal; + TrackPitch slope_start; + TrackRoll RollStart; + TrackCurve track_curve; + TrackPitch slope_end; + TrackRoll RollEnd; + track_type_t track_element; + }; + + enum + { + NO_SPIN, + L8_SPIN, + R8_SPIN, + LR_SPIN, + RL_SPIN, + L7_SPIN, + R7_SPIN, + L5_SPIN, + R5_SPIN, + RC_SPIN, // Rotation Control Spin + SP_SPIN, // Special rapids Spin + L9_SPIN, + R9_SPIN + }; + + extern const TrackDescriptor gTrackDescriptors[186]; + + struct DodgemsTrackSize + { + uint8_t left; + uint8_t top; + uint8_t right; + uint8_t bottom; + }; + + constexpr DodgemsTrackSize GetDodgemsTrackSize(track_type_t type) + { + if (type == OpenRCT2::TrackElemType::FlatTrack2x2) + return { 4, 4, 59, 59 }; + if (type == OpenRCT2::TrackElemType::FlatTrack4x4) + return { 4, 4, 123, 123 }; + if (type == OpenRCT2::TrackElemType::FlatTrack2x4) + return { 4, 4, 59, 123 }; + return { 0, 0, 0, 0 }; + } + + using TrackComputeFunction = int32_t (*)(const int16_t); + struct TrackElementDescriptor + { + StringId Description; + TrackCoordinates Coordinates; + + PreviewTrack* Block; + uint8_t PieceLength; + TrackCurveChain CurveChain; + track_type_t AlternativeType; + // Price Modifier should be used as in the following calculation: + // (RideTrackPrice * TED::PriceModifier) / 65536 + uint32_t PriceModifier; + track_type_t MirrorElement; + uint32_t HeightMarkerPositions; + uint32_t Flags; + + std::array SequenceElementAllowedWallEdges; + std::array SequenceProperties; + + TrackDefinition Definition; + uint8_t SpinFunction; + + TrackComputeFunction VerticalFactor; + TrackComputeFunction LateralFactor; + + /** + * Retrieves the block for the given sequence. This method safely handles + * out-of-bounds sequence indices. + * + * @param sequenceIndex + * @return The track block, or nullptr if it doesn’t exist. + */ + const PreviewTrack* GetBlockForSequence(uint8_t sequenceIndex) const; + }; + + const TrackElementDescriptor& GetTrackElementDescriptor(const uint32_t type); +} // namespace OpenRCT2::TrackMetaData